使用 Struts 2 提供静态文件 (JavaScript)
-
27-09-2019 - |
题
我想将一些 JavaScript 文件放入我的一个包中,并让 Struts 为它们提供服务 /struts/js/foo.js
Struts 对“模板”包中的文件执行此操作(这是 jQuery 插件文件所在的位置,由 struts.ui.templateDir
选项)。但是我想将这些文件放入另一个包中;如果我重新定义 struts.ui.templateDir
然后 struts 停止工作,因为它找不到它的模板。
所以问题是:如何告诉 Struts 在以下位置提供文件服务 org.foo.some.package.js
作为 /struts/js/whatever.js
?
解决方案
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
其他提示
一个办法是扩大整个模板和改变TEMPLATEDIR因为你已经建议。除非一个需要实现一个自定义模板,这是高过杀。
但是,最好的方式是IMHO忘记/struts/js/foo.js
&使用任何其他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>
不隶属于 StackOverflow