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

ala*_*mar 12 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

Ale*_*r M 8

Struts2可以提供开箱即用的静态内容.默认情况下,静态内容由DefaultStaticContentLoader实现提供StaticContentLoader.它会自动搜索以下包:

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

您可以在名为"packages"的过滤器init参数中添加要搜索的其他包.

<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>
Run Code Online (Sandbox Code Playgroud)

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

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

struts.serve.static.browserCache
Run Code Online (Sandbox Code Playgroud)