struts2 Annotation maven pom xml:
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-codebehind-plugin</artifactId>
<version>2.1.6</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Struts2官方文档在讲述配置的时候,一开始就来了个“0配置”(Zero
Configuration),大意就是说在struts应用中不使用任何xml文件或者properties文件,元数据(Metadate)都用通过
约定(convention)和注解(annotation)来表达的,而且这是struts2的一个新特性,目前仍在测试中,相关文档也很粗略。接下来
的一部分讲述的就是Annotation,我粗略的看了一下,估计它就是“0配置”的核心所在,我拿文档中最简单的一个例子来看一下:
@Result(name="success", value="/home.page", type=TilesResult.class)
public class HomeAction extends ActionSupport {
// ...
}
红
底的部分就是我们所说的Annotation,它说明这个当这个action返回值为”success”时页面就跳转值/home.pag,就相当于我们
在struts.xml中配置的result元素,采用了这个Annotiation之后我们就不用写配置文件了,实现了所谓的“0配置”。一般我们在配
置actio的时候都会出现多个result,这时Annotation就可以这么写:
@Results({
@Result(name="success", value="/home.page", type=TilesResult.class),
@Result(name="homeError", value="/homeError.page", type=tilesResult.class)
})
还有一个问题,如果没有配置文件我们如何知道去哪儿调用哪个action呢?为了完成这个功能我们需要这样配置web.xml文件:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>com.foo.bar,com.baz.quux</param-value> <!--这里我们可以设置到com.kelven.action即可,命名空间以@namespace为准-->
</init-param>
</filter>
其实也没什么特殊的,就是给我们的Controller加了一个参数actionPackages,从字面上理解,Controller将会从com.foo.bar和com.baz.quux这两个包中去寻找action,具体的流程是这样的:
1.系统首先通过web.xml文件装载FilterDispatcher类,它要有actionPackages参数
2.FilterDispatcher会初始化一个Dispatcher,并传递actionPackages的值
3.Dispatcher会初始化一个ClasspathConfigurationProvider对象,用它来存放一个或多个Configuration Providers
4.Dispatcher给ConfigurationManager对象增加一个ClasspathConfigurationProvider来处理actionPackages参数
5.Someone会调用ClasspathConfigurationProvider的loadpackages方法
6.Loadpackages
会首先利用ResolverUtil从所列package(就是actionPackages参数的值)中找到所有实现了Action接口和名字带有
Action后缀的类,然后这些类会集中放入一个Set集合中,然后这个Set中的每个类都会被传递给processActionClass方法
7.processActionClass首先确定命名空间,然后捕捉任何ParentPackage和Results类型的Annotation,接着创建一个ActionConfig,设置action name,package name以及results。
步骤7获取action名字的规则是这样的:将action name从任何“Action”后缀前面截取掉,如果action name含有“/”的话,那么将最后一个“/”后面的第一个字母变为小写。还是举例来进行说明吧:
如果我们的actionPackages参数是com.myapp.actions,我们的Action类是com.myapp.actions.member.EditAction,那么我们可以通过下面的url来访问这个类:http://server/myapp/member/edit.action.也就是子包(subpackage)将成为namespace,而action类名将成为action name。如果类名有一个“Action”后缀,那么它将被去掉。
至
此我们就实现我们的“0配置”了,^_^,Annotation在其中还是扮演着非常重要的作用的,除了我们前面已提到的Result
Annotation这个Action Annotations外,还有Interceptor Annotations、Validation
Annotations和Type Conversion
Annotations,因为项目中基本上没有用到这个新特性,我也就没有深入的看这些Annotations的详细使用方法了。
from:http://blog.csdn.net/cmtobby/archive/2007/09/02/1769390.aspx
Tags: struts struts2 配置 Annotation
原创文章如转载,请注明:转载自:飞扬部落编程仓库 : http://www.busfly.cn/csdn/
本文链接地址:http://www.busfly.cn/csdn/post/Struts-Struts2-Annotation.html
如果你喜欢本文,请顶一下,支持我,你的支持是我继续发好文章的最大动力。谢谢。
好东西需要分享,快把本文发给你的朋友吧~!~