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>
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.