struts2注解(转)

简介:

一、配置web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>com.test.action</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

二、加入注解
@Namespace(value="/test")
@Action(value = "file-manager",
interceptorRefs = {
@InterceptorRef(value = "fileUpload",params={"maximumSize","1024000","allowedTypes","image/pjpeg"}),
@InterceptorRef(value = "basicStack")},
results = {@Result(name = ActionSupport.SUCCESS, location = "/view/file-manager-sucess.jsp"),
@Result(name = ActionSupport.ERROR, location = "/view/file-manager-error.jsp") },
exceptionMappings = {@ExceptionMapping(exception = "java.lang.Exception", result = ActionSupport.ERROR)}
)

验证注解:
@Validations(
requiredStrings={
@RequiredStringValidator(fieldName="username",message="用户名不能为空!"),
@RequiredStringValidator(fieldName="telNum",message="电话号码不能为空!")
},
regexFields={@RegexFieldValidator(fieldName="telNum",expression="^(//+86|0|1)//d{10,11}$",
message="电话号码格式不正确!")}
)

跳过验证注解:
@SkipValidation

三、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。

四、与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("/view")修饰该Action,系统将回到view目录下寻找物理视图资源。

五、与包和命名空间相关的Annotation:
@Namespace:修饰Action类或其所在的包。该Annotation中指定一个value属性值,用于指定被修饰的Action所在的命名空间
@Namespaces:修饰Action类或其所在的包,用于组合多个@Namespace
@ParentPackage: 用于指定被修饰的Action所在包的父包。

六、与异常处理相关的Annotation
@ExceptionMappings 用于组织多个@ExceptionMapping,因此它只需指定一个value属性值,该value属性值为多个@ExceptionMapping。
@ExceptionMapping 用于定义异常类和物理视图之间的对应关系,也相当于struts.xml文件里<exception-mapping../>元素的作用 使用时,必须注意以下两个属性:
exception: 用于指定异常类
result:用于指定逻辑视图
@ExceptionMpping有如下两种用法
Action级的异常定义:以@ExceptionMappings组合多个@ExceptionMapping后修饰的Action类。这种异常定义对Action中的所有方法有效
方法级的异常定义:将多个@ExceptionMapping组成数组后作为@Action的exceptionMappings属性值,这种异常定义仅对被修饰的方法有效。

七、与拦截器配置相关的Annotation
与拦截器配置的Annotation有@InterceptorRef、@InterceptorRefs和@DefaultInterceptorRef
@InterceptorRefs用于组织多个@InterceptorRef,因此它只需要指定一个value属性值,该value属性值为多个@InterceptorRef
@InterceptorRef用于为指定Action引用lanjieq或者是拦截器栈。也就相当于strut.xml中位于<action../>元素内部的<interceptor-ref../>子元素的作用。使用@InterceptorRefAnnotation时,必须制定一个value属性,用于指定所引用的拦截器或拦截器栈的名字。相当于<interceptor-ref../>子元素里name属性的作用。

八、查看struts2配置
为了看到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插件的首页。

 

 

 

 

 

struts2注解实例:

使用注解完成一个Action的流程必须要如下的7个jar包
1.commons-fileupload-1.2.1.jar
2.commons-io-1.3.2.jar
3.freemarker-2.3.15.jar
4.ognl-2.7.3.jar
5.struts2-convention-plugin-2.1.8.1.jar
6.struts2-core-2.1.8.1.jar
7.xwork-core-2.1.6.jar

 

