小编典典

在Tomcat中部署的Spring Boot可以提供404,但可以独立运行

spring-boot

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

我进行了使用MavenSpring
Boot Docs
将Spring Boot JAR应用程序转换为WAR中指定的更改。

部署进行得很好(日志很好,没有错误),查看Tomcat管理后,我看到我的应用程序已部署。但是,当我尝试以curl 方式访问http://
localhost:8080 / sophia / users时
,我得到404。

任何帮助深表感谢。

更新:

这是我的日志:

Netbeans:

NetBeans:在Apache Tomcat 8.0.17上的配置文件模式:false调试模式:false强制重新部署:true

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

部署正在进行中…

deploy?config = file%3A%2Ftmp%2Fcontext1845402702541504208.xml&path = /
sophia

OK-在上下文路径/ sophia上部署了应用程序

开始进行中…

开始吗?path = / sophia

OK-在上下文路径/ sophia中启动了应用程序

Tomcat:

INFO 10:47:52:703
org.springframework.boot.context.embedded.ServletRegistrationBean-
映射servlet:’dispatcherServlet’到[/ sophia / *]

INFO 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已在12,091毫秒内完成

在Catalina本地主机的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"/>

我尝试访问

  1. http:// localhost:8080 / sophia / users
  2. http:// localhost:8080 / sophia-server-1.0.0-SNAPSHOT / users(WAR名称)

第一个返回404,但包含来自我的CORS过滤器bean的CORS信息。没有CORS信息的第二个返回404(指示应用程序已启动并已配置,但我似乎无法访问控制器)。


阅读 275

收藏
2020-05-30

共1个答案

小编典典

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

第一个是在其上部署应用程序的基本URL,在您的情况下为/sophia

第二个是DispatcherServlet您的情况下的servlet映射/sohpia/*

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

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

作为WAR进行部署之间的区别在于,您包括一个单独的URL进行部署,以jar形式运行时,默认情况下将其部署到/(根)。

你可以通过把修复它/sophia作为server.context- pathapplication.properties并映射DispatcherServlet/*/。在两种情况下,这都将为您提供所需(和预期)的URL。

2020-05-30