2015-06-07 15 views
7

Tôi đang phát triển một ứng dụng đơn giản bằng cách khởi động Spring Boot plus Spring. Nó rất tốt khi tôi đang thử nghiệm với máy chủ Tomcat nhúng (bao bì JAR). Tôi cần phải gỡ lỗi một số công cụ vì vậy tôi nghĩ rằng nó sẽ là tốt hơn để triển khai nó như là một WAR trên một máy chủ Tomcat bên ngoài (hoặc thực sự là một máy chủ pivotal tc bên ngoài đóng gói trên STS).Ứng dụng MVC khởi động mùa xuân trả lại HTTP 404 khi được triển khai sang một trường hợp Tomcat/tc Server bên ngoài

Tôi đã làm theo các quy trình được nêu trên Spring Boot's Documentation và khi chạy ứng dụng tôi có thể xem nhật ký đang tải bộ điều khiển, yêu cầu, v.v. (Yay? Nay.). Khi vùng chứa đã hết, mọi yêu cầu sẽ dẫn đến một 404 xấu xí.

Tôi hiểu Spring Boot sẽ sinh ra một thùng chứa tuân thủ Servlet 3, vì vậy không cần phải yêu cầu tệp web.xml. Tất cả những gì tôi phải làm là trỏ điểm vào của ứng dụng đến một lớp mở rộng SpringBootServletInitializer. Ở đây là:

package com.company.ci.integration; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.boot.builder.SpringApplicationBuilder; 
import org.springframework.boot.context.web.SpringBootServletInitializer; 

@SpringBootApplication 
public class GitlabWebhookProcessingApplication extends 
     SpringBootServletInitializer { 

    public static void main(String[] args) { 
     SpringApplication.run(GitlabWebhookProcessingApplication.class, args); 
    } 

    @Override 
    protected SpringApplicationBuilder configure(
      SpringApplicationBuilder application) { 
     return application.sources(GitlabWebhookProcessingApplication.class); 
    } 

} 

Tôi chỉ lớp này trong hồ sơ POM của tôi như thế này:

<properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <start-class>com.chemtech.ci.integration.GitlabWebhookProcessingApplication</start-class> 
     <java.version>1.7</java.version> 
    </properties> 

Như đã trình bày trên các tài liệu trên, này nên kỳ diệu làm việc và ứng dụng của tôi sẽ được nạp và tác phẩm như mong đợi.

Ah, ở đây đi các bản ghi:

Servlet Mappings:

2015-06-07 20:21:16.870 INFO 3373 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/] 
2015-06-07 20:21:16.871 INFO 3373 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'errorPageFilter' to: [/*] 
2015-06-07 20:21:16.872 INFO 3373 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 
2015-06-07 20:21:16.872 INFO 3373 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 

điều khiển hành động lập bản đồ:

2015-06-07 20:21:20.278 INFO 3373 --- [ost-startStop-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/webhooks/mergeRequestComment],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public void com.chemtech.ci.integration.controller.WebhookController.MergeRequestCommentReceiver(java.lang.String,com.chemtech.ci.integration.model.MergeRequestCommentEventRequestBody) 
2015-06-07 20:21:20.282 INFO 3373 --- [ost-startStop-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 
2015-06-07 20:21:20.282 INFO 3373 --- [ost-startStop-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[text/html],custom=[]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest) 

Điều quan trọng cần nhấn mạnh điều này làm việc đẹp sử dụng một JAR thực thi với nhúng máy chủ. Tôi gãi đầu của tôi trên này trong một thời gian và thậm chí đã cố gắng để làm như đã nêu trên một số SO đề khác:

Spring Boot - custom 404 page with standalone tomcat

http://forum.spring.io/forum/spring-projects/web/745458-spring-boot-v1-0-0-rc3-not-resolving-views-404-error (không hoàn toàn liên quan)

Tôi có làm điều gì đó sai ở đây? (vâng, tất nhiên rồi. đây là một câu hỏi hoàn toàn hùng biện)

Bất kỳ trợ giúp nào cũng sẽ được đánh giá cao.

Cảm ơn!

Trả lời

8

Vâng, đó là một câu trả lời khá lúng túng, nhưng vấn đề là tôi đã quên khi triển khai các cuộc chiến tranh trên tc Server/Tomcat ngữ cảnh gốc sẽ là tên của WAR theo mặc định.

Vì vậy, trong khi http://server.ip:8080/controller/method sẽ không hoạt động, http://server.ip:8080/war-package-name/controller/method hoạt động tốt đẹp.

Là một lưu ý cho bản thân, đừng bao giờ tin tưởng bản thân khi làm việc vào một đêm chủ nhật.

Cảm ơn mọi người và hy vọng điều này sẽ giúp một người nào đó trong tương lai!

+0

Tôi đã dành 1 ngày để tìm hiểu, nhờ giải pháp ... –

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