JAWR会覆盖非捆绑文件的加载

时间:2010-07-07 15:04:46

标签: jawr

我们正在使用JAWR来捆绑CSS和Javascript。它极大地减少了下载的点击次数和字节数。但是,我们最近遇到了一个问题,导致不受“控制”的css文件返回“未找到”(404)代码。我们有一个解决方案,但我想知道是否有更好的解决方案。

我们为标准的css文件集定义了一个CSS包,并用于加载它。我们还有一些非标准的css文件,包括一对定义“遗留”布局的文件。他们装满了。最后,服务CSS的JAWR servlet绑定到web.xml中的url-pattern“* .css”。使用此配置,来自标记的任何css文件请求都返回404代码。我们无法找到可以解决问题的JAWR属性设置组合。

我们提出的解决方案是在web.xml中修改JAWR servlet配置,添加“mapping”参数:

    <servlet>
    <servlet-name>CssServlet</servlet-name>
    <servlet-class>net.jawr.web.servlet.JawrServlet</servlet-class>
    <init-param>
        <param-name>configLocation</param-name>
        <param-value>/jawr.properties</param-value>
    </init-param>
    <init-param>
        <param-name>type</param-name>
        <param-value>css</param-value>
    </init-param>
    <init-param>
        <param-name>mapping</param-name>
        <param-value>/jawrcss/</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>

我们将CssServlet的url-pattern更改为“/ jawrcss / *”。通过此更改,JAWR不会触及从未修改的标记加载的css文件。但是,我们失去了JAWR对这些文件的压缩能力。

我的猜测是,为了让JAWR正确处理这些文件,我们需要将标签更改为标签,此时JAWR的“孤儿”处理将做正确的事情。这(至少)有几个原因是有问题的。 (1)我们使用共享代码库并且“无法”修改某些文件,因为共享这些文件的其他人不使用JAWR。 (2)有些文件使用JavaScript动态加载css,我不知道如何将它与JAWR支持结合起来。

那么,我的问题/是什么?

  1. 有没有办法让JAWR处理(压缩,至少)从标签加载的CSS文件? (主要问题。)
  2. 有没有办法在加载Javascript的CSS中使用JAWR?

2 个答案:

答案 0 :(得分:1)

对于javascript加载的CSS(或JS),您可以使用JAWR的脚本加载器(在此解释 - http://jawr.java.net/docs/plain_html.html)。请记住,使用脚本加载器进行权衡(上面提到的页面的最后一段描述了)

关于你的问题1),按标签你的意思是哪些标签? JSP标签?

答案 1 :(得分:0)

您可以使用映射<init-param>作为servlet,并将servlet绑定到该URL。

Jawr servlet documentation的示例:

    ...
    <servlet>
            <servlet-name>JavascriptServlet</servlet-name>
            <servlet-class>net.jawr.web.servlet.JawrServlet</servlet-class>
            <init-param>
                    <param-name>configLocation</param-name>
                    <param-value>/jawr.properties</param-value>
            </init-param>
            <init-param>
                    <param-name>mapping</param-name>
                    <param-value>/jsJawrPath/</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
    </servlet>
    ...

    <servlet-mapping>
            <servlet-name>JavascriptServlet</servlet-name>
            <url-pattern>/jsJawrPath/*</url-pattern>
    </servlet-mapping>