更改Tomcat Web应用程序上下文

我有一个Web应用程序,它的设计始终在根上下文(“/”)下工作。 所以所有的cssjs和链接都以/ /css/style.css (例如/css/style.css )。 现在我需要将此Web应用程序移动到某个不同的上下文(比如/app1 )。 可以使用[Context path=""]项轻松更改server.xml配置文件并在新上下文app1启动Web应用程序。 但网页被破坏是因为所有链接现在都不正确。 它们指向旧的根上下文/css/style.css而不是新的app1上下文。 是否有任何神奇的方法来解决这个问题,而无需通过添加一些“上下文”变量来修复每个链接? 使用的服务器 – Tomcat 5.应用程序是用Java编写的,使用JSP,Struts2,Spring和UrlRewritefilter。 更有趣的是听到与理论辩论中的这些问题作斗争的真实经验。 谢谢。

PS我没看到UrlRewritefilter如何帮助我,因为它只能在app1上下文中工作。 因此,对/css/style.css链接的请求将不会传递给它。

您应该始终通过URL重写来创建URL,不仅可以将会话信息添加到URL(如果需要),还可以添加上下文路径。 您应该从应用程序顶部创建所有URL作为绝对路径,然后让URL重写句柄,根据需要将context-path添加到前面。

  

如果他们没有启用cookie,那么会将/<context-path>/css/site.css/<context-path>/css/site.css;jsessionid=134345434543呈现到jsp文件中。 您还可以使用c:url标记将url呈现为​​变量,然后在整个文档中多次使用该变量。 只需在标记中添加var="x"属性,然后${x}就会将url呈现到您的文档中。 如果您没有使用jsp来渲染输出,则需要为视图层找到适当的机制,但它们都有一个。 如果你在java代码中渲染一个url,只需看看c:url标记的源代码,你就会看到它是如何完成的。

一个尴尬是CSS文件(和js文件)没有被处理,因此css和js文件中的url需要是相对路径,否则每当你更改上下文路径时它们都会中断。 大多数js已经使用了相对路径,因为库维护者不知道你要将库安装到哪个路径。 另一方面,CSS背景图像通常被指定为绝对URL,因为相同的CSS文件可以包含在文件层次结构的不同级别的html文件中。 除了创建适当的符号链接以使相对URL始终有效或者通过JSP提供问题CSS文件以便可以适当地重写URL时,我没有简单的解决方法。 我确定你可以运行的filter或apache模块可以进行url替换,但是当你部署到新的上下文路径时,你仍然需要手动更新filter/模块。

如果您使用URL重写将ROOT重定向到您的应用程序,那么这是否会消除在ROOT中拥有应用程序的能力? 如果是这样,通过切换上下文获得了什么?

我认为链接资源的一般方法是附加一个“上下文”变量并使链接绝对: ${pagecontext.request.contextpath}/css/style.css或只是使链接相对: css/style.css

除非您有特定原因无法修改代码,否则我会对链接进行搜索/替换并完成。 你应该有不超过三个或四个表达式来查找,/ css,/ images,/ javascript等。