struts2用户校验解析和源码
来源:互联网 发布:好医保住院医疗 知乎 编辑:程序博客网 时间:2024/06/18 12:20
struts2用户校验解析和源码
一 对于输入校验struts2提供了两种实现方法:
1. 采用手工编写代码实现。
2. 基于XML配置方式实现。
二 首先介绍一下手动的编写代码
手动的用户校验分为对action中所有方法进行校验和指定的方法进行校验
1. 对action中所有方法都进行校验的
(1) 首先是一个登入的页面:
<body>
<div>
<form action="${pageContext.request.contextPath}/csdn/login.action" method="post">
用户名:<input type="text" name="uname"/><br/>
密码:<input type="text" name="upass"/>
<input type="submit" value="登入"/>
</form>
</div>
</body>
2.在struts.xml中的配置
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="validate" extends="struts-default" namespace="/csdn">
<action name="login" class="cn.csdn.hr.action.LoginAction">
<result name="success">../index.jsp</result>
<result name="input">/WEB-INF/error.jsp</result>
</action>
</package>
</struts>
从配置中可以看出当访问到struts.xml后,会跳到LoginAction中去进行校验,校验的.为LoginAction.java,首先来接收传过来的参数并赋值
3.校验action
package cn.csdn.hr.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private String uname;
private String upass;
public LoginAction() {
super();
// TODO Auto-generated constructor stub
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpass() {
return upass;
}
public void setUpass(String upass) {
this.upass = upass;
}
//进行校验信息
public void validate () {
System.out.println("正在校验信息、、、、、");
if ("".equals(uname) || uname == null) {
// 添加错误信息
this.addFieldError("msg", "用户名不能为空");
}
if ("".equals(upass) || upass == null) {
// 添加错误信息
this.addFieldError("msg", "密码不能为空");
}
}
//成功并返回
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println("进行业务登录操纵的处理. 默认的......");
System.out.println("用户名:" + uname + "密码 :" + upass);
return SUCCESS;
}
}
总结:简单的总结一下运行的流程:当从jsp页面中输入用户名之后会跳到struts.xml,根据strtus.xml的指定掉到响应的action中,在为uname和upass赋值之后会执行validate方法,来进行校验,在用户名和密码都输入的情况下校验成功,后执行execute方法成功返回index.jsp页面 ,如果,没有输入任何值,会把错误的信息添加到addFieldError中,并将请求转发到result的input视图中去执行错误的页面进行提示。
4.指定方法输入校验
这是全局的action校验,如果是指定的某个方法进行校验,就在action标签中添加一个method的属性,来制定跳转执行的方法。并且在action中写的格式必须是vallidateXxx,意思是如果method=”login”,那么校验的方法为vallidateLogin(),当然,指定之后就不会再执行execute默认的方法。如果校验正确,是去执行login()成功返回,如果校验不正确,返回到错页面去提示
5.这个运行的校验全过程:
(1)类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。
(2)如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息添加到fieldErrors里。不管类型转换是否出现异常,都会进入第3步。
(3)系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。
(4)再调用action中的validate()方法。
(5)经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。
三 基于XML配置方式
1. 实现对action的所有方法进行输入校验
使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并且提供校验文件,校验文件和action类放在同一个包下,文件的取名格式为:ActionClassName-validation.xml,其中ActionClassName为action的简单类名,-validation为固定写法。如果Action类为cn.csdn.hr.LoginAction,那么该文件的取名应为:LoginAction-validation.xml
在LoginAction-validation.xml中的校验为:
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<!--field指定要校验的属性 -->
<field name="uname">
<!-- 指定校验器 -->
<field-validator type="stringlength">
<!-- 调用trim()方法去掉空格 -->
<param name="trim">true</param>
<param name="minLength">10</param>
<param name="maxLength">20</param>
<message>用户名不能过长,必须在5-10个字符之间</message>
</field-validator>
</field>
<field name="upass">
<!-- 指定正则表达式校验器 -->
<field-validator type="regex">
<!-- 调用trim()方法去掉空格 -->
<param name="trim">true</param>
<param name="caseSensitive">true</param>
<param name="expresion"><![CDATA[(\w{4,15})]]></param>
<message>必须是字符和数组的组合,并且长度在4-15之间</message>
</field-validator>
</field>
</validators>
从以上可以看出校验的内容,<message>为错误信息提示
2. 基本对指定的action中的xml中的配
也就是在struts.xml中用通配符配置传过来的值,在action中有相同的方法进行接收和校验,在xml中为:
<action name="login_*" class="cn.csdn.hr.action.LoginAction" method="{1}">
<result name="success">../index.jsp</result>
<result name="input">/WEB-INF/error.jsp</result>
</action>
Struts2提供的校验器的列表为:
系统提供的校验器如下:
required (必填校验器,要求field的值不能为null)
requiredstring (必填字符串校验器,要求field的值不能为null,并且长度大于0,默认情况下会对字符串去前后空格)
stringlength(字符串长度校验器,要求field的值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格)
regex(正则表达式校验器,检查被校验的field是否匹配一个正则表达式.expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true)
int(整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值)
double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值)
fieldexpression(字段OGNL表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过)
email(邮件地址校验器,要求如果field的值非空,则必须是合法的邮件地址)
url(网址校验器,要求如果field的值非空,则必须是合法的url地址)
date(日期校验器,要求field的日期值必须在指定范围内,min指定最小值,max指定最大值)
conversion(转换校验器,指定在类型转换失败时,提示的错误信息)
visitor(用于校验action中的复合属性,它指定一个校验文件用于校验复合属性中的属性)
expression(OGNL表达式校验器,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过,该校验器不可用在字段校验器风格的配置中)
总结:我们从以上的看到有手动的校验,也有基于xml的,他们执行的顺序为:先执行strut.xml,再执行指定包下的xml,即是从外到内执行的。
当为某个action提供了ActionClassName-validation.xml和ActionClassName-ActionName-validation.xml两种规则的校验文件时,系统按下面顺序寻找校验文件:
1。AconClassName-validation.xml
2。ActionClassName-ActionName-validation.xml
系统寻找到第一个校验文件时还会继续搜索后面的校验文件,当搜索到所有校验文件时,会把校验文件里的所有校验规则汇总,然后全部应用于action方法的校验。如果两个校验文件中指定的校验规则冲突,则只使用后面文件中的校验规则。
当action继承了另一个action,父类action的校验文件会先被搜索到。
假设UserAction继承BaseAction:
<action name="user" class="cn.itcast.action.UserAction" method="{1}">
</action>
访问上面action,系统先搜索父类的校验文件:BaseAction-validation.xml, BaseAction-user-validation.xml,接着搜索子类的校验文件: UserAction-validation.xml, UserAction-user-validation.xml。应用于上面action的校验规则为这四个文件的总和。
- struts2用户校验解析和源码
- Struts2用户输入校验
- struts2 validate用户登录 校验
- Struts2用户输入的校验
- Struts2字段校验和非字段校验
- struts2之用户登录校验数据库信息
- 使用 Struts2 校验器校验用户注册信息的例子
- struts2二维码生成和校验
- struts2源码解析
- struts2源码解析
- Struts2源码解析
- struts2源码解析
- struts2 源码解析
- struts2源码解析
- struts2输入校验完整解析222222
- struts2 文件上传和下载,以及部分源码解析
- struts2 文件上传和下载,以及部分源码解析
- ZooKeeper源码解析(二):用户如何和ZooKeeper交互
- Eclipse空白包的显示和隐藏。
- WPF 截屏,为图片加水印,并预览
- 数据库SQL编写规范
- android VOIP
- Linux网络协议栈导读 Linux Network Stack Walkthrough (2.4.20)
- struts2用户校验解析和源码
- Kindle电子书的用到的几种文件
- 數字信號處理筆記 – 序列(上)
- JBPM4项目和tomcat6.0的兼容问题
- Alter table move compress是如何工作的?
- 扩展虚拟机硬盘大小
- strcpy ,strncpy ,strlcpy地用法
- ORACLE服务器监听程序LSNRCTL
- 模板的分离编译