2016-09-19 14 views
7

Được hướng dẫn bởi Serving Web Content with Spring MVC, tôi đang tạo một ứng dụng web khởi động Spring mà tôi có thể chạy bằng cả cá thể Tomcat được nhúng cũng như trên máy chủ Tomcat 8 độc lập.Ứng dụng khởi động Spring cung cấp 404 khi được triển khai cho Tomcat nhưng hoạt động với máy chủ nhúng

Ứng dụng hoạt động như mong đợi khi được thực hiện dưới dạng java -jar adminpage.war và tôi thấy kết quả mong đợi khi tôi truy cập http://localhost:8080/table. Tuy nhiên, khi tôi triển khai máy chủ Tomcat 8 (bằng cách thả adminpage.war vào thư mục webapps), tôi gặp lỗi 404 khi truy cập https://myserver/adminpage/table.

Các tệp catelina.loglocalhost.log không chứa gì hữu ích trên máy chủ Tomcat.

Có ai có thể đề xuất nơi tôi đã định cấu hình sai không? Tôi đã không có những vấn đề tương tự trong quá khứ khi triển khai các dịch vụ RESTful với Spring Boot, nhưng đây là bước đột phá đầu tiên của tôi vào một ứng dụng web.

hồ sơ của tôi:

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

Ứng dụng của bạn có chứa web.xml không? –

+1

@SergeyBespalov Tôi không nghĩ rằng nó cần một với Spring Boot. Xem câu trả lời của tôi bên dưới - Tôi đã quên điều chỉnh tệp 'Application.java' của mình. –

+0

bạn nói đúng là không cần thiết, nhưng vẫn có thể sử dụng với Spring Boot –

Trả lời

22

Tôi đã quên tinh chỉnh tập tin Application.java của tôi để mở rộng SpringBootServletInitializer và ghi đè lên các phương pháp configure.

tập tin Corrected:

@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 để https://mtdevuk.com/2015/07/16/how-to-make-a-spring-boot-jar-into-a-war-to-deploy-on-tomcat/ để chỉ ra sai lầm của tôi.

Thông tin thêm tại Create a deployable war file trong Spring Boot Tài liệu chính thức.

Các vấn đề liên quan