java maven spring-mvc tomcat spring-boot

java - La aplicación Spring Boot proporciona 404 cuando se implementa en Tomcat pero funciona con un servidor incorporado



maven spring-mvc (1)

Guiado por Servir contenido web con Spring MVC , estoy creando una aplicación web Spring Boot que puedo ejecutar tanto con la instancia integrada de Tomcat como en un servidor Tomcat 8 independiente.

La aplicación funciona como se esperaba cuando se ejecuta como java -jar adminpage.war y veo el resultado esperado cuando visito http://localhost:8080/table . Sin embargo, cuando implemento en un servidor Tomcat 8 (al colocar adminpage.war en el directorio webapps ), adminpage.war un error 404 cuando visito https://myserver/adminpage/table .

Los archivos catelina.log y localhost.log no contienen nada útil en el servidor Tomcat.

¿Alguien puede sugerir dónde he hecho una mala configuración? No he tenido los mismos problemas en el pasado al implementar servicios RESTful con Spring Boot, pero esta es mi primera incursión en una aplicación web.

Mis archivos de aplicación:

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>


Me había olvidado de modificar mi archivo Application.java para extender SpringBootServletInitializer y anular el método de configure .

Archivo corregido:

@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); } }

Sugerencia de sombrero a https://mtdevuk.com/2015/07/16/how-to-make-a-spring-boot-jar-into-a-war-to-deploy-on-tomcat/ por señalar mi error .

Más información en Crear un archivo de guerra desplegable en los documentos oficiales de Spring Boot.