struts.xml的配置
1.struts.xml概述
struts.xml 为Struts 2的核心配置文件。struts.xml中主要配置Struts项目的一些全局的属性,用户请求和响应Action之间的对应关系,以及配置Action中可能用到的参数,以及处理结果的返回页面。还包括各种拦截器的配置等。
struts.xml的DTD(Document Type Definition)描述如下:
name CDATA #REQUIRED
extends CDATA #IMPLIED
namespace CDATA #IMPLIED
abstract CDATA #IMPLIED
externalReferenceResolver NMTOKEN #IMPLIED
>
name CDATA #REQUIRED
class CDATA #REQUIRED
default (true|false) "false"
>
name CDATA #REQUIRED
class CDATA #REQUIRED
>
name CDATA #REQUIRED
>
name CDATA #REQUIRED
>
name CDATA #REQUIRED
>
name CDATA #REQUIRED
>
name CDATA #REQUIRED
class CDATA #IMPLIED
method CDATA #IMPLIED
converter CDATA #IMPLIED
>
name CDATA #REQUIRED
>
name CDATA #IMPLIED
type CDATA #IMPLIED
>
name CDATA #IMPLIED
exception CDATA #REQUIRED
result CDATA #REQUIRED
>
file CDATA #REQUIRED
>
type CDATA #IMPLIED
name CDATA #IMPLIED
class CDATA #REQUIRED
scope CDATA #IMPLIED
static CDATA #IMPLIED
optional CDATA #IMPLIED
>
name CDATA #REQUIRED
value CDATA #REQUIRED
>
2.Bean 配置
在struts.xml文件中定义Bean时,通常有以下两个作用:
⑴创建该Bean的实例,将该实例作为Struts 2框架的核心组建使用。
例2.1
Name=”myfactory” class=”com.company.myapp.MyObjectFactory”/>
…
⑵Bean包含的静态方法需要一个值注入。
这种用法可以很方便地允许不创建某个类的实例,却可以接受框架常量。
在这种方法下,通常需要设置static=”true”。(有些类似static方法:不用创建类实例就可以调用类的static方法。)
例2.2
…
l class:必填属性,指定Bean实例的实现类。
l type:可选属性,指定Bean实例实现的Struts 2规范,该规范通常是通过某个接口来实现的,因此该属性的值通常是一个Struts 2接口。如果需要将Bean实例作为Struts2组件使用,则应该指定该属性。
l name:可选属性,指定Bean实例的名字,对于有相同type类型的多个Bean,则他们的name属性不能相同。
l scope:可选属性,该属性指定Bean的作用域。属性值可以是default、singleton、request、session或thread其中之一。
l static:该属性指定Bean是否使用静态方法注入。通常而言,当指定了type属性时,该属性不应该指定为true。
l optional:可选属性,该属性指定该Bean是否是一个可选Bean。
3.常量配置
Struts2的常量在web.xml、struts.xml、struts.properties等多处都可以配置。其加载顺序如下:
l struts-default.xml:该文件保存在struts2-core-2.0.x.jar文件中。
l struts-plugin.xml:该文件保存在struts-xxx-2.0.x.jar文件中。
l struts.xml:这个就不多说了。
l struts.properties:如上。
l web.xml:同上。
Struts2中的配置:
例3.1:
与之等效的struts.properties文件配置如下:
#配置国际化文件
struts.custom.i18n.resources= globalMessage
contant元素的属性:
l name::指定常量的name。
l value:指定常量的value。
4.包配置
Struts2框架中核心组件就是Action,拦截器等,Struts2框架使用包来管理Action和拦截器等。每个包就是多个Action、多个拦截器、多哥拦截器应用的集合。
package元素的属性:
l name :必填属性,指定该包的名字,此名是该包被其他包应用的Key。
l extends:可选属性,该属性指定该包继承其他包。可继承其他包的action、拦截器、拦截器栈等。
l namespace:可选属性,指定该包的命名空间。
l abstract:可选属性,指定该包是否为一个抽象包。抽象包中不能包含Action定义。
例4.1:
<struts>
<constantname="struts.custom.i18n.resources"value="globalMessages"/>
<constantname="struts.i18n.encoding"value="GBK">constant>
<packagename="lee"extends="struts-default">
<interceptors>
<interceptorname="myfilter"class="lee.BeforeResultInterceptor">
<paramname="name">方法过滤拦截器param>
interceptor>
interceptors>
<actionname="login"class="lee.LoginAction"method="Login">
<resultname="error">/error.jspresult>
<resultname="success">/welcome.jspresult>
<interceptor-refname="defaultStack"/>
<interceptor-refname="myfilter">
<paramname="name">改变后的拦截器param>
<paramname="excludeMethods">executeparam>
interceptor-ref>
action>
package>
struts>
5.命名空间配置
同一个Web应用有可能需要出现同名的Action,所以Struts2中以命名空间的方式来管理Action。同一个命名空间里不能有同名的Action,不同的命名空间里可以有同名的Action。
Struts2不支持给单独的Action设置命名空间,而是通过包指定namespace属性来为包下面的所有Action指定共同的命名空间。
例5.1:
若项目的根目录为webroot,则两个Action的URL为:
http://localhost:8080/webroot/Login.action
http://localhost:8080/webroot/book/GetBooks.action
[注]默认命名空间里的Action可以处理任何模式下的Action请求。如上例如果GetBooks在book下没有找到,则会在默认命名空间里找,如果在默认命名空间还找不到就回报错。
6.包含配置
在实际项目中要配置的信息比较多,通常分成多个配置文件,然后吧它们加载到struts.xml中。
例6.1:
7.拦截器配置
拦截器的具体内容将单独介绍。例子可参照本文的例4.1。