javastruts2static-resourceserving

Serve static files (JavaScript) with Struts 2


I want to put some JavaScript files in one of my packages and make Struts serve them like /struts/js/foo.js

Struts does that for files in 'template' package (that's where jQuery plugin's files are located, guarded by struts.ui.templateDir option). However I want to put those files into another package; If I redefine struts.ui.templateDir then struts ceases working because it can't find its templates.

So the question is: How to tell Struts to serve files in org.foo.some.package.js as /struts/js/whatever.js?


Solution

  • Struts2 can serve static content out of the box. By default static content is being served by DefaultStaticContentLoader an implementation of StaticContentLoader. It automatically searches the following packages:

    You can add additional packages to be searched in filter init parameter named "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>
    

    You can add more than one package, use comma or space or tab or new line as separator.

    BTW you can control whether static content is being cached by a browser or not with this constant:

    struts.serve.static.browserCache