从CSS / JS文件中访问servlet Web应用程序上下文URL

时间:2013-09-24 13:01:12

标签: java css servlets

我们如何从java web服务器上的CSS / JS文件中访问Web应用程序上下文URL?

我们可以使用url('../img/bg.gif')等相对地映射URL(例如背景图像),但这不适用于具有以下映射的Web应用程序:

  • /店铺/
  • /商店/显示/ 3 /
  • /店铺/付款/

因为浏览器会搜索相对于当前“虚拟”目录的此文件。

此外,我们无法普遍地将图片网址全球映射为url('/images/bg.gif'),因为我们强制部署在顶级目录,例如example.com/(不是example.com/myproject/ )。

如何在更改应用程序上下文URL时避免更改CSS / JS(ajax)URL? 有可能以简单的方式访问CSS文件中的aplication上下文,比如访问那些为这些静态文件服务的默认servlet中的contextPath?

1 个答案:

答案 0 :(得分:1)

你可以这样做(假设你正在使用Tomcat,如果没有,请查找doc以找到正确的servlet名称来添加映射):

<servlet> 
    <servlet-name>jsp</servlet-name> 
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> 
    <init-param> 
        <param-name>fork</param-name> 
        <param-value>false</param-value> 
    </init-param> 
    <init-param> 
        <param-name>xpoweredBy</param-name> 
        <param-value>false</param-value> 
    </init-param> 
    <load-on-startup>3</load-on-startup> 
</servlet> 

<servlet-mapping> 
  <servlet-name>jsp</servlet-name>
  <url-pattern>*.css</url-pattern>
</servlet-mapping>

然后你可以在你的css中添加jsp el代码:

url('${pageContext.request.contextPath}/images/bg.gif')

这将使您的CSS文件服务速度变慢,因此如果您可以在根目录下使用绝对路径,请考虑这一点。我们在允许对CSS进行蒙皮的应用程序中使用了这种方法,以便我们可以输出自定义颜色方案。