2015-06-07 16 views
7

Sto sviluppando un'applicazione semplice che utilizza Spring Boot e Spring web starter. Va molto bene quando sto testando con il server Tomcat incorporato (pacchetto JAR). Ho bisogno di eseguire il debug di alcune cose quindi ho pensato che sarebbe stato meglio distribuirlo come WAR su un server Tomcat esterno (o in realtà un server tiv server esterno in bundle su STS).Avvio a molla L'applicazione MVC restituisce l'HTTP 404 quando viene distribuita su un'istanza esterna di Tomcat/tc Server

Ho seguito le procedure indicate su Spring Boot's Documentation e durante l'esecuzione dell'applicazione posso vedere i registri che caricano i miei controller, richieste, ecc. (Sì? No). Una volta che il contenitore è esaurito, qualsiasi richiesta porta a un brutto 404.

Capisco che Spring Boot genererà un contenitore compatibile con Servlet 3, quindi un file web.xml non dovrebbe essere strettamente richiesto. Tutto quello che devo fare è puntare il punto di ingresso della mia applicazione su una classe che estende SpringBootServletInitializer. Eccolo:

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

} 

ho puntare questa classe sul mio file POM in questo modo:

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

Come indicato sulla documentazione di cui sopra, questo dovrebbe magicamente lavorare e la mia domanda sarebbe caricato e opere come previsto.

Ah, ecco qui i registri:

Servlet Mapping:

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

controller azioni mappatura:

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) 

E 'importante sottolineare questo funziona a meraviglia con un JAR eseguibile incorporato server. Sto graffiare la mia testa su questo per un po 'e anche cercato di fare come indicato su alcuni altri thread SO:

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 (non del tutto correlato)

sto facendo qualcosa di sbagliato qui? (beh, certo che lo sono. questa è una domanda puramente retorica)

Qualsiasi aiuto sarà molto apprezzato.

Grazie!

risposta

8

Beh, è ​​una risposta piuttosto imbarazzante, ma il problema è che mi sono dimenticato quando si distribuiscono guerre su tc Server/Tomcat il contesto di root sarà il nome di WAR per impostazione predefinita.

Quindi, mentre http://server.ip:8080/controller/method non funziona, http://server.ip:8080/war-package-name/controller/method funziona magnificamente.

Come una nota per se stessi, non fidarti mai di te quando lavori la domenica sera.

Grazie a tutti, e spero che questo aiuti qualcuno in futuro!

+0

Ho passato un giorno a capirlo, grazie per la soluzione ... –

Problemi correlati