Java 部署在Tomcat中的Spring Boot提供了404,但可以独立工作

Java 部署在Tomcat中的Spring Boot提供了404,但可以独立工作,java,maven,spring-mvc,tomcat,spring-boot,Java,Maven,Spring Mvc,Tomcat,Spring Boot,我已经用嵌入式Tomcat测试Spring Boot大约一个月了,以构建RESTAPI。一切正常。我们现在希望在一个单独的开发环境中部署API,该环境中有两个在Tomcat容器上运行的其他(非Spring)应用程序 我做了和中指定的更改 部署进行得很顺利(日志很好,没有错误),看看Tomcat管理,我看到我的应用程序已部署。然而,当我尝试在curl中访问时,我得到404 非常感谢您的帮助 更新: 这是我的日志: Netbeans: NetBeans:部署在ApacheTomcat 8.0.17上

我已经用嵌入式Tomcat测试Spring Boot大约一个月了,以构建RESTAPI。一切正常。我们现在希望在一个单独的开发环境中部署API,该环境中有两个在Tomcat容器上运行的其他(非Spring)应用程序

我做了和中指定的更改

部署进行得很顺利(日志很好,没有错误),看看Tomcat管理,我看到我的应用程序已部署。然而,当我尝试在curl中访问时,我得到404

非常感谢您的帮助

更新:

这是我的日志:

Netbeans:

NetBeans:部署在ApacheTomcat 8.0.17上 配置文件模式:false 调试模式:false 部队重新部署:正确

在/home/bugz/workspace/pdcore/sophiaserver/target/sophia-server-1.0.0-SNAPSHOT进行就地部署

正在进行部署

部署?配置=文件%3A%2Ftmp%2Fcontext1845402702541504208.xml&path=/sophia

确定-在上下文路径/sophia处部署应用程序

正在启动

开始?路径=/sophia

确定-已在上下文路径/sophia处启动应用程序

Tomcat:

信息10:47:52:703 org.springframework.boot.context.embedded.ServletRegistrationBean-将servlet:'dispatcherServlet'映射到[/sophia/*]

信息10:47:54:042 org.springframework.boot.SpringApplication-在8.285秒内启动应用程序(JVM运行12087.301)

2015年1月22日10:47:54.060信息[http-nio-8080-exec-99]org.apache.catalina.startup.HostConfig.deployDescriptor配置描述符/home/bugz/workspace/server/apache-tomcat-8.0.17/conf/catalina/localhost/sophia.xml的部署在12091毫秒内完成

在Catalina localhost的sophia.xml中:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" docBase="/home/bugz/workspace/pdcore/sophiaserver/target/sophia-server-1.0.0-SNAPSHOT" path="/sophia"/>


我试过访问

  • (战争名称)

  • 第一个返回一个404,但是带有我的CORS过滤器bean中的CORS信息。第二个返回404,没有CORS信息(表示应用程序已启动并已配置,但我似乎无权访问控制器)。

    运行应用程序时,调用路径由两部分组成

    第一个是部署应用程序的基础URL,在您的例子中是
    /sophia

    第二个是
    DispatcherServlet
    的servlet映射,即
    /sohpia/*

    第三个是
    DispatcherServlet
    中控制器的映射,在您的示例中是
    /users

    所有这些东西结合在一起创建URL
    /sophia/sophia/users

    作为WAR部署的区别在于,当作为jar运行时,您包含了一个单独的URL进行部署,默认情况下,它部署到
    /
    (根目录)


    您可以将
    /sophia
    作为
    应用程序.properties
    中的
    服务器.context路径
    ,并将
    DispatcherServlet
    映射到
    /*
    /
    。在这两种情况下,它都会为您提供您想要的(和期望的)URL。

    检查java-版本意味着如果您在java 8中遵守了war,并且tomcat在java 7上运行,那么它就不起作用。

    您是否尝试过扩展SpringBootServletInitializer并重写configure方法?如上所述

    与在容器中以war文件的形式运行应用程序相比,jar文件的入口点是不同的[Main Class]

    希望这有帮助。

    检查java版本

    pom.xml中存在的版本必须与服务器上安装的版本相同

    openjdk 11对我来说很好


    检查您的日志文件,您是否确定应用程序部署在该特定URL…@M.Deinum,我已经添加了我获得的日志。控制器被映射,它似乎正在按预期部署上下文(/sophia)。您的应用程序被映射到
    /sophia
    ,接下来您的
    DispatcherServlet
    被映射到
    /sophia/*
    ,使URL调用
    /sophia/sophia/users
    。当作为jar运行时,它被部署为根应用程序,映射到
    /
    …Awesome@M.Deinum,请添加一个答案,我将接受。非常感谢!当您使用嵌入式服务器部署时,它将在没有应用程序名称段的情况下运行。这个细节是我的问题。