2010-10-28 43 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