Struts 2.x权威指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.3.1 配置web.xml文件

任何MVC框架都需要与Web应用整合,这就不得不借助于web.xml文件,只有配置在web.xml文件中Servlet才会被应用加载。

通常,所有的MVC框架都需要Web应用加载一个核心控制器,对于Struts 2框架而言,需要加载StrutsPrepareAndExecuteFilter,该Filter将会加载应用的Struts 2框架。

为了让Web应用加载StrutsPrepareAndExecuteFilter,只需要在web.xml文件中增加关于Filter的配置即可。配置StrutsPrepareAndExecuteFilter的代码片段如下:

<!-- 配置Struts 2框架的核心Filter -->
<filter>
    <!-- 配置Struts 2核心Filter的名字 -->
    <filter-name>struts2</filter-name>
    <!-- 配置Struts 2核心Filter的实现类 -->
    <filter-class> org.apache.struts2.dispatcher.ng
                .filter.StrutsPrepareAndExecuteFilter</filter-class>
    <init-param>
          <!-- 配置Struts 2框架默认加载的Action包结构 -->
          <param-name>actionPackages</param-name>
          <param-value>org.crazyit.auction.action</param-value>
    </init-param>
    <!-- 配置Struts 2框架的配置提供者类 -->
    <init-param>
          <param-name>configProviders </param-name>
          <param-value>lee.MyConfigurationProvider</param-value>
    </init-param>
</filter>

正如上面看到的,当配置Struts 2的StrutsPrepareAndExecuteFilter时,可以指定一系列的初始化参数,为该Filter配置初始化参数时,其中有4个初始化参数有特殊意义。

config:该参数的值是一个以英文逗号(,)隔开的字符串,每个字符串都是一个XML配置文件的位置。Struts 2框架将自动加载该属性指定的系列配置文件。

actionPackages:该参数的值也是一个以英文逗号(,)隔开的字符串,每个字符串都是一个包空间,Struts 2框架将扫描这些包空间下的Action类。

configProviders:如果用户需要实现自己的 ConfigurationProvider 类,则用户可以提供一个或多个实现了ConfigurationProvider接口的类,然后将这些类的类名设置成该属性的值,多个类名之间以英文逗号(,)隔开。

loggerFactory:指定LoggerFactory实现类的类名。

除此之外,还可在此处配置Struts 2常量(struts.properties文件专门用于配置常量),每个<init-param>元素配置一个 Struts 2 常量,其中<param-name>子元素指定了常量 name,而<param-value>子元素指定了常量value。

提示:

如果想避免用struts.properties文件来定义常量,则可以在此处定义常量值,从而可以让Struts 2应用无须struts.properties文件。关于Struts 2常量的讲解,请参阅3.3.3节。

在web.xml文件中配置了该Filter,还需要配置该Filter拦截的URL。通常,我们让该Filter拦截所有的用户请求,因此使用通配符来配置该Filter拦截的URL。

下面是配置该Filter拦截URL的配置片段。

<!-- 配置Filter拦截的URL -->
<filter-mapping>
    <!-- 配置Struts 2的核心Filter拦截所有的用户请求 -->
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

配置了Struts 2核心Filter后,基本完成了Struts 2在web.xml文件中的配置。