2016-09-19 35 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。

相關問題