Spring Boot application gives 404 when deployed to Tomcat but works with embedded server
Solution 1
I had forgotten to tweak my Application.java
file to extend SpringBootServletInitializer
and override the configure
method.
Corrected file:
@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);
}
}
Hat tip to https://mtdevuk.com/2015/07/16/how-to-make-a-spring-boot-jar-into-a-war-to-deploy-on-tomcat/ for pointing out my mistake.
More info at Create a deployable war file in Spring Boot Official docs.
Solution 2
As of August 2021 . If anyone facing this issue in Tomcat 10 server, just read in the below post that Spring boot won't work in Tomcat 10. https://github.com/spring-projects/spring-boot/issues/22414
I had faced this issue and switching to an previous version, which resolved the problem.
Solution 3
In case anyone having same problem while using sprint boot in the IntelliJ community edition. You just need to put your main class in the main package (com.xyx) don't put it in any subpackage which is created inside com.xyx.
Solution 4
Downgrading Tomcat from version 10 to 9 did the trick for me. Update January 2022, apparently tomcat 10 still does not support spring-boot. As mentioned by Dipu over here, https://stackoverflow.com/a/68917349/13294956
Duncan Jones
Updated on July 13, 2022Comments
-
Duncan Jones almost 2 years
Guided by Serving Web Content with Spring MVC, I'm creating a Spring Boot web application that I can run using both the embedded Tomcat instance as well as on a standalone Tomcat 8 server.
The application works as expected when executed as
java -jar adminpage.war
and I see the expected outcome when I visithttp://localhost:8080/table
. However, when I deploy to a Tomcat 8 server (by droppingadminpage.war
into thewebapps
directory), I get a 404 error when I visithttps://myserver/adminpage/table
.The
catelina.log
andlocalhost.log
files contain nothing helpful on the Tomcat server.Can anyone suggest where I've made a misconfiguration? I've not had the same problems in the past when deploying RESTful services with Spring Boot, but this is my first foray into a web application.
My application files:
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>
-
mayank almost 5 yearsThanks a lot but now the class is depricated ;)
-
noman404 over 2 yearsVery important information, was struggling for a while, thanks Dipu!
-
PKS over 2 yearsmayank, can you tell the latest way?
-
Tone about 2 yearsI'm using Tomcat 9 and still facing this issue.