任何mvc架構都需要與web應用整合,這就不得不借助于web.xml檔案,隻有配置在web.xml檔案中servlet才會被應用加載。
所有的mvc架構都需要web應用加載一個核心控制器,對于struts2架構而言,需要加載filterdispatcher
隻要web應用負責加載filterdispatcher,filterdispatcher将會加載應用的struts2架構。
因為struts 2将核心控制器設計成filter,而不是一個普通servlet。故為了讓web應用加載filterdispacher
隻需要在web.xml檔案中配置filterdispatcher即可。
<!-- 配置struts 2架構的核心filter -->
<filter>
<!-- 配置struts 2核心filter的名字 -->
<filter-name>struts</filter-name>
<!-- 配置struts 2核心filter的實作類 -->
<filter-class>org.apache.struts2.dispatcher.filterdispatcher </filter-class>
<init-param>
<!-- 配置struts 2架構預設加載的action包結構 -->
<param-name>actionpackages</param-name>
<param-value>org.apache.struts2.showcase.person</param-value>
</init-param>
<!-- 配置struts 2架構的配置提供者類 -->
<param-name>configproviders </param-name>
<param-value>lee.myconfigurationprovider</param-value>
</filter>
正如上面看到的,當配置struts 2的filterdispatcher類時,可以指定一系列的初始化參數,為該filter配置初始化參數時,其中有3個初始化參數有特殊意義:
config:該參數的值是一個以英文逗号隔開的字元串,每個字元串都是一個xml配置檔案的位置。struts 2架構将自動加載該屬性指定的系列配置檔案。
actionpackages:該參數的值也是一個以英文逗号隔開的字元串,每個字元串都是一個包空間,struts2架構将掃描這些包空間下的action類。
configproviders:如果使用者需要實作自己的configurationprovider類,使用者可以提供一個或多個實作了configurationprovider接口的類,然後将這些類的類名設定成該屬性的值,多個類名之間以英文逗号隔開。
除此之外,還可在此處配置struts 2常量,每個<init-param>元素配置一個struts 2常量,其中<param-name>子元素指定了常量name,而<param-value>子元素指定了常量value。
在web.xml檔案中配置了該filter,還需要配置該filter攔截的url。我們讓該filter攔截所有的使用者請求,是以使用通配符來配置該filter攔截的url。
<!-- 配置filter攔截的url -->
<filter-mapping>
<!-- 配置struts 2的核心filterdispatcher攔截所有使用者請求 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
配置了struts 2的核心filterdispatcher後,基本完成了struts2在web.xml檔案中的配置。
如果web應用使用了servlet 2.3以前的規範,因為web應用不會自動加載struts 2架構的标簽檔案,是以必須在web.xml檔案中配置加載struts 2标簽庫。
<!-- 手動配置struts 2的标簽庫 -->
<taglib>
<!-- 配置struts 2标簽庫的uri -->
<taglib-uri>/s</taglib-uri>
<!-- 指定struts 2标簽庫定義檔案的位置 -->
<taglib-location>/web-inf/struts-tags.tld</taglib-location>
</taglib>
在上面配置片段中,指定了struts 2标簽庫配置檔案實體位置:/web-inf/struts-tags.tld,是以我們必須手動複制struts 2的标簽庫定義檔案,将該檔案放置在web應用的web-inf路徑下。
如果web應用使用servlet 2.4以上的規範,則無需在web.xml檔案中配置标簽庫定義,因為servlet 2.4規範會自動加載标簽庫定義檔案。
struts 2的标簽庫定義檔案包含在struts2-core-2.0.6.jar檔案裡,在struts2-core-2.0.6.jar檔案的meta-inf路徑下,包含了一個struts-tag.tld檔案,這個檔案就是struts2的标簽庫定義檔案,servlet 2.4規範會自動加載該标簽庫檔案。
對于servlet 2.4以上的規範,web應用自動加載該标簽庫定義檔案。加載struts-tag.tld标簽庫定義檔案時,該檔案的開始部分包含如下代碼片段:
<!-- 定義标簽庫的版本 -->
<tlib-version>2.2.3</tlib-version>
<!-- 定義标簽庫所需的jsp版 -->
<jsp-version>1.2</jsp-version>
<short-name>s</short-name>
<!-- 定義struts 2标簽庫的uri -->
<uri>/struts-tags</uri>
...
</taglib>
因為該檔案中已經定義了該标簽庫的uri:struts-tags,這就避免了在web.xml檔案中重新定義struts2标簽庫檔案的uri。
原帖位址:http://qianlong1207.iteye.com/blog/987105