天天看點

Struts2的基本配置-web.xml

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。