我已经使用嵌入式Tomcat测试Spring Boot大约一个月了,以构建REST API。一切都很好。现在,我们希望将API部署在一个单独的开发环境中,该环境在Tomcat容器上运行着几个其他(非Spring)应用程序。
我进行了使用Maven和Spring 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中启动了应用程序
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毫秒内完成
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"/>
我尝试访问
第一个返回404,但包含来自我的CORS过滤器bean的CORS信息。没有CORS信息的第二个返回404(指示应用程序已启动并已配置,但我似乎无法访问控制器)。
运行应用程序时,调用路径由两部分组成。
第一个是在其上部署应用程序的基本URL,在您的情况下为/sophia。
/sophia
第二个是DispatcherServlet您的情况下的servlet映射/sohpia/*。
DispatcherServlet
/sohpia/*
第三个是内的控制器的映射DispatcherServlet,在您的示例中为/users。
/users
所有这些东西结合在一起就创建了URL /sophia/sophia/users。
/sophia/sophia/users
作为WAR进行部署之间的区别在于,您包括一个单独的URL进行部署,以jar形式运行时,默认情况下将其部署到/(根)。
/
你可以通过把修复它/sophia作为server.context- path中application.properties并映射DispatcherServlet到/*或/。在两种情况下,这都将为您提供所需(和预期)的URL。
server.context- path
application.properties
/*