在我们项目实际开发中在数据校验时,分为两种,一种是前端校验,一种是服务器校验:
客户端校验:主要是通过jsp写js脚本,它的优点很明显,就是输入错误的话提醒比较及时,能够减轻服务器的负担,但是客户端校验并不是安全的,简单来讲就是防君子防不了小人。
服务器端校验:最大特点就是数据安全,但是如果只有服务器端校验,会大大增加服务器端的负担。
所以一般在我们开发中,是客户端和服务器端校验相结合作用的。
那这篇文章,我只讲服务器端校验,在Struts2支持两种校验方式:
代码校验 :在服务器通过编辑java代码完成数据校验
配置校验: xml配置校验 通过xml配置文件完成数据的校验
(1)代码校验:
代码校验分为三个步骤:
步骤一、封装数据
步骤二、实现要校验的Action 必须继承ActionSupport
步骤三、覆盖Validate方法 然后完成业务逻辑数据的校验
用户界面 register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<title>用户注册</title>
</head>
<body style="text-align: center;">
<table align="center" width="50%">
<tr>
<td style="color: red">
<!-- <s:fielderror></s:fielderror> --> <!-- 这里是显示错误的地方 -->
</td>
</tr>
</table>
<form action="${pageContext.request.contextPath }/login" method="post" >
用户名:<input type="text" name="username"><br><br>
密 码:<input type="text" name="password"><br><br>
确认密码:<input type="text" name="password2"><br><br>
<input type="reset" value="清空">
<input type="submit" value="注册">
</form>
</body>
</html>
</div>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- 配置常量信息 --> <constant name="struts.devMode" value="true"></constant> <package name="struts2" extends="struts-default" > <action name="login" class="com.study.Login.RegisterAction"> <result name="success">/success.jsp</result> <!-- 在input视图中可以通过<s:fielderror/>显示失败信息 --> <result name="input">/register.jsp</result> </action> </package> </struts></div>
RegisterAction.java
import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction extends ActionSupport{
private String username;
private String password;
private String password2;
//这里我通过set方法封装数据
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void setPassword2(String password2) {
this.password2 = password2;
}
@Override
public String execute() throws Exception {
return NONE;
}
//在服务器端需要完成对数据的校验
@Override
public void validate() {
//测试是否得到属性值,证实已经得到
System.out.println(username+"---"+password+"---"+password2);
if(username==null || username.length()<6 || username.length()>20){
//把错误信息保存到字段中
this.addFieldError("username", "有户名输入不合法");
}
if(password==null || password.length()<6 || password.length()>20){
//把错误信息保存到字段中
this.addFieldError("password", "密码输入不合法");
}else if( password2==null || password2.length()<6 || password2.length()>20){
this.addFieldError("password2", "密码输入不合法");
}else if(!password.equals(password2)){
this.addFieldError("password2", " 两次密码不一致");
}
super.validate();
}
}
</div>
运行结果:

(2)框架校验
框架校验也就是通过XML配置方式进行数据校验 ,这也是我们在企业开发的主流校验。
XML校验原理: 将很多规则代码已经写好只需要在xml文件中定义需要使用的校验规则即可。,所以大大减少了我们的开发时间。
我先把步骤写一下:
步骤一:编写JSP
步骤二:编写Action 继承ActionSupport或者Validateable接口
步骤三:封装请求参数
步骤四:编写xml校验规则文件
Xml校验文件的命名规则: Action类名-validation.xml 对Action中所有的方法都执行校验
举例命名规则RegisterAction-validation.xml
同时要满足:Xml校验文件和Action类要在同一包下
步骤一: register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>用户注册</title>
</head>
<body style="text-align: center;">
<table align="center" width="50%">
<tr>
<td style="color: red">
<s:fielderror></s:fielderror>
</td>
</tr>
</table>
<form action="${pageContext.request.contextPath }/login.action" method="post" >
<table width="60%" >
<tr>
<td>用户名</td>
<td>
<input type="text" name="username" >
</td>
</tr>
<tr>
<td>密码</td>
<td>
<input type="password" name="password" >
</td>
</tr>
<tr>
<td>确认密码</td>
<td>
<input type="password" name="password2" >
</td>
</tr>
<tr>
<td>年龄</td>
<td>
<input type="text" name="age" >
</td>
</tr>
<tr>
<td>邮箱</td>
<td>
<input type="text" name="email" >
</td>
</tr>
<tr>
<td>生日</td>
<td>
<input type="text" name="birthday" >
</td>
</tr>
<tr>
<td>毕业日期</td>
<td>
<input type="text" name="graduation" >
</td>
</tr>
<tr>
<td>
<input type="reset" value="清空">
</td>
<td>
<input type="submit" value="注册">
</td>
</tr>
</table>
</form>
</body>
</html>
</div>
步骤二:RegisterAction.java
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class RegisterAction extends ActionSupport implements ModelDriven<User>{
//手动创建一个对象
private User user =new User();
@Override
public String execut

