
3.4 Struts 2的配置
Struts 2框架提供了多种配置文件,主要有web.xml、strus.xml和struts-default.xml等,在本节中将重点介绍strus.xml配置项及配置内容,其他配置文件只给出简单说明。
3.4.1 web.xml配置文件
使用Struts 2框架,必须在web.xml中配置支持Struts 2的主控制器。目前所使用的主控制器是StrutsPrepareAndExecuteFilter类,主要负责接收所有请求,并按规定的过滤要求执行相应的请求,在web.xml配置文件中配置,系统启动时,自动创建该控制器。
具体配置格式与配置内容见3.2节。
3.4.2 struts-default.xml配置文件
struts-default.xml文件是Struts 2框架默认加载的配置文件,该文件存放在struts2-core.jar中,可以从中查找Struts 2默认的各种配置信息。
该配置文件提供了一些标准的核心配置,Struts 2的很多核心功能都是通过拦截器来实现的,例如,从请求中把请求参数封装到Action、文件上传和数据验证等都是通过拦截器实现的。struts-default定义了这些拦截器和result类型。
Struts 2每次启动都会自动加载struts-default.xml文件,需要在配置文件struts.xml中继承在struts-default.xml中配置的包struts-default即可。具体使用格式见【例3-2】中所给出的配置信息。
3.4.3 struts.xml配置文件
struts.xml配置文件是Struts 2框架默认的核心配置文件。Struts 2应用的各个组件及其关系均在该文件中声明并配置。
struts.xml配置文件的主要配置项有:常量配置、导入(包含)配置文件、包配置及包配置下的Action配置。
struts.xml配置文件的基本结构如下。

1.常量配置
在开发阶段或运行阶段,可以设置一些常量(属性)值,设置Struts 2运行或开发时的环境,从而满足需求。
常量配置格式如下。
<constant name="属性名" value="属性值"/>
其中:name用于指定常量(属性)的名称;value用于指定常量的值。
例如,常用的一些常量如下。
<! --指定应用的编码集,相当于调用HttpServletRequest.setCharacterEncodint方法--> <constant name="struts.i18n.encoding" value="UTF-8" /> <! --设置浏览器是否缓存静态内容,建议:开发时关闭,运行时开启--> <constant name="struts.serve.static.browserCache" value="false" /> <! --当struts.xml配置文件修改后,系统是否重新加载该文件,开发阶段打开此功能--> <constant name="struts.configuration.xml.reload" value="true" /> <! --开发提示:出错时打印更详细的信息--> <constant name="struts.devMode" value="true" /> <! -- 指定请求的后缀可以是.do或.action,指定多个请求,后缀用逗号分隔--> <constant name="struts.action.extension" value="do, action"/>
注意:在开发环境中,最好进行以下配置。
struts.i18n.reload=true <-- 能够重新加载国际化文件--> struts.devMode=true <-- 能够在开发模式下提供更全面的调试--> <--重新加载XML配置文件,当Action修改之后自动重新加载--> struts.configuration.xml.reload = true
2.包配置
Struts 2框架中的核心组件就是Action、拦截器等,Struts 2框架使用包来管理Action和拦截器等。每个包就是多个Action、多个拦截器或拦截器引用的集合。在实际应用中,应该把一组业务功能相关的Action和拦截器放在同一个包下。
在struts.xml文件中,package元素用于定义包配置,包配置格式如下。
<package name="包名称" namespace="/包的命名空间名" extends="struts-default"> 在该包下的Action配置 </package>
其中各属性的含义如下。
● name属性:配置包时必须指定name属性,该name属性值可以任意取名,但必须唯一。如果其他包要继承该包,必须通过该属性进行引用。
● namespace属性:包的namespace属性用于定义该包的命名空间,命名空间作为访问该包下Action的路径的一部分。默认的命名空间为“/”(空字符串)。
● extends属性:通常每个包都应该继承struts-default包,该包是在struts2-core-2.x.x.jar文件中的struts-default.xml中定义的,给出了Struts 2框架的核心配置信息。
例如下面给出包配置的代码。

在该示例中,包名为abcde,命名空间为/user(注意:一定要有“/”)。继承的是Struts 2在struts-default.xml中定义的包struts-default。
3.Action配置
Struts 2中Action类的配置能够让Struts 2知道Action的存在,并可以通过调用该Action来处理用户请求。Struts 2使用包来组织和管理Action。
注意:Action配置必须配置在“包”下,在一个“包”下,可以配置多个Action。例如【例3-2】中的配置,就给出了2个Action的配置。
(1)Action的一般配置格式
<action name="名称" class="Action对应的类全路径名" method="Action中某方法名"> <result name="resultName" type="resultType">跳转的目的地</result> </action>
<action>元素的常用属性如下。
● name:指定客户端发送请求的地址映射名称,是必选项。
● class:指定Action对应的实现类,默认值为ActionSupport类。
● method:指定Action类中的处理方法名,默认值为Action中的execute方法。
(2)结果(result)配置
在Action配置项内含有Action的result子元素配置,用于当指定Action方法执行结束后,从该Action跳转到目的地,结果配置格式如下。
<result name="resultName" type="resultType">跳转到目的地</result>
<result>元素的常用属性如下。
● name:指定Action逻辑视图名称,默认值为success。
● type:指定结果类型所定向到的文件类型:JSP文件、Action类等,默认为JSP页面。
(3)result类型——type属性及属性值
type可以有多种选择,Struts 2支持的处理结果类型如表3-2所示。
表3-2 Struts 2支持的常用的处理结果类型

在这里主要介绍dispatcher、redirect、chain和redirectAction,其他的就不具体讲解了,若在自己开发的系统中需要,可以查找有关的材料。
1)dispatcher。dispatcher是默认类型,表示转发到JSP页面,如下面的代码所示。
<result name="success" type="dispatcher">/common/message.jsp</result>
由于dispatcher是默认类型,可以省略默认值,其简化格式如下。
<result name="success">/common/message.jsp</result>
由于name的默认值为success,所以还可以简化为以下格式。
<result>/common/message.jsp</result>
2)redirect。类型redirect表示重定向到JSP页面,配置方法与dispatcher类型的配置方法类似。
3)chain。类型chain表示转发到Action,形成action-chain,按Struts 2框架所规定的执行次序进行过滤运行。该类型值的配置可以指定两个属性值。
● actionName指定转向的Action名。
● namespace指定转向的Action所在的命名空间。
格式如下。
<result name="resultName" type="chain"> <! -- 指定Action的命名空间——要转向到其他命名空间的Action中,必须设置--> <param name="namespace">/要转向到的命名空间名</param> <! -- 指定Action名 --> <param name="actionName">/要转向到的Action名</param> </result>
若在同一个命名空间下,可以简写为以下格式。
<result name="resultName" type="chain">/要转向到的Action名</result>
4)redirectAction。类型redirectAction表明是重定向Action,其配置方法与chain类似。
4.包含配置
Struts 2的配置文件struts.xml提供了<include/>元素,它能够把其他程序员开发的配置文件包含过来,但是被包含的每个配置文件必须与struts.xml格式一样。Struts 2框架将按照顺序加载配置文件。包含配置格式如下。
<include file="文件名"/>
<include/>元素的属性只有flie,用于指定配置文件名,是必选项
例如,在【例3-2】中,首先创建了配置文件struts-user.xml,在该配置文件中只给出了用户登录、注册等操作的配置,然后将其包含到struts.xml文件中。
提示:在通常的应用开发中,为每个不同的模块单独配置一个“struts-模块名称.xml”文件,这样也利于管理和维护。