我一直在开发一个应用程序,该应用程序目前正在部署到众多环境中。但是,我们在部署到某些环境时遇到了上下文路径问题。这是一个在 Tomcat 6 上运行的 Java/Spring 应用程序。部署过程由系统管理员处理,因此我对该过程没有太多了解,因此我试图提出一些处理该场景的方法。对于所有 URL,我们在它们前面加上request.getContextPath()
. 在正常情况下,这可以正常工作。例如,如果 WAR 的文件名为 site1.war,它将被部署到
/site1/
但是,我们还有其他几个部署了 WAR 的环境,它包含应用程序根目录之外的根路径,因此最终会出现
/otherroot/site1/
所以应用程序根路径是/site1/
并且不知道这个其他根路径/otherroot/
。在这种情况下,调用 getContextPath() 会返回/site1/
实际上我们想要的路径是/otherroot/site1/
.
现在,让我感到困惑的一件事是,当我们在 JSF 页面中定义图像(图像、样式表或 javascript 文件)时使用 #{request.contextpath} 时,在查看源代码时 URL 是正确的。例如,给定/otherroot/site/
url,如果我设置
<img src="#{request.contextPath}/image1.png"/>
,当我查看渲染页面的来源时,我看到了/otherroot/site1/image1.png
. 现在,如果我在每次呈现页面时设置一些 JS 变量来保存上下文路径,我会得到不同的结果。例如,
<script>
APP.ROOT_PATH = '#{request.contextPath}';
</script>
这将呈现以下内容:
APP.ROOT_PATH = '/site1'
这会导致一些问题,因为我们使用异步请求,因此我们使用 url 从客户端正确请求数据。
所以我的问题是,编写可以在任何给定路径下运行的应用程序的最佳策略是什么?