如下用户登录的Action通过注解的方式验证通过:

  1. package com.huawei.action;  
  2. import org.apache.struts2.convention.annotation.Action;    
  • import org.apache.struts2.convention.annotation.ExceptionMapping;    
  • import org.apache.struts2.convention.annotation.ExceptionMappings;    
  • import org.apache.struts2.convention.annotation.Namespace;    
  • import org.apache.struts2.convention.annotation.ParentPackage;    
  • import org.apache.struts2.convention.annotation.Result;    
  • import org.apache.struts2.convention.annotation.Results;    
  • import com.opensymphony.xwork2.ActionSupport;    
  • /** 
  •  * @name  
  •  * @date 2011-3-24 
  •  * @action LoginAction.java 
  •  * @time 下午11:23:58 
  •  * @package_name com.huaweiaction 
  •  * @project_name steutsAction 
  •  */  
  • /* 
  •  * 这个小Demo的主要作用就是温故一下Struts2 Action的注解 
  •  * 一般在一个项目实施开发中是不会配置struts.xml进行Action的转发或重定向的,其都是通过注解的方式来配置Action的 
  •  */  
  • ///////////使用注解来配置Action///////////////////////////   
  •     
  •  @ParentPackage("struts-default")    
  •  // 父包     
  •  @Namespace("")    
  •  @Results( {   
  •      @Result(name = com.opensymphony.xwork2.Action.SUCCESS, location = "/msg.jsp"),    
  •      @Result(name = com.opensymphony.xwork2.Action.ERROR, location = "/erlogin.jsp") })  
  •        
  •      // @ExceptionMappings 一级声明异常的数组   
  •     // @ExceptionMapping 映射一个声明异常   
  •  @ExceptionMappings( {  
  •      @ExceptionMapping(exception = "java.lange.RuntimeException", result = "error") })    
  •  public class LoginAction extends ActionSupport {    
  •      private static final long serialVersionUID = -2554018432709689579L;    
  •      private String loginname;    
  •      private String pwd;    
  •      
  •     // @Action(value="login") 指定某个请求处理方法的请求URL。注意,它不能添加在Action类上,要添加到方法上。   
  •      @Action(value = "loginName")    
  •      public String login() throws Exception {    
  •    if ("HEFE".equalsIgnoreCase(loginname.trim())&&"123".equalsIgnoreCase(pwd.trim()))  {    
  •                     return SUCCESS;    
  •                       }   
  •                          else {    
  •                           System.out.println("===========");  
  •                           return ERROR;    
  •                       }    
  •                  }  
  •      
  •      @Action(value = "add", results = { @Result(name = "success", location = "/index.jsp") })    
  •      public String add() throws Exception {    
  •          return SUCCESS;    
  •      }    
  •      
  •      public String getLoginname() {    
  •          return loginname;    
  •      }    
  •      
  •      public void setLoginname(String loginname) {    
  •          this.loginname = loginname;    
  •     }    
  •      
  •      public String getPwd() {    
  •          return pwd;    
  •      }    
  •      
  •      public void setPwd(String pwd) {    
  •          this.pwd = pwd;    
  •      }    
  •      
  •  }  
目录
相关文章
|
安全 算法 网络安全
【期末复习】计算机网络 谢希仁版(七)网络安全
目录 网络安全 1. 计算机网络的安全威胁 2. 两类密码体制, 代表性算法 2.1 对称密钥密码体制 2.2 非对称密钥密码体制 3. 数字签名、报文完整性鉴别,实体鉴别 3.1 数字签名特点 3.1 报文完整性鉴别 3.2 报文鉴别的方法 3.2.1 MD5 3.2.2 报文鉴定码 3.3 实体鉴别 4. 对称密钥的分发 5. 公钥的签发与认证 6. 访问控制 7. 因特网相关的安全协议 IPSEC、SSL IPsec SSL 8. 防火墙
443 0
【期末复习】计算机网络 谢希仁版(七)网络安全
|
DataWorks 安全 专有云
阿里云2021年618年中大促活动上云攻略及注意事项
目前,阿里云2021年的年中618大促活动正在火热进行当中,但是我们在通过今年的618活动购买阿里云各种云产品,特别是云服务器类产品的时候一定要先了解活动的具体优惠内容有哪些,购买时有些什么注意事项,懂得上云攻略才能买到最实惠最适合自己的云产品,在参与今年618活动的时候,下面这些事项大家一定要注意:
阿里云2021年618年中大促活动上云攻略及注意事项
|
2天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
266 116
|
17天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
12天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
658 220
|
5天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
334 34
Meta SAM3开源:让图像分割,听懂你的话
|
10天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1528 157