【问题标题】:Spring Boot MVC Application returns HTTP 404 when deployed to an external Tomcat/tc Server instanceSpring Boot MVC 应用程序在部署到外部 Tomcat/tc 服务器实例时返回 HTTP 404
【发布时间】:2015-08-22 08:32:12
【问题描述】:

我正在使用 Spring Boot 和 Spring web starter 开发一个简单的应用程序。当我使用嵌入式 Tomcat 服务器(JAR 打包)进行测试时,它运行得非常好。我需要调试一些东西,所以我认为将它作为 WAR 部署在外部 Tomcat 服务器(或者实际上是捆绑在 STS 上的外部 Pivotal tc 服务器)上会更好。

我遵循Spring Boot's Documentation 中所述的程序,在运行应用程序时,我可以看到加载我的控制器、请求等的日志(是吗?不)。一旦容器启动,任何请求都会导致丑陋的 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);
    }

}

我将这个类指向我的 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>

如上述文档所述,这应该神奇地工作,我的应用程序将被加载并按预期工作。

啊,这是日志:

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

控制器动作映射:

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)

重要的是要强调使用带有嵌入式服务器的可执行 JAR 可以很好地工作。我对此摸不着头脑,甚至尝试按照其他一些 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(不完全相关)

我在这里做错了吗? (嗯,我当然是。这是一个纯粹的修辞问题)

任何帮助将不胜感激。

谢谢!

【问题讨论】:

    标签: java spring spring-mvc tomcat servlet-3.0


    【解决方案1】:

    好吧,这是一个相当尴尬的答案,但问题是我在 tc Server / Tomcat 上部署战争时忘记了根上下文默认情况下是 WAR 的名称。

    所以,虽然http://server.ip:8080/controller/method 不起作用,但http://server.ip:8080/war-package-name/controller/method 却可以很好地工作。

    提醒自己,在周日晚上工作时永远不要相信自己。

    谢谢大家,希望这对以后的人有所帮助!

    【讨论】:

    • 您是否必须提供jboss-web.xmlweb.xml 才能定义您自己的根上下文?
    猜你喜欢
    • 2018-02-27
    • 2020-11-27
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 2015-12-23
    • 2019-08-15
    • 1970-01-01
    相关资源
    最近更新 更多