Java EE框架开发技术与案例教程
上QQ阅读APP看书,第一时间看更新

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”文件,这样也利于管理和维护。