我有一个Web应用程序,该应用程序被设计为始终在根上下文(“ /”)下工作。因此,所有的css,js并开始与链接/(例如/css/style.css)。现在,我需要将此Web应用程序移动到某些不同的上下文(假设/app1)。使用item server.xml在新的上下文中更改配置文件和启动Web应用程序很容易。但是由于所有链接现在不正确,网页被破坏了。他们指向旧的根上下文,而不是新的app1``[Context path=""]``/css/style.css``app1上下文。有什么魔术方法可以解决此问题,而无需通过在每个链接之前添加一些“ context”变量来解决此问题?使用的服务器- Tomcat5。应用程序是用Java编写的,并使用JSP,Struts2,Spring和UrlRewrite过滤器。更有趣的是,听到在理论辩论等问题上进行斗争的真实经验。谢谢。
css
js
/
/css/style.css
/app1
server.xml
app1``[Context path=""]``/css/style.css``app1
PS我看不到UrlRewrite筛选器可以如何帮助我,因为它只能在app1上下文中使用。因此对链接之类的请求/css/style.css将不会传递给它。
app1
您应该始终通过URL重写来创建URL,不仅这样,以便在需要时可以将会话信息添加到URL中,而且还可以添加上下文路径。您应该将所有url从应用程序顶部创建为绝对路径,然后让url- rewrite处理适当地将context-path添加到最前面。
<c:url value="/css/site.css"/>
如果未启用Cookie,它将呈现/<context-path>/css/site.css或/<context- path>/css/site.css;jsessionid=134345434543导入一个jsp文件。您还可以使用c:url标记将url呈现为变量,然后在整个文档中多次使用该变量。只需var="x"在标签中添加一个属性,然后${x}将该网址呈现到您的文档中即可。如果您不使用jsp呈现输出,则需要为视图层找到合适的机制,但是它们都有一个。如果要用Java代码呈现url,只需看一下c:url标记的源代码,您就会知道它是如何完成的。
/<context-path>/css/site.css
/<context- path>/css/site.css;jsessionid=134345434543
var="x"
${x}
一个尴尬的地方是CSS文件(和js文件)没有被处理,因此css和js文件中的url必须是相对路径,否则每当您更改上下文路径时它们就会中断。大多数js已经使用相对路径,因为库维护者不知道要将库安装到哪个路径。另一方面,CSS背景图像通常被指定为绝对URL,因为同一CSS文件可能包含在文件层次结构不同级别的html文件中。除了创建适当的符号链接,使相对URL始终有效,或者通过JSP提供问题的CSS文件,以便可以适当地重写URL之外,我知道没有其他简单的解决方法。我敢肯定您可以运行可以执行URL替换的过滤器或apache模块,但是随后