2015-06-07 26 views
7

Spring Boot ve Spring web başlatıcısını kullanarak basit bir uygulama geliştiriyorum. Gömülü Tomcat sunucusuyla (JAR paketleme) test ettiğimde çok iyi gidiyor. Bazı malzemelerin hatalarını ayıklamam gerekiyor, bu yüzden harici bir Tomcat Sunucusunda (ya da gerçekten STS'de bulunan harici bir Pvctal tc Sunucusu) bir WAR olarak dağıtılmasının daha iyi olacağını düşündüm.Spring Boot MVC Uygulaması, harici bir Tomcat/tc Server örneğine dağıtıldığında HTTP 404'ü döndürür

Spring Boot's Documentation numaralı belgede belirtilen prosedürleri takip ettim ve uygulamayı çalıştırırken denetleyicileri, istekleri vb. Yükleyen günlükleri görebiliyorum (Yay? Nay.). Kap dolduğunda, herhangi bir istek çirkin bir 404'e neden olur.

Spring Boot uygulamasının Servlet 3 uyumlu bir kap oluşturduğunu anlıyorum, bu nedenle web.xml dosyasının kesinlikle gerekmemesi gerekir. Tek yapmam gereken, başvurumun giriş noktasını SpringBootServletInitializer'u genişleten bir sınıfa işaret etmektir. İşte burada: Yukarıdaki belgelerde belirtildiği gibi

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

, bu sihirli çalışması gerekir ve benim uygulama yüklendikten ve eserleri olurdu:

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

} 

Bu gibi benim POM dosya üzerinde bu sınıfı işaret beklenildiği gibi.

Ah, işte günlükleri gider:

Servlet Eşlemeler:

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: [/*] 

Denetleyici eylemleri haritalama:

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şleri güzelce gömülü olan bir çalıştırılabilir JAR kullanarak vurgulamak önemlidir sunucusu. Bir süre bunun üzerinde başımı kaşıma ve hatta bazı diğer SO parçacığı üzerinde belirtilen yapmaya çalıştım ediyorum:

Burada yanlış mı yapıyorum (tamamen ilgili değil)

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? (Tabii ki, elbette. Bu tamamen retorik bir soru)

Herhangi bir yardım çok takdir edilecektir.

Teşekkürler!

cevap

8

Eh, bu oldukça utanç verici bir cevap, ancak sorun çözüldü tc Server/Tomcat üzerinde savaşları dağıtırken root içeriği varsayılan olarak WAR'in adı olacaktır.

Yani, http://server.ip:8080/controller/method çalışmayacaksa, http://server.ip:8080/war-package-name/controller/method güzel çalışır.

Kendinize bir not olarak, bir pazar gecesi çalışırken asla kendinize güvenmeyin.

Herkese teşekkürler, ve umarım bu gelecekte birilerine yardım eder!

+0

Çözüme 1 gün ayırdım, çözüm için teşekkürler ... –