annotation配置action

[java]  view plain copy
  1. 01.package com.jadyer.action;    
  2. 02.    
  3. 03.import org.apache.struts2.config.Namespace;    
  4. 04.import org.apache.struts2.config.Result;    
  5. 05.import org.apache.struts2.config.Results;    
  6. 06.    
  7. 07.import com.opensymphony.xwork2.ActionSupport;    
  8. 08.    
  9. 09./********************【Zero Configuration】*********************************************************************************/    
  10. 10.//官方文档中Zero Configuration叫做零配置,翻译到中国叫做注解配置。好处是不用写struts.xml,而将配置信息写在Action中     
  11. 11.//Spring中也有两种配置方式,一种是在配置文件里面配,还有一种就是通过注解来配     
  12. 12.//所以现在如果强迫自己弄明白了这里的注解的话,将来在学习Spring的时候,就能够变得简单一些     
  13. 13.//而且注解这东西,将来用的会越来越广,因为它有很多的好处。Struts2.0.11版本中的注解的功能暂时还不是特别强大     
  14. 14.//据官方网站上说:在Struts2.2版出来后,注解的功能会非常非常的强大,完全可以抛离struts.xml来写程序,程序员开发时就更方便了     
  15. 15.//每个人都可以配置好自己的程序,不用集中在struts.xml中配置了,但统一性就会有所缺失,万一某人不按套路胡写一通,维护时很麻烦     
  16. 16./********************【浅析Action的四大注解】*********************************************************************************/    
  17. 17.//Struts2的所有注解中与Action相关的注解:ParentPackage、Namespace、Result、Results     
  18. 18.//在org.apache.struts2.config包中有四个它们的同名类,就是四大注解相关的     
  19. 19.//这四大注解都是类级别的,也就是说它们需要写在类的前面,接下来一一解释     
  20. 20.//【@ParentPackage(value="struts-default")】相当于【<package extends="struts-default"/>】     
  21. 21.//而ParentPackage注解的缺省设置就是继承struts-default包,所以它可以不写     
  22. 22.//【@Namespace(value="")】相当于【<package namespace=""/>】或者是没有在包中定义命名空间     
  23. 23.//而Namespace注解的缺省设置就是位于默认的命名空间中,所以它同样可以不写     
  24. 24.//【@Result(name="success",value="/userSuc.jsp")】相当于【<result name="success">/userSuc.jsp</result>】     
  25. 25.//而Result注解的name属性缺省设置就是success,但为了便于分析,仍建议显式的指明name属性     
  26. 26.//在Action中配置好注解之后,还需要在【web.xml】中声明哪些类使用了注解,代码如下所示     
  27. 27.//<filter>     
  28. 28.//  <filter-name>struts2</filter-name>     
  29. 29.//  <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>     
  30. 30.//  <init-param>     
  31. 31.//      <!-- 这里actionPackage是固定格式。然后再指定使用注解的Action所在的包 -->     
  32. 32.//      <param-name>actionPackages</param-name>     
  33. 33.//      <param-value>com.jadyer.action</param-value>     
  34. 34.//  </init-param>     
  35. 35.//</filter>     
  36. 36.//此时Action在命名时一定要以Action结尾,注解在解释的时候,会先把名字中后面的Action去掉     
  37. 37.//然后取Action名字中前面的字段作为访问的名字,比如说UserAction的调用,例如如下     
  38. 38.//访问时访问【<a href="user.action" mce_href="user.action">添加用户</a>】即可,而且user首字母需要小写方能匹配成功     
  39. 39.//如果Action的返回结果有多个,测试就需要用到【@Results】注解,具体用法见下方     
  40. 40.//注意:当配置result的转发模式的时候,若写成type="redirect"会报告Type mismatch: cannot convert from String to Class的错误     
  41. 41.//注意:这是因为在注解中是允许出现继承过来的东西的,所以此时就需要把redirect对应的类写在type值中     
  42. 42.//注意:例如type=org.apache.struts2.dispatcher.ServletRedirectResult.class     
  43. 43.//注意:然后Strtus2就会利用反射机制自动把这个类装载进来。此时不能添加双引号,因为它代表的是完整类,不是字符串     
  44. 44./************************************************************************************************************************/    
  45. 45.    
  46. 46.//@ParentPackage(value="struts-default")     
  47. 47.//@Namespace(value="")     
  48. 48.//@Result(value="/userSuc.jsp")     
  49. 49.//@Result(name="success", value="/userSuc.jsp")     
  50. 50.@Namespace(value="/annotation")    
  51. 51.@Results({    
  52. 52.    @Result(name="success", value="/userSuc.jsp"),    
  53. 53.    @Result(name="input", value="/annotationTest.jsp", type=org.apache.struts2.dispatcher.ServletRedirectResult.class)    
  54. 54.})    
  55. 55.public class UserAction extends ActionSupport {    
  56. 56.    private static final long serialVersionUID = -5137568969521746637L;    
  57. 57.        
  58. 58.    private String username;    
  59. 59.    private String password;    
  60. 60.    
  61. 61.    /* 两个属性对应的setter和getter略 */    
  62. 62.    
  63. 63.    @Override    
  64. 64.    public String execute() throws Exception {    
  65. 65.        System.out.println("UserAction.execute() is invoked");    
  66. 66.        if(username.trim().equalsIgnoreCase("admin") && password.equals("jadyer")){    
  67. 67.            return SUCCESS;    
  68. 68.        }else{    
  69. 69.            return INPUT;    
  70. 70.        }    
  71. 71.    }    
  72. 72.}    
  73. 73.//  @Before     
  74. 74.//  public void doBefore(){     
  75. 75.//      System.out.println("注解配置的方法在execute()执行之前调用了");     
  76. 76.//  }     
  77. 77.//       
  78. 78.//  @After     
  79. 79.//  public void doAfter(){     
  80. 80.//      System.out.println("注解配置的方法在execute()执行之后调用了");     
  81. 81.//  }     
  82. 82.//       
  83. 83.//  @BeforeResult     
  84. 84.//  public void doBeforeResult(){     
  85. 85.//      System.out.println("注解配置的方法在Result返回之前调用了");     
  86. 86.//  }     
  87. 87./********************【浅析Interceptor的三大注解】***************************************************************************/    
  88. 88.//在com.opensymphony.xwork2.interceptor.annotations包中定义了可用的配置拦截器的注解     
  89. 89.//其中Before和After注解分别是在execute()执行之前和之后调用的,而BeforeResult注解是在结果集返回之前调用的     
  90. 90.//Action的四大注解都是类级别的,而Interceptor的注解都是属于方法级别的,也就是说它们都需要写在类里面的方法之前     
  91. 91.//想在拦截器里面使用注解的话,就必须配置xwork2.interceptor.annotations包的AnnotationWorkflowInterceptor类     
  92. 92.//AnnotationWorkflowInterceptor类是调用这三个注解的前提,必须得把这个类配置在struts.xml中,配置方式如下     
  93. 93.//<interceptors>     
  94. 94.//    <interceptor name="annoInterceptor" class="com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor"/>     
  95. 95.//</interceptors>     
  96. 96.//然后在需要使用注解配置的拦截器的<action/>中增加<interceptor-ref name="annoInterceptor"/>即可     
  97. 97.//注意,这个时候不要忘记再引用一下默认的defaultStack拦截器     
  98. 98.//那么当发送这个Action请求的时候,执行的就是:@Before----execute()----@BeforeResult----@After顺序     
  99. 99.//这样看来,使用注解来配置拦截器的话,真的是非常非常简单。但是注解也有一个缺点:不能复用     
  100. 100.//另外,我们同样也可以通过注解配置拦截器的方式,来实现权限验证。举例如下     
  101. 101.//@Before     
  102. 102.//public String doBefore(){     
  103. 103.//  if(session.get("user")==null){     
  104. 104.//      //如果没有session,则表示用户还没有登录,那么返回登录的结果集     
  105. 105.//      return LOGIN;     
  106. 106.//  }else{     
  107. 107.//      //若有session,则表示用户已经登录,可以去执行下一步     
  108. 108.//      //此处返回null,那么程序就会继续执行execute()方法     
  109. 109.//      return null;     
  110. 110.//  }     
  111. 111.//}//这样就轻松实现了对用户的访问权限的验证了。所以说使用注解来配置Interceptor,有时候还是很方便的     
  112. 112./************************************************************************************************************************/    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值