2016-09-19 145 views
7

Serving Web Content with Spring MVC为指导,我创建了一个Spring Boot Web应用程序,可以使用嵌入式Tomcat实例以及独立Tomcat 8服务器运行该应用程序。Spring Boot应用程序在部署到Tomcat时提供404,但与嵌入式服务器配合使用

该应用程序在按java -jar adminpage.war执行时按预期工作,我在访问http://localhost:8080/table时看到预期结果。但是,当我部署到Tomcat 8服务器时(通过将adminpage.war放入webapps目录中),当我访问https://myserver/adminpage/table时,出现404错误。

catelina.loglocalhost.log文件对Tomcat服务器没有任何帮助。

任何人都可以提出我在哪里做出配置错误?使用Spring Boot部署RESTful服务时,我还没有遇到同样的问题,但这是我第一次进入Web应用程序。

我的应用程序文件:

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> 
+0

您的应用程序是否包含web.xml? –

+1

@SergeyBespalov我不认为它需要一个Spring Boot。看到我的答案在下面 - 我忘了调整我的'Application.java'文件。 –

+0

你是对的这不是必要的,但仍然可以使用Spring Boot –

回答

22

我忘了调整我Application.java文件扩展SpringBootServletInitializer并重写configure方法。

更正的文件:

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

帽尖到https://mtdevuk.com/2015/07/16/how-to-make-a-spring-boot-jar-into-a-war-to-deploy-on-tomcat/指出我的错误。

更多信息在Create a deployable war file Spring Boot Official docs。

相关问题