我们使用mod_jk在负载均衡器和Apache反向代理后面的各种Tomcat实例上运行大约30个webapps。每个应用程序的公共URL都配置到Apache mod_jk配置中,该配置代理后端Tomcats。后端Tomcat在与公共URL匹配的上下文路径上运行应用程序。
e.g。
domain.com/foo/bar/webapp -- mod_jk --> tomcat/foo/bar/webapp
这是因为应用程序使用${pageContext.request.contextPath}
在JSP中构建链接,例如
<script src="${pageContext.request.contextPath}/resources/js/image-manipulation.js" > </script>
我想让这个更加松散耦合,并且&#34;容器化&#34; webapps,因此它们各自在默认上下文中运行在自己的Tomcat容器中,即/
,而无需知道它们的公共URL是什么。这将简化对Tomcat配置和mod_jk映射的管理。
问题是应用程序如何在不知道它的最终公共URL是什么的情况下构建自身内部的绝对链接?有没有办法在mod_jk请求中传递URL,并让Tomcat使用此URL覆盖对${pageContext.request.contextPath}
的调用?
或者最好在Apache中使用类似mod_substitute
的东西来替换页面中的固定字符串,当它从Apache出来时使用URL?这似乎效率低下,因为Apache必须扫描执行此查找的所有页面。替换..
或者最好只保留原样,并将上下文路径用作当前目标?
答案 0 :(得分:0)
我能想到的唯一解决方案就是:
contextPath
将所需的JkEnvVar
作为变量发送(将在tomcat中作为请求参数提供)getContextPath()
sendRedirect()
和其他类似的方法(可能不那么容易)。当然,如果tomcat可以为你做所有这些......