在struts2框架中有一些它所需要的公共的靜態內容,比如說js文件和一些css文件。當框架需要這些靜態內容的時候,FilterDidpatcher會自動提供給我們。那麼FilterDidpatcher是如何知道我們在請求靜態內容的呢?任何請求只要以“/struts/”開頭,那麼FilterDidpatcher就會認爲它是在請求靜態內容。注意這裏所說的請求是指從應用上下文後面開始的部分,比如說請求url是http://server/myapp/**/**/**,那麼我們所說的請求就是http://server/myapp後面的內容。在識別出請求是請求靜態資源後FilterDidpatcher如何去匹配尋找靜態資源呢?這裏有兩個關鍵點:
1.確定所要請求的資源路徑。FilterDidpatcher會截取/struts/後面的內容作爲所要請求的資源。比如說現在請求是/struts/xhtml/styles.css,那麼FilterDidpatcher就會把xhtml/styles.css作爲我們所要請求的資源的路徑:xhtml目錄下面的styles.css文件。
2.到哪兒去尋找所請求的靜態內容。默認情況下FilterDidpatcher會隨意的到org.apache.struts2.static和template這兩個包中去尋找,注意,這兩個包必須是在應用程序的classpath上。實際上大家用winrar打開strts2.jar,就會發現它裏面有這兩個目錄,並且裏面都是框架自帶的一些靜態文件。如果我們還想在別的其它包中尋找靜態內容的話,那就需要在web.xml配置中FilterDidpatcher時,給它添加一個參數”packages”,然後把它的值設置爲一系列以逗號或者空格分隔的包名,如下面所示:
<filter>
<filter-name>Struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
<init-param>
<param-name>packages</param-name>
<param-value>com.mangocity.static,hust.cm</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>