`

【转】Struts2的Annotation使用一些说明

 
阅读更多

从struts2.1开始,struts2不再推荐使用Codebehind作为零配置插件,而是改为使用Convention插件来支持零配置,和Codebehind相比,Convention插件更彻底,该插件完全抛弃配置信息,不仅不需要是使用struts.xml文件进行配置,甚至不需要使用Annotation进行配置,而是由struts2根据约定自动配置。

如何使用Convention

1.       将struts-Convention-plugin-2.1.6.jar文件复制到WEB-INF/lib路径下

 

2.       对于Convention插件而言,它会自动搜索位于action,actions,struts,struts2包下的所有java类,Convention插件会把如下两种java类当成Action处理:

1)  所有实现了com.opensymphony.xwork2.Action的java类

2)  所有类名以Action结尾的java类

 

3.       Convention插件还允许设置如下三个常量:

1)  struts.Convention.exclude.packges:指定不扫描哪些包下的java类,位于这些包结构下的java类将不会自动映射成Action;

2)  struts.convention.package.locators:Convention插件使用该常量指定的包作为搜寻Action的根包。对于actions.fore.LoginAction类,按约定原本应映射到/fore/login;如果将该常量设为fore,则该Action将会映射到/login

3)  struts.convention.action.packages:Convention插件以该常量指定包作为根包来搜索Action类。Convention插件除了扫描action,actions,struts,struts2四个包的类以外,还会扫描该常量指定的一个或多个包,Convention会试图从中发现Action类。

注意:struts.convention.package.locators和struts.convention.action.packages两个常量的作用比较微妙,开发者在利用这两个常量时务必小心。

如:下面Action所在包被映射的命名空间如下:

com.fun.actions.LoginAction 映射到   /

com.fun.actions.myoffice.CarInfoAction 映射到 /myoffice

com.fun.struts.myoffice.EntINfoAction 映射到 /myofiice

 

4.       映射Action的name时,遵循如下两步规则:

1)  如果该Action类名包含Action后缀,将该Action类名的Action后缀去掉。否则不做任何处理。

2)  将Action类名的驼峰写法(每个单词首字母大写、其他字母小写的写法)转成中画线写法(所有字母小写,单词与单词之间以中画线隔开)

如:LoginAction映射的Acion的name属性为login,GetBooks映射的Action的name的属性为get-books,AddEmployeeAction映射的Action的name属性为add-employee

 

5.       默认情况下。Convention总会到WEB应用的WEB-INF/content路径下定位物理资源,定位资源的约定是:actionRUL+resultCODE+suffix。当某个逻辑视图找不到对应的试图资源时,Convention会自动视图使用ActionURL+suffix作为物理视图资源。

       如:actions.fore.LoginAction 返回success字符串时,Convention优先考虑使用WEB-INF/content/fore目录下的login-success.jsp作为视图资源。如果找不到该文件,login.jsp也可作为对应的试图资源。如果返回input字符串,Convention会将WEB-INF/content/fore里面查找login-input.jsp

 

6.       为了看到struts2应用里的Action等各种资源的影射情况,struts2提供了Config Browser插件。使用方法,将struts2-config-browser-plugin-2.1.6.jar文件复制到struts2应用的WEB-INF/lib目录中。

打开首页地址:http://localhost:8080/应用名字/config-browser/actionNames.action这里可以看到Config Browser插件的首页。

注意:这里不管开发者是否使用struts.xml文件进行配置,一样可以看到struts的配置信息。

 

7.Action链的约定

如果希望一个Action处理结束后不是进入一个试图页面,而是进行另一个Action形成的Action链。通过Convention插件则只需遵守如下三个约定即可。

1)  第一个Action返回的逻辑视图字符串没有对应的视图资源

2)  第二个Action与第一个Action处在同一个包下

3)  第二个Action影射的URL为:firstActionURL+resultCODE

如,第一个Action为OneAction,里面有个方法返回为“two”,那么就得保证,WEB-INF/content/下没有one.jsp或one-two.jsp 对于第二个action 它的名字应该是OneTwoAction,而对应的url应该是:“one-two.action”

注意:由于Convention插件根据Action和jsp页面来动态生成映射的,因此不管是Acion的改变,还是JSP页面的改变都需要Convention插件重新加载映射。那么只要我们为struts2应用配置如下两个常量就可以了。

<!--配置struts2应用于开发模式--!>

<constant name=”struts.devMode” value=”true”/>

<!—配置Convention插件自动重加载映射--!>

<constant name=”struts.convention.classes.reload” value=”true”/>

几个重要的常量

struts.convention.action.disableJarScanning---是否从包中搜索Action

struts.convention.action.package--------Convention插件以该常量指定包作为根包

struts.convention.result.path ---设置Convention插件定位视图资源的根路径。默认值为/WEB-INF/content

struts.convention.result.flatLayout—如果是为false则可以将试图放置Action对应的目录下,无需放入WEB-INF/content

8.       Convention的Annotation

1)  与Action相关的两个Annotation是@Action 和@Actions

2)  @Action中可指定一个value属性。类似于指定<action name=””/>属性值

3)  @Action中还可以指定一个params属性,该属性是一个字符串数组,用于该Acion指定的参数名和参数值。params属性应遵守如下格式:{“name1”,”value1”,”name2”,”value2”}

4)  @Actions 也用于修饰Action类里的方法,用于将该方法映射到多个URL.@Actions用于组织多个@Action.因此它可将一个方法映射成多个逻辑Action。

 

    package com.fun.actions;  
     
    import org.apache.struts2.convention.annotation.Action;  
     
    import org.apache.struts2.convention.annotation.Actions;  
     
    import com.fun.service.LoginService;  
     
    import com.opensymphony.xwork2.ActionSupport;  
     
    public class LoginAction extends ActionSupport {  
     
        private String str;  
     
        @Actions({  
     
           @Action(value="login1",params={"str","这是已经注入的了!"}),  
     
           @Action(value="login2")  
     
        })  
     
        public String login(){  
     
           return "str";  
     
        }  
     
        @Action(value="ggg")  
     
        public String abc(){  
     
           return "abc";  
     
        }  
     
        public String getStr() {  
     
           return str;  
     
        }  
     
        public void setStr(String str) {  
     
           this.str = str;  
     
        }  
    } 

我们可以通过/login1.action访问,而在访问时,str这个属性已经有值,为str=”这是已经注入的!” 返回的视图是login1-str.jsp

当我们用/login2.action访问时,str的值为null。返回的视图为 login2-str.jsp

而我们通过/ggg.action调用的是abc()方法,返回的视图为/ggg-abc.jsp

 

9.       与Result配置相关的Annotation

1)@ResultPath @Result 和Results

2)@Results用于组织多个@Result因此它只需指定一个value属性值,该value属性值为多个@Result

3)@Result相当于struts.xml文件中的<result/>元素的做哟欧诺个。使用@Result必须指定一个name属性,相当于<result name=””/>另外,它还有几个可选的属性。

     ☆ type 相当于<result type=””/>指定返回视图资源的类型

     ☆ location 相当于<result>…..</result>中间部分,用于指定实际视图位置

     ☆ params:该属性相当于<result/>元素里多个<param../>子元素的作用,用于为该Result指定参数值。该属性应满足{“name1”,”value1”,”name2”,”value2”}格式

4)@Result有以下两种用法

1 Action级的Result映射:以@Actions组合多个@Action后修饰的Action类。这种Result映射对该Action里的所有方法都有效。

2方法级Result映射:将多个@Result组成数组后作为@Action的results属性值。这种Result映射仅对被修饰的方法有效。

5)@ResultPath则用于修饰包和Action类,用于改变被修饰Action所对应的物理视图资源的根路径。举例说:默认情况下,Convention都会到WEB-INF/content路径下找物理视图资源,一旦我们使用@ResultPath(“/abc”)修饰该Action,系统将回到abc目录下寻找物理视图资源。举例:在默认情况下,Convention都会到WEB-INF/content路径下需找物理视图资源,一旦我们使用@ResultPath(“/abc”)修饰该Action,系统会到abc目录下寻找物理视图资源。

 

10.  与包和命名空间相关的Annotation:

   @Namespace:修饰Action类或其所在的包。该Annotation中指定一个value属性值,用于指定被修饰的Action所在的命名空间

  @Namespaces:修饰Action类或其所在的包,用于组合多个@Namespace

  @ParentPackage: 用于指定被修饰的Action所在包的夫包。

11.  异常处理相关的Annotation

  @ExceptionMappings 用于组织多个@ExceptionMapping,因此它只需指定一个value属性值,该value属性值为多个@ExceptionMapping。

 @ExceptionMapping 用于定义异常类和物理视图之间的对应关系,也相当于struts.xml文件里<exception-mapping../>元素的作用 使用时,必须注意以下两个属性:

  exception: 用于指定异常类

  result : 用于指定逻辑视图

@ExceptionMpping有如下两种用法

   Action级的异常定义:以@ExceptionMappings组合多个@ExceptionMapping后修饰的Action类。这种异常定义对Action中的所有方法有效

  方法级的异常定义: 将多个@ExceptionMapping组成数组后作为@Action的exceptionMappings属性值,这种异常定义仅对被修饰的方法有效。

 

12.拦截器配置相关的Annotation

 与拦截器配置的Annotation有@InterceptorRef、@InterceptorRefs和@DefaultInterceptorRef

@InterceptorRefs用于组织多个@InterceptorRef,因此它只需要指定一个value属性值,该value属性值为多个@InterceptorRef

@InterceptorRef用于为指定Action引用lanjieq或者是拦截器栈。也就相当于strut.xml中位于<action../>元素内部的<interceptor-ref../>子元素的作用。使用@InterceptorRefAnnotation时,必须制定一个value属性,用于指定所引用的拦截器或拦截器栈的名字。相当于<interceptor-ref../>子元素里name属性的作用。

 

转自:http://blog.csdn.net/cheung1021/article/details/6603090

 

分享到:
评论

相关推荐

    Struts2注解使用说明文档

    而是改为使用Convention插件来支持零配置,和Codebehind相比,Convention插件更彻底,该插件完全抛弃配置信息,不仅不需要是使用struts.xml文件进行配置,甚至不需要使用Annotation进行配置,而是由struts2根据约定...

    Struts2入门教程(全新完整版)

    十二、总结 本教程对struts2的基本知识进行了一些说明,关于struts2的更多详细内容应参看struts2的官方文档及提供的app实例。 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图...

    struts2+spring+hibernate(实现XML和Annotation两种方式操作数据库)

    struts2+spring+hibernate(实现XML和Annotation两种方式操作数据库) 项目描述: 框架及版本:struts2 + spring3.0 + hibernate3.3 所实现的功能说明 把两个对象存入到数据库中 1、一种方法采用XML文件映射的方式 2...

    struts Spring Hibernate标签和注解资料合集

    springmvc注解.doc,Spring注解讲解.doc,struts2标签详解.pdf,struts2常用标签.pdf,Struts2页面开发中常用标签.pdf,Struts2注解详细说明文档.doc,Hibernate注解教程:Hibernate Annotation使用实例.maff

    免费下载:自己整理的java学习资料

    自己整理的一些资料,不需要积分,希望对大家有帮助。 里面包有如下的一些java资料 Ant使用指南.pdf cvs.pdf Eclipse入门-- Eclipse的使用简介及插件开发.PDF eclipse插件开发.doc Eclipse插件开发系列.pdf ...

    java_技术参考汇集_超值大礼包

    struts标签(中文) Ant使用指南.pdf cvs.pdf eclipse插件开发.doc JAVA配置文件编写说明文档.pdf 正则表达式.chm 网页常用的jsp 脚本.doc spring2[1].0中文开发参考手册by jxair.chm JAVA设计模式.chm java_xml_api....

    java_技术参考汇集(完整版)

    ant使用指南 cvs eclipse开发、插件 hibernate javaAnnotation java配置文件编写说明 java设计模式 jboss log4j spring starts——actiong struts标签 swing tomcat webandxml 正则表达式……………… ………………...

    Spring中文帮助文档

    4.7.3. FileSystemResource 说明 5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和...

    Spring API

    4.7.3. FileSystemResource 说明 5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和...

    OA项目SSH整合框架

    2,在struts-config.xml中配置controller(Spring Reference 15.4.1.1. DelegatingRequestProcessor) &lt;!-- 集成Spring --&gt; &lt;set-property property="processorClass" value="org.springframework.web....

    java开源包2

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java命名规范 开发规范

    b. 配置struts-moduleName.xml; 直接跳转示例; 调用Service示例; c. 开发对应的{EntityName}Action类; 该类必须继承com.hikvision.swdf.xx.BaseAction&lt;{EntityName}&gt;,该Action类有一个关键属性entity,即泛型...

    Java技术参考资料汇集

    struts标签(中文) Ant使用指南.pdf cvs.pdf eclipse插件开发.doc JAVA配置文件编写说明文档.pdf 正则表达式.chm 网页常用的jsp 脚本.doc spring2[1].0中文开发参考手册by jxair.chm JAVA设计模式.chm java_xml_api....

    java开源包8

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    java开源包1

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包11

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包3

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包6

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

Global site tag (gtag.js) - Google Analytics