使用Struts 2提供静态文件(JavaScript)

时间:2010-10-28 18:50:23

标签: java struts2 static-resource serving

我想在我的一个软件包中放入一些JavaScript文件,让Struts像/struts/js/foo.js

一样为它们服务

Struts为'template'包中的文件执行此操作(这是jQuery插件的文件所在的位置,由struts.ui.templateDir选项保护)。但是我想把这些文件放到另一个包中;如果我重新定义struts.ui.templateDir,那么struts就会停止工作,因为它无法找到它的模板。

所以问题是:如何告诉Struts将org.foo.some.package.js中的文件作为/struts/js/whatever.js投放?

2 个答案:

答案 0 :(得分:8)

Struts2可以提供开箱即用的静态内容。默认情况下,DefaultStaticContentLoader StaticContentLoader的实施正在为静态内容提供服务。它会自动搜索以下包:

  • org.apache.struts2.static
  • 模板
  • 静态
  • org.apache.struts2.interceptor.debugging

您可以在名为" packages"的过滤器初始化参数中添加要搜索的其他包。

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
    <init-param>
        <param-name>packages</param-name>
        <param-value>some.package another.one</param-value>
    </init-param>
</filter>

您可以添加多个包,使用逗号或空格或制表符或新行作为分隔符。

顺便说一句,您可以使用此常量控制浏览器是否正在缓存静态内容:

struts.serve.static.browserCache

答案 1 :(得分:3)

一种方法是扩展整个模板&amp;按照您的建议更改templateDir。除非需要实现自定义模板,否则这会非常过度。

但恕我直言的最好办法是忘记/struts/js/foo.js&amp;使用任何其他URL来加载js。

几个样本:

<强> JSP

WebPages
    |-->myjs.js         (a normal js file)
    |-->mydynamicjs.jsp (a .jsp file containing ONLY javascript code)
    |-->WEB-INF-->xyz.js (another .js file but accessed only through action)

<强> Struts的

<action name="myacctionjs">
    <result>/WEB-INF/xyz.js</result>
</action>