2016-12-12 122 views
0

好吧我有一个弹簧MVC Web应用程序打包成www-coolapp.war并部署到tomcat服务器。我有一个域名www.coolap.com,我想将所有来自localhost:8080/www-coolapp的请求映射到www.coolap.com。在我的Apache配置我正在使用一个虚拟主机ProxyPass,ServletContext名称与资源链接不能按预期工作

ProxyRequests     off 
ProxyPreserveHost    on 
ProxyPass      /http://localhost:8080/www-coolapp/ 
ProxyPassReverse    /http://localhost:8080/www-coolapp/ 
ProxyPassReverseCookiePath  /www-coolapp/

这基本上除了工作在资源目录中的文件以下。在我的Spring上下文我必须配置为

<mvc:resources mapping="/resources/**" location="/resources/" /> 

在我的JSP文件的资源,我宣布使用<c:url>其预先考虑servlet上下文名称的网址开头的链接。

<link href="<c:url value="/resources/css/bootstrap.min.css"/>" rel="stylesheet"> 
<link href="<c:url value="/resources/css/font-awesome.min.css"/>" rel="stylesheet"> 

部署到服务器,这些翻译成

<link href="/www-coolapp/resources/css/bootstrap.min.css" rel="stylesheet"> 
<link href="/www-coolapp/resources/css/font-awesome.min.css" rel="stylesheet"> 

了基于servlet上下文不呈现在正确的资源,即链接到文件(CSS,图片,JavaScript等)是断开的链接名称被预先添加到路径中。

有没有办法修改代理设置或重写url以使其工作而不更改webapp中的所有链接?

回答

0

明白了 - 根据jstl文档添加一个context属性覆盖servlet上下文名称,现在链接可以正确解析ProxyPass配置。

<a href="<c:url context="/" value="..."/>">Lint Text</a> 

也许应该在这一个发布前已经睡...