2010-10-28 42 views
12

我想提出一些JavaScript文件在我的包之一,使Struts的为他们服务像/struts/js/foo.js提供静态文件(JavaScript)的使用Struts 2

的Struts确实是在“模板”包文件(这就是jQuery插件的文件位于,由struts.ui.templateDir选项保护)。但是我想把这些文件放入另一个包中;如果我重新定义struts.ui.templateDir,那么struts停止工作,因为它找不到它的模板。

所以问题是:如何告诉Struts服务org.foo.some.package.js中的文件为/struts/js/whatever.js

+2

你见过这个链接:http://struts.apache.org/development/2.x /docs/static-content.html? – 2013-12-04 18:44:35

+0

@AleksandrM不错,不知道。如果你想写一个完整的答案,你是赏金的好候选人。 – alamar 2013-12-05 09:56:41

+2

为什么不使用一些网络服务器呢?说Apache或nigix,这是更好,更有效的方式来提供静态内容 – 2013-12-08 10:47:56

回答

7

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 
+0

Canonical answer,+1 – 2013-12-05 10:38:51

+0

他们是如何设法将软件包命名为static的?这是一个保留字: -/ – alamar 2013-12-05 12:54:02

+0

@alamar:毕竟它是用于静态资源的。所以它没有源文件。 – 2013-12-05 13:00:49

3

一种方法是扩展整个模板&如已经建议的那样更改templateDir。除非需要实施自定义模板,否则这是非常过分的。

但恕我直言忘记的最佳方式/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> 
+0

那么,有没有一种简单的方法可以让Struts在任何其他url上为我的js服务? – alamar 2013-12-05 09:54:33

+0

@alamar我编辑了我的答案以添加示例代码。 – 2013-12-05 13:40:15