Struts 2的基本配置
前面大緻了解了Struts 2架構的基本内容,但這些基本内容都必須建立在Struts 2的配置檔案基礎之上,這些配置檔案的配置資訊也是Struts 2應用的核心部分。
3.5.1 配置web.xml檔案
任何MVC架構都需要與Web應用整合,這就不得不借助于web.xml檔案,隻有配置在web.xml檔案中Servlet才會被應用加載。
通常,所有的MVC架構都需要Web應用加載一個核心控制器,對于Struts 2架構而言,需要加載FilterDispatcher,隻要Web應用負責加載FilterDispatcher,FilterDispatcher将會加載應用的Struts 2架構。
因為Struts 2将核心控制器設計成Filter,而不是一個普通Servlet。故為了讓Web應用加載FilterDispacher,隻需要在web.xml檔案中配置FilterDispatcher即可。
配置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架構的配置提供者類 -->
<init-param>
<param-name>configProviders </param-name>
<param-value>lee.MyConfigurationProvider</param-value>
</init-param>
</filter>
正如上面看到的,當配置Struts 2的FilterDispatcher類時,可以指定一系列的初始化參數,為該Filter配置初始化參數時,其中有3個初始化參數有特殊意義:
— config:該參數的值是一個以英文逗号(,)隔開的字元串,每個字元串都是一個XML配置檔案的位置。Struts 2架構将自動加載該屬性指定的系列配置檔案。
— actionPackages:該參數的值也是一個以英文逗号(,)隔開的字元串,每個字元串都是一個包空間,Struts 2架構将掃描這些包空間下的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攔截的URL -->
<filter-mapping>
<!-- 配置Struts 2的核心FilterDispatcher攔截所有使用者請求 -->
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
配置了Struts 2的核心FilterDispatcher後,基本完成了Struts 2在web.xml檔案中的配置。
[color=darkred]如果Web應用使用了Servlet 2.3以前的規範,因為Web應用不會自動加載Struts 2架構的标簽檔案,是以必須在web.xml檔案中配置加載Struts 2标簽庫。[/color]
配置加載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規範會自動加載标簽庫定義檔案。
[color=red] 提示 [/color] Struts 2的标簽庫定義檔案包含在struts2-core-2.0.6.jar檔案裡,在struts2-core-2.0.6.jar檔案的META-INF路徑下,包含了一個struts-tag.tld檔案,這個檔案就是Struts 2的标簽庫定義檔案,Servlet 2.4規範會自動加載該标簽庫檔案。
對于Servlet 2.4以上的規範,Web應用自動加載該标簽庫定義檔案。加載struts-tag.tld标簽庫定義檔案時,該檔案的開始部分包含如下代碼片段:
<taglib>
<!-- 定義标簽庫的版本 -->
<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檔案中重新定義Struts 2标簽庫檔案的URI。