忘记李刚,一步一步跟我学Struts2 —— Struts2配置详解
专栏地址:http://www.iteye.com/wiki/struts2/1386-detailed-configuration-in-struts2
本篇文章让我们来详细探讨一下Struts2的配置文件的结构、配置文件的各个节点和每个节点中元素的使用方式。
总揽
Struts2的配置文件是以XML的形式出现的。不过它的XML的语义比较简单,下面是我抽取了位于struts2-core-2.0.14.jar内部的struts-default.xml的片段:
这点没什么好说的,在struts.xml中,你可以为某个接口声明它所对应的实现类。
name属性
你可以声明多个实现类,使用name属性进行区分。在注入的时候,将使用这个属性的值作为接口实现类的选择。
required属性
你还可以通过required属性,来指定是否在运行时必不可少的注入。如果reqired被设置成false,那么当不存在相应的接口定义时,注入将被忽略。
static属性
在XML的定义中,还可以使用static属性。如果static属性被设置成true,那么注入将针对bean中的static方法和static属性进行。
2. 在代码中使用Annotation进行注入
这段来自Struts2的Reference的引用,基本上阐明了namespace的作用:对于action配置进行逻辑划分。
如果我们不为package节点指定namespace,Struts2默认使用一个空字符串作为默认的namespace。当然,也可以使用"/"等字符串来表示namespace。
Struts2在根据URL进行寻址的时候,使用以下的步骤:
1) 根据URL进行Namespace和ActionName的计算
2) 根据计算的得到的Namespace和ActionName查找package节点中相应配置
3) 如果查找失败,则查找Namespace为空,ActionName为整个URL的配置
有关上述3点的详细信息,请参考Struts2的Reference:http://struts.apache.org/2.0.14/docs/namespace-configuration.html
result-types节点
在result-types节点中,我们可以声明在本package中所支持的Result类型。这些Result类型,将在action节点中被引用到。
interceptors节点
在interceptors节点中有两类节点:<interceptor>和<interceptor-stack>。这两个节点都用于声明拦截器。前者的作用,是真正定义一个拦截器。而后者则通过引用已经定义的拦截器,指定他们的执行顺序。
当我们在试图在Action中引用拦截器时,我们实际上是为某个Action指定需要执行哪些拦截器,并且为这些拦截器指定执行顺序。所以Action所引用的,是某个<interceptor-stack>中的定义。
缺省配置指向
为了简化配置,我们可以在package节点中指定本package内的缺省配置指向。这可以通过<default-interceptor-ref>、<default-action-ref>、<global-results>等子节点来完成。
action节点
action节点是所有的Runtime配置的核心内容。它的主要作用就是指定URL与Action之间的映射关系。同时,在action节点中你也可以指定action执行时的相关配置,例如action所引用的interceptor等。
参考文档
上面所有的内容,实际上我只是做了一些简单的概括和归纳,至于每个节点语义和每个节点中具体属性的使用,我认为还是需要参考Struts2的Reference,因为Reference的讲解比任何教程都来的详细和正确,所以希望大家在了解了这些配置的基本分类之后,重新阅读Struts2的Reference的相关章节,从而更加深刻的理解Struts2配置文件的方方面面:http://struts.apache.org/2.0.14/docs/configuration-elements.html
4 楼 keshuangjie 2012-01-01 首先,毋庸置疑博主的文章写得很深人,但是对像我这种有点项目经验但不是很精通的人来说,看起来很吃力,希望博主在深入讲解的时候,能多从项目实例上将,说清楚该什么时候用,怎么样用,那就很完美了。 5 楼 downpour 2012-01-01 keshuangjie 写道首先,毋庸置疑博主的文章写得很深人,但是对像我这种有点项目经验但不是很精通的人来说,看起来很吃力,希望博主在深入讲解的时候,能多从项目实例上将,说清楚该什么时候用,怎么样用,那就很完美了。
你的建议很好,这是我08年的作品,各方面都比较稚嫩。我也希望在以后的写作中加强一些有实际意义的示例