Spring MVC 數據驗證——validate編碼方式
1、導入jar包
- validation-api-1.0.0.GA.jar這是比較關鍵的一個jar包,[email protected]
- hibernate-validator-4.3.2.Final.jar能夠下載最新的。這個包在註解方式編碼中尤為重要。
- 其它的就是一些日誌包(不一定全不須要):jboss-logging-3.1.3.GA.jar、slf4j-log4j12-1.6.1.jar
2、web項目的結構圖
項目的主要結構圖,不清楚web項目的環境的能夠自己學一下。推薦去慕課網上找視頻看
lib庫中的jar包,貼出來方便對比。主要有3個類:spring核心庫、validate須要載入的庫、其它庫(這裏有幾個jsp標簽庫。不是重點)
3、項目配置
- web.xml配置
Spring mvc項目的最小配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>SpringMVC</display-name>
<welcome-file-list>
<welcome-file>jsp/hello.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1
</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
- hello-servlet.xml配置
通過自己主動載入
<?xml version="1.0" encoding="UTF-8"?
>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan
base-package="controller">
</context:component-scan>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp">
<!-- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> -->
</bean>
<!--數據驗證 編碼方式的配置-->
<mvc:annotation-driven validator="accountValidator"/>
<bean id="accountValidator" class="dao.AccountValidator"></bean>
</beans>
4、src下加入源代碼
- controller包
RegisterController類主要有兩個方法,一個用於get,還有一個用於post。當中數據驗證是放在registerIF()方法中的。驗證是通過前兩個參數。第一個參數是一個javabean保存的是註冊用戶的信息,第二個參數用於數據驗證提交過來的javabean對象。
package controller;
import javax.validation.Valid;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.DataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import dao.Account;
import dao.AccountValidator;
@Controller
@RequestMapping("/register")
public class RegisterController {
@RequestMapping(method=RequestMethod.GET)
public String register(Model model){
if (!model.containsAttribute("account")) {
model.addAttribute("account",new Account());
}
return "register";
}
@InitBinder
public void initBinder(DataBinder binder){
binder.setValidator(new AccountValidator());
}
@RequestMapping(method=RequestMethod.POST)
public String registerIF(@Valid @ModelAttribute("account")Account account,BindingResult result,Model model){
System.out.println("用戶名:"+account.getUsername());
if (result.hasErrors()) {
System.out.println("register faliure.");
model.addAttribute("message", "註冊失敗");
}else {
model.addAttribute("message", "註冊成功");
}
return "register";
}
}
- dao包
(1)、javabean類Account,用於保存註冊用戶信息
package dao;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
public class Account {
private String username;
private String password;
public Account() {
// TODO Auto-generated constructor stub
}
public Account(String username, String password) {
super();
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
(2)、 AccountValidator用於檢驗Account的輸入用戶信息
這個就是編碼方式驗證數據的主要類,通過hello-servlet.xml中的自己主動載入方式,將類載入進去,[email protected]
package dao;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
public class AccountValidator implements Validator {
@Override
public boolean supports(Class<?> arg0) {
// TODO Auto-generated method stub
return Account.class.equals(arg0);
}
@Override
//主要通過這種方法,驗證數據
public void validate(Object obj, Errors erros) {
// TODO Auto-generated method stub
ValidationUtils.rejectIfEmpty(erros, "username", null,"用戶名不能為空.");
ValidationUtils.rejectIfEmpty(erros, "password", null,"密碼不能為空.");
Account account = (Account) obj;
if (account.getUsername().length()<3 || account.getUsername().length()>20) {
erros.rejectValue("username","length","用戶名長度在3-20個字符串之間");
}
if (account.getPassword().length()<6 || account.getPassword().length()>20) {
erros.rejectValue("password","size","密碼長度在6-20個字符之間");
}
}
}
5、加入jsp
在WEB-INF中新建一個jsp文件夾,然後新建一個register.jsp文件,加入例如以下代碼:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>註冊界面</title>
</head>
<body>
<form:form method="post" modelAttribute="account">
<label for="username">用戶名:</label>
<form:input type="text" path="username"/>
<form:errors path="username"/><br><br>
<label for="pwd">密碼:</label>
<form:input type="password" path="password"/>
<form:errors path="password"/>
<br><br>
<input type="submit" value="註冊" name="login"/>
</form:form>
<br><hr>
${message}
</body>
</html>
6、效果演示
執行程序,然後在瀏覽器中輸入地址:http://localhost:8080/annotation_springmvc/register
Spring MVC 數據驗證——validate編碼方式