Spring Boot Deployed in Tomcat 给出 404 但独立工作
Spring Boot Deployed in Tomcat gives 404 but works Stand-alone
为了构建 REST API,我已经测试 Spring 嵌入式启动 Tomcat 大约一个月了。一切正常。我们现在想在一个单独的开发环境中部署 API,该环境在 Tomcat 容器上有几个其他(非 Spring)应用程序 运行。
我进行了 Converting a Spring Boot JAR Application to a WAR using Maven and Spring Boot Docs 中指定的更改。
部署进展顺利(日志正常,没有错误)并查看 Tomcat 管理,我看到我的应用程序已部署。但是,当我尝试在 curl 中访问 http://localhost:8080/sophia/users 时,我得到 404.
非常感谢任何帮助。
更新:
这是我的日志:
Netbeans:
NetBeans: Deploying on Apache Tomcat 8.0.17
profile mode: false
debug mode: false
force redeploy: true
In-place deployment at /home/bugz/workspace/pdcore/sophiaserver/target/sophia-server-1.0.0-SNAPSHOT
Deployment is in progress...
deploy?config=file%3A%2Ftmp%2Fcontext1845402702541504208.xml&path=/sophia
OK - Deployed application at context path /sophia
Start is in progress...
start?path=/sophia
OK - Started application at context path /sophia
Tomcat:
INFO 10:47:52:703 org.springframework.boot.context.embedded.ServletRegistrationBean - Mapping servlet: 'dispatcherServlet' to [/sophia/*]
INFO 10:47:54:042 org.springframework.boot.SpringApplication - Started application in 8.285 seconds (JVM running for 12087.301)
22-Jan-2015 10:47:54.060 INFO [http-nio-8080-exec-99] org.apache.catalina.startup.HostConfig.deployDescriptor Deployment of configuration descriptor /home/bugz/workspace/server/apache-tomcat-8.0.17/conf/Catalina/localhost/sophia.xml has finished in 12,091 ms
在 sophia.xml 中,对于 Catalina 本地主机:
<?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"/>
我试过访问
- http://localhost:8080/sophia/users
- http://localhost:8080/sophia-server-1.0.0-SNAPSHOT/users(WAR 的名字)
第一个 return 是 404,但包含来自我的 CORS 过滤器 bean 的 CORS 信息。第二个 return 404 没有 CORS 信息(这表明应用程序已启动并已配置,但我似乎无权访问控制器)。
当运行 应用程序调用路径由几个部分组成。
第一个是部署应用程序的基础 URL,在您的例子中是 /sophia
。
第二个是 DispatcherServlet
的 servlet 映射,在您的例子中是 /sohpia/*
。
第三个是 DispatcherServlet
内部控制器的映射,在您的示例中是 /users
。
所有这些结合起来创造了 URL /sophia/sophia/users
。
作为 WAR 部署的区别在于,您包含一个单独的 URL 部署,当 运行 作为 jar 时,默认情况下部署到 /
(根)。
您可以通过将 /sophia
作为 application.properties
中的 server.context-path
并将 DispatcherServlet
映射到 /*
或 /
来修复它.在这两种情况下,这都会为您提供您想要的(和预期的)URL。
check java -version 表示如果您在 java 8 中遵守 war 并且 tomcat 在 java 7 中遵守 运行 那么没用。
您是否尝试过扩展 SpringBootServletInitializer 并覆盖配置方法?如前所述 here
jar 文件的入口点不同 [Main Class] 与 运行 您的应用作为容器内的 war 文件相比。
希望对您有所帮助。
检查 java 版本
pom.xml 中的版本必须与服务器上安装的版本相同
openjdk 11 适合我
为了构建 REST API,我已经测试 Spring 嵌入式启动 Tomcat 大约一个月了。一切正常。我们现在想在一个单独的开发环境中部署 API,该环境在 Tomcat 容器上有几个其他(非 Spring)应用程序 运行。
我进行了 Converting a Spring Boot JAR Application to a WAR using Maven and Spring Boot Docs 中指定的更改。
部署进展顺利(日志正常,没有错误)并查看 Tomcat 管理,我看到我的应用程序已部署。但是,当我尝试在 curl 中访问 http://localhost:8080/sophia/users 时,我得到 404.
非常感谢任何帮助。
更新:
这是我的日志:
Netbeans:
NetBeans: Deploying on Apache Tomcat 8.0.17 profile mode: false debug mode: false force redeploy: true
In-place deployment at /home/bugz/workspace/pdcore/sophiaserver/target/sophia-server-1.0.0-SNAPSHOT
Deployment is in progress...
deploy?config=file%3A%2Ftmp%2Fcontext1845402702541504208.xml&path=/sophia
OK - Deployed application at context path /sophia
Start is in progress...
start?path=/sophia
OK - Started application at context path /sophia
Tomcat:
INFO 10:47:52:703 org.springframework.boot.context.embedded.ServletRegistrationBean - Mapping servlet: 'dispatcherServlet' to [/sophia/*]
INFO 10:47:54:042 org.springframework.boot.SpringApplication - Started application in 8.285 seconds (JVM running for 12087.301)
22-Jan-2015 10:47:54.060 INFO [http-nio-8080-exec-99] org.apache.catalina.startup.HostConfig.deployDescriptor Deployment of configuration descriptor /home/bugz/workspace/server/apache-tomcat-8.0.17/conf/Catalina/localhost/sophia.xml has finished in 12,091 ms
在 sophia.xml 中,对于 Catalina 本地主机:
<?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"/>
我试过访问
- http://localhost:8080/sophia/users
- http://localhost:8080/sophia-server-1.0.0-SNAPSHOT/users(WAR 的名字)
第一个 return 是 404,但包含来自我的 CORS 过滤器 bean 的 CORS 信息。第二个 return 404 没有 CORS 信息(这表明应用程序已启动并已配置,但我似乎无权访问控制器)。
当运行 应用程序调用路径由几个部分组成。
第一个是部署应用程序的基础 URL,在您的例子中是 /sophia
。
第二个是 DispatcherServlet
的 servlet 映射,在您的例子中是 /sohpia/*
。
第三个是 DispatcherServlet
内部控制器的映射,在您的示例中是 /users
。
所有这些结合起来创造了 URL /sophia/sophia/users
。
作为 WAR 部署的区别在于,您包含一个单独的 URL 部署,当 运行 作为 jar 时,默认情况下部署到 /
(根)。
您可以通过将 /sophia
作为 application.properties
中的 server.context-path
并将 DispatcherServlet
映射到 /*
或 /
来修复它.在这两种情况下,这都会为您提供您想要的(和预期的)URL。
check java -version 表示如果您在 java 8 中遵守 war 并且 tomcat 在 java 7 中遵守 运行 那么没用。
您是否尝试过扩展 SpringBootServletInitializer 并覆盖配置方法?如前所述 here
jar 文件的入口点不同 [Main Class] 与 运行 您的应用作为容器内的 war 文件相比。
希望对您有所帮助。
检查 java 版本
pom.xml 中的版本必须与服务器上安装的版本相同
openjdk 11 适合我