天天看點

Struts2配置web.xml

任何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