文章目录
1、综述
对于MVC模式的Web应用,不同层面校验的机制是不同的。例如在Controller控制层,会校验页面请求参数的合法性;在Service业务层,主要校验关键业务参数,且仅限于Service接口中使用的参数。而对于DAO数据交互层,一般不需要再进行校验。
在后端校验的都是比较常用的数据,绝大部分业务逻辑都使用一样的校验方法,这时候如果在每个方法里面都添加这种校验逻辑,会是大妈臃肿不好维护,因此需要将校验逻辑集中起来。Spring MVC为此提供了多种校验机制,其中有Bean Validation及Spring Validator接口校验。在Spring 4.0之后,支持Bean Validation 1.0(JRS-303)和Bean Validation 1.1(JRS-349)校验,可以单独集成Hibernate的validation校验框架,用于服务端的数据校验。
2、Bean Validation 数据校验
2.1 导入jar包
要在项目中使用Bean Validation校验机制,需要添加相关jar包,具体如下图所示:
其中validation-api.jar提供了Bean Validation的基本校验机制,以及用于xml文档验证的api。hibernate-Validator.jar是Hibernate的一个验证框架,其中包含了Bean Validation的检验约束拓展,不需要和Hibernate的其他部分绑定就可以使用。即使项目中没有使用Hibernate,但是使用了Hibernate的validation机制,就要引入Hibernate的依赖jar包jboss-logging.jar。
Bean Validation校验框架的一个重要特性就是,检测实体封装类JavaBean中的数据。 它会使用简洁的注解语法来对Bean中的某个属性进行校验。
2.2 搭建validation校验框架
在前面的用户登录项目基础上,实现真正对用户通过表单提交过来的数据进行校验。
login.jsp页面为:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户登录</title>
</head>
<body>
<h3>用户登录</h3>
<form action="doLogin.action" method="post">
<table width="300px;" border=1>
<tr>
<td>用户编号:</td>
<td><input type="text" name="userId" id="userId" /></td>
</tr>
<tr>
<td>用户名:</td>
<td><input type="text" name="username" id="username" /></td>
</tr>
<tr>
<td>密 码:</td>
<td><input type="password" name="password" id="password" /></td>
</tr>
</table>
<br/>
<input type="submit" id="login_button" value="用户登录" />
</form>
</body>
</html>
当用户的登录信息处理完毕后,如果校验成功,向用户显示success.jsp页面,提示登录成功,具体页面代码如下所示:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录成功</title>
</head>
<body>
<h2>登录成功!</br></br>欢迎您${
user.username}!</h2>
<hr/>
<h3>使用user参数显示用户注册信息</h3>
<table width="300px;" border=1>
<tr>
<td>用户编号:</td>
<td>${
user.userId}</td>
</tr>
<tr>
<td>用户名:</td>
<td>${
user.username}</td>
</tr>
<tr>
<td>密 码:</td>
<td>${
user.password}</td>
</tr>
</table>
</body>
</html>
当用户的登录信息处理完毕后,如果校验失败,向用户显示error.jsp页面,提示登录失败,并显示具体校验错误信息,具体页面代码如下所示:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
Created by IntelliJ IDEA.
User: xiaobaixiaoda
Date: 2018/11/14
Time: 14:47
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录错误</title>
</head>
<body>
<h1>登录错误!</h1>
<c:if test="${allErrors != null}">
<c:forEach items="${allErrors}" var="error">