Gus*_*mos 8 java spring tomcat spring-mvc servlet-3.0
我正在使用Spring Boot和Spring web starter开发一个简单的应用程序.当我使用嵌入式Tomcat服务器(JAR打包)进行测试时,它非常顺利.我需要调试一些东西,所以我认为最好将它作为WAR部署在外部Tomcat服务器上(或者实际上是STS上捆绑的外部Pivotal tc服务器).
我按照Spring Boot的文档中所述的程序进行操作,运行应用程序时,我可以看到日志加载我的控制器,请求等(是吗?不.).一旦容器启动,任何请求都会导致丑陋的404.
我知道Spring Boot会产生符合Servlet 3的容器,所以web.xml不应该严格要求文件.我所要做的就是将我的应用程序的入口点指向一个扩展的类SpringBootServletInitializer.这里是:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我把这个类指向我的POM文件,如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
正如上面的文档所述,这应该神奇地工作,我的应用程序将被加载并按预期工作.
啊,这里是日志:
Servlet映射:
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: [/*]
Run Code Online (Sandbox Code Playgroud)
控制器动作映射:
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)
Run Code Online (Sandbox Code Playgroud)
重要的是要强调使用带有嵌入式服务器的可执行JAR来完美地工作.我在这个问题上摸不着头脑,甚至试图像其他一些SO线程那样做:
Spring Boot - 自定义404页面,带有独立的tomcat
我在这里做错了吗?(当然,我是.这是一个纯粹的修辞问题)
任何帮助都感激不尽.
谢谢!
Gus*_*mos 11
嗯,这是一个相当尴尬的答案,但问题是我忘记了在tc Server/Tomcat上部署战争时,根上下文默认是WAR的名称.
所以,虽然http://server.ip:8080/controller/method不起作用,但http://server.ip:8080/war-package-name/controller/method精美的作品.
作为一个自我的笔记,在周日晚上工作时永远不要相信自己.
谢谢大家,并希望这有助于未来的人!
| 归档时间: |
|
| 查看次数: |
6960 次 |
| 最近记录: |