欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Struts2的基本配置-web.xml

程序员文章站 2022-07-13 13:09:34
...

    前面大致了解了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的代码片段如下:
   
Java代码
<!-- 配置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框架的核心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的配置片段:
  
Java代码
<!-- 配置Filter拦截的URL -->  
lt;filter-mapping>  
                <!-- 配置Struts 2的核心FilterDispatcher拦截所有用户请求 -->  
                 <filter-name>struts</filter-name>  
                 <url-pattern>/*</url-pattern>  
lt;/filter-mapping> 

     <!-- 配置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文件中的配置。

   如果Web应用使用了Servlet 2.3以前的规范,因为Web应用不会自动加载Struts 2框架的标签文件,因此必须在web.xml文件中配置加载Struts 2标签库。
   配置加载Struts 2标签库的配置片段如下:
 
Java代码
<!-- 手动配置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的标签库 -->
   <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文件,这个文件就是Struts 2的标签库定义文件,Servlet 2.4规范会自动加载该标签库文件。

  对于Servlet 2.4以上的规范,Web应用自动加载该标签库定义文件。加载struts-tag.tld标签库定义文件时,该文件的开始部分包含如下代码片段:
 
Java代码
<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> 

  <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。