1.Validate
1.1重写validate方法
例如:在前台上做登录页面
action:
1.2 校验框架
1. 编写校验规则文件
是一个典型的XML文件,其格式为ActionName-validation.xml
该校验文件需要添加一个dtd约束说明
该dtd说明在xwork-core里面
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
2. 校验器的配置
a) 常用的内置校验器
b) struts-2.3.20.1\src\xwork-core\src\main\resources\com\opensymphony\xwork2\validator\validators\default.xml
3. 完善校验文件,进行校验
xml配置样板
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="user.username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名不能为空!</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">8</param>
<param name="maxLength">20</param>
<message>用户名长度必须在${minLength}-${maxLength}之间</message>
</field-validator>
</field>
<field name="user.password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>密码不能为空!</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<message>密码长度必须大于${minLength}</message>
</field-validator>
</field>
<field name="repassword">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>确认密码不能为空!</message>
</field-validator>
<field-validator type="fieldexpression">
<param name="expression">user.password==repassword</param>
<message>两次密码不一致</message>
</field-validator>
</field>
<field name="user.phone">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>电话号码不能为空!</message>
</field-validator>
<field-validator type="regex">
<param name="regex">1[3578][0-9]{9}</param>
<message>电话号码格式不正确!</message>
</field-validator>
</field>
<field name="user.email">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>邮箱不能为空!</message>
</field-validator>
<field-validator type="email">
<message>邮箱格式不正确</message>
</field-validator>
</field>
</validators>
2.拦截器 interceptor
1.什么是拦截器,拦截器栈
拦截器是一种可以在让用户在Action执行之前和Result执行之后进行一些功能处理的机制
每个拦截器只有一个实例,采用单例模式,所以如果拦截器中使用的是类变量,要注意同步问题。
拦截器是AOP的一种实现,Struts2的拦截器实现原理相对简单,当请求Struts2的action时,
struts2会查找配置文件,并根据其配置实例化对应的拦截器对象,如果有多个拦截器,
则连接成一条链,形成拦截器栈,然后一个一个去调用拦截器栈中的拦截器
拦截器在action执行之前和result执行之后的顺序是相反的,可以看下图:
也就是说执行的顺序是:Interceptor1—Interceptor2—Interceptor3—Action—Result–Interceptor3—-Interceptor2—-Interceptor1
2.2拦截器的优点
拦截器与过滤器
1.过滤器属于WEB容器,可以过滤一切的请求(action,servlet,jsp,html);
2.拦截器属于struts2框架,只能拦截action(jsp无法拦截)
3.过滤器内部采用回调函数来实现,拦截器采用动态代理来实现
默认的18个拦截器
拦截器的应用,记录Action执行时间
struts.xml中拦截器的配置