[转载]Struts2学习:配置篇之“0配置”和Annotation

本文介绍了Struts2框架中的零配置概念,通过使用注解替代XML配置文件,简化了开发流程。文章详细解释了如何利用注解实现Action结果配置,并展示了如何在web.xml中指定Action包路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.youkuaiyun.com/CMTobby/archive/2007/09/02/1769390.aspx

 

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>








  



</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

4Dispatcher ConfigurationManager 对象 增加一个 ClasspathConfigurationProvider 来处理 actionPackages 参数

5 Someone 会调用 ClasspathConfigurationProviderloadpackages 方法

6Loadpackages 会首先利用ResolverUtil 从所列package( 就是 actionPackages 参数的值 ) 中找到所有实现了Action 接口和名字带有Action 后缀的类,然后这些类会集中放入一个Set 集合中,然后这个Set 中的每个类都会被传递给processActionClass 方法

7processActionClass 首先确定命名空间,然后捕捉任何ParentPackageResults 类型的Annotation ,接着创建一个ActionConfig ,设置action  namepackage  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 AnnotationsValidation AnnotationsType Conversion Annotations ,因为项目中基本上没有用到这个新特性,我也就没有深入的看这些Annotations 的详细使用方法了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值