Java - 管理上下文路径

标签 java tomcat

我一直在开发一个应用程序,该应用程序目前正在部署到许多环境中。但是,当部署到某些环境时,我们在上下文路径方面遇到了问题。这是一个在 Tomcat 6 上运行的 Java/Spring 应用程序。部署过程由系统管理员处理,因此我对该过程的了解不多,因此我试图想出一些处理该场景的方法。对于所有 URLS,我们在它们前面加上 request.getContextPath() .在正常情况下,这工作正常。例如,如果 WAR 的文件名为 site1.war,它将被部署到

/site1/

但是,我们有几个部署 WAR 的其他环境,它包含应用程序根目录之外的根路径,因此它以

/otherroot/site1/

所以应用根路径是/site1/并且不知道这个其他根路径 /otherroot/ .在这种情况下,调用 getContextPath() 返回 /site1/而实际上我们想要的路径是 /otherroot/site1/ .

现在,让我感到困惑的一件事是,当我们在定义图像(图像、样式表或 javascript 文件)时在 JSF 页面中使用 #{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 正确地从客户端请求数据。

所以我的问题是,编写可以在任何给定路径下运行的应用程序的最佳策略是什么?

最佳答案

您可以通过使用可为您识别环境的拦截器来实现此目的。您可以将环境路径通过模型传递给 UI,UI 可以使用它。 例如。 /otherroot/site1/ ,这里site1是上下文名称,otherrrot是环境。

当您访问您的服务器以呈现 jsp 时,拦截器将分析此 url 并知道该 url 与 otherroot1 有关系。可以在模型中设置此环境和相关数据,该模型可用于获取 js、图像等以及任何其他 ajax 调用。

渲染页面后无需依赖 url 上下文路径。

关于Java - 管理上下文路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19116886/

相关文章:

tomcat - 如何在 Netbeans 中为 Java 服务器更改为不同的端口来监听?

java - 仅在本地运行时出现 NoClassDefFoundError 错误

java - Autowiring 数据源数据库项目 bean

java - Spring Boot 应用程序在 STS 中工作但无法使用 java -jar 启动

java - 根据两个键值从 Firebase 数据库获取值

java - 在Java中使用递归查找双链表中的最小元素

java - 如何正确停止使用如此多 CPU 的命令队列循环?

java - 如何将List保存到SQL数据库中?

java - CMS-initial-mark 花费了 800+ 毫秒,这正常吗?

java - 为什么tomcat最新代码在main方法中使用synchronized