输入校验
输入校验和类型转换相辅相成
提交String请求参数,首先是类型转换,再次验证数据的合理性,然后进一步处理
分为客户端校验和服务器校验
客户端:js代码
服务器校验:java代码
客户端校验不能阻止恶意行为,决不能代替服务器校验
客户端也必不可少,由于大部分的浏览行为是正常行为,这样可以降低服务器的负担
两者必不可少。
struts2的输入校验完全是模块化的方式
需要检验哪个Action
1、继承ActionSupport类
2、为该Action增加校验规则文件 —-struts2会自动加载该检验规则文件
3、校验规则文件的文件名应该是actionname-validation.xml(可以拷贝strtus2文件夹里的blank项目里的模板)
每个校验器对应一条校验规则
校验失败,会自动跳转到input的result,因此需要配置一个input的result
常用内置校验器(10个)
- required validator
- requiredstring validator
fieldname
trim
- double validator
fieldName
minInclusive 最小值且包含最小值
maxInclusive
minExclusive 最小值但不包括最小值
maxExclusive
- int validator
fieldName
min
max
- stringlength validator
fieldName
maxLength
minLength
- expression validator
可用于校验前后两次的输入密码是否相同
expression - the ONGL expression to be evaluated against the stack(Must evaluate to a Boolean)
- regex validator
url,email校验器可以使用正则校验器代替
- date validator
格式要求太苛刻,不是很好
需要使用date的short格式
- email validator
- url validator
实例
需求:注册用户,使用内置校验器验证输入数据
1、jsp注册页面
<s:form action="RegisterAction">
<s:textfield name="user.name" label="用户名"/>
<s:textfield name="user.pass" label="密码"/>
<s:textfield name="user.weight" label="体重"/>
<s:textfield name="user.birth" label="生日"/>
<s:submit value="注册"/>
</s:form>
2、RegisterAction类
package org.struts2.action;
import com.opensymphony.xwork2.ActionSupport;
public class Registe extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute(){
//UserService业务类,内存仿真数据库
UserService us = new UserService();
int status = us.addUser(user);
if(status == -1){
return ERROR;
}
return SUCCESS;
}
}
3、为action制作规则文件
注意:
- 文件名必须为actionname-validation.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.name">
<field-validator type="requiredstring" short-circuit="true">
<param name="trim">true</param>
<message>姓名不能为空</message>
</field-validator>
</field>
<field name="user.pass">
<field-validator type="requiredstring" short-circuit="true">
<param name="trim">true</param>
<message>密码不能为空</message>
</field-validator>
</field>
<field name="user.weight">
<field-validator type="double" short-circuit="true">
<param name="minInclusive">10.0</param>
<param name="maxInclusive">90.0</param>
<message>体重在10.0~90.0之间</message>
</field-validator>
</field>
<field name="user.birth">
<field-validator type="required" short-circuit="true">
<message>生日不能为空</message>
</field-validator>
<field-validator type="date" short-circuit="true">
<message>生日格式是short形式</message>
</field-validator>
</field>
</validators>
4、配置input逻辑视图(struts.xml)
<package name="action" extends="struts-default">
<action name="RegisterAction" class="org.struts2.action.Registe">
<result name="input">/WEB-INF/content/register.jsp</result>
<result type="chain">listUsers</result>
</action>
<action name="listUsers" class="org.struts2.action.usersListAction">
<result>/WEB-INF/content/usersList.jsp</result>
</action>
</package>