Spring-Boot war 外部 Tomcat 上下文路径

6
我们正在使用Spring Boot,并创建了一个WAR文件,而不是JAR文件,以便在常规Tomcat服务器上部署。看起来一切正常,但似乎上下文路径没有正确设置。我的index.html中的任何相对路径都不能正常工作。
在浏览器中加载应用程序时,此链接:
<link type="text/css" rel="stylesheet" href="app.min.css" />

尝试从http://localhost:port/app.min.css加载,而不是从http://localhost:port/contextpath/app.min.css加载。试图在application.properties中设置此值无效,因为这个值只适用于嵌入式Tomcat服务器。


你的浏览器源代码中是否有这一行 <link type="text/css" rel="stylesheet" href="app.min.css" /> - Nicolas Labrot
@NicolasLabrot,是的,没错。我可以看到浏览器正在尝试拉取外部链接时的网络调用。 - MD6380
1个回答

7
如您所料,server.context-path属性以及所有其他server.*属性仅适用于嵌入式Tomcat。如果您使用WAR打包部署到外部Tomcat,则必须在外部Tomcat本身中配置这些值。
我们通常在./conf/Catalina/localhost/中设置一个上下文描述符,名称与您期望的上下文路径相同,例如根据文档,命名为contextpath.xml

有没有一种方法可以通过应用程序代码或配置来完成,而不是通过Tomcat服务器配置? - MD6380
在contextpath.xml文件中,我已经设置了path属性。我已经在catalina.log文件中验证了文件被读取并且路径被设置,但是它不起作用。访问主index.html页面时,链接尝试从http://localhost:port/filename下载而不是http://localhost:port/contextpath/filename。Spring Boot是否以某种不同的方式处理这个问题? - MD6380
1
我开始觉得我可能没有正确理解你的问题,我会先保留我的回答,等我弄清楚情况后再进行编辑。 - ci_
https://github.com/spring-projects/spring-boot/issues/4682 我认为需要在外部Tomcat配置中设置上下文。 - Phani Kumar Bhamidipati
server.context-path属性是如何工作的?我认为此属性被来自Servlet容器的上下文路径覆盖。因此,您仅需要针对本地部署(嵌入式)进行设置,以便它与在外部服务器上相同的路径一起使用(在那里设置了相同的路径)。 - Zveratko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接