web-dev-qa-db-fra.com

L'application Spring Boot donne 404 lorsqu'elle est déployée sur Tomcat mais fonctionne avec un serveur intégré

Guidé par Serving Web Content with Spring MVC , je crée une application Web Spring Boot que je peux exécuter en utilisant à la fois l'instance Tomcat intégrée ainsi que sur un serveur Tomcat 8 autonome.

L'application fonctionne comme prévu lorsqu'elle est exécutée en tant que Java -jar adminpage.war et je vois le résultat attendu lors de ma visite http://localhost:8080/table. Cependant, lorsque je déploie sur un serveur Tomcat 8 (en supprimant adminpage.war dans le répertoire webapps), j'obtiens une erreur 404 lorsque je visite https://myserver/adminpage/table.

Le catelina.log et localhost.log les fichiers ne contiennent rien d'utile sur le serveur Tomcat.

Quelqu'un peut-il suggérer où j'ai fait une mauvaise configuration? Je n'ai pas eu les mêmes problèmes dans le passé lors du déploiement de services RESTful avec Spring Boot, mais c'est ma première incursion dans une application Web.

Mes dossiers de candidature:

src/main/Java/com/.../Application.Java

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

src/main/Java/com/.../MainController.Java

@Controller
public class MainController {

    @RequestMapping("/table")
    public String greeting(Model model) {
        model.addAttribute("name", "Fooballs");
        return "table";
    }
}

src/main/resources/templates/table.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p th:text="'Hello, ' + ${name} + '!'" />
</body>
</html>

pom.xml

<project
  xmlns="http://maven.Apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.foo</groupId>
  <artifactId>adminpage</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.0.RELEASE</version>
  </parent>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-Tomcat</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <optional>true</optional>
    </dependency>
  </dependencies>

  <properties>
    <Java.version>1.8</Java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>


  <build>
    <finalName>adminpage</finalName>

    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>
26
Duncan Jones

J'avais oublié de modifier mon Application.Java fichier pour étendre SpringBootServletInitializer et remplacer la méthode configure.

Fichier corrigé:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
  public static void main(String[] args) {
      SpringApplication.run(Application.class, args);
  }

  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
      return builder.sources(Application.class);
  }
}

Astuce chapeau pour https://mtdevuk.com/2015/07/16/how-to-make-a-spring-boot-jar-into-a-war-to-deploy-on-Tomcat/ pour avoir signalé mon erreur.

Plus d'informations sur Créer un fichier war déployable dans les documents officiels de Spring Boot.

61
Duncan Jones