springMvc验证

数据验证分为前台验证和后台验证

前台验证是不安全的   适合简单的验证

      例如

<script type="text/javascript">
  function checkSubmit(){
	  	var userName=document.getElementsByName("userName")[0].value;
	  	if(userName==null||userName==""){
	  		alert("用户名不能为空");
	  		return;
	  	}
	  	var password=document.getElementsByName("password")[0].value;
	  	var repassword=document.getElementsByName("repassword")[0].value;
	  	if(password!=repassword){
	  		alert("两次输入密码不一致");
	  		return;
	  	}
	  	document.forms[0].submit();
  	}
  </script>

form表单

 <form action="${pageContext.request.contextPath}/myreg" method="get"> 
    	用户名:<input type="text" name="userName">
    	密码:</s:message>:<input type="password" name="password">
    	确认密码:<input type="password" name="repassword">
    	<input type="button" οnclick="checkSubmit()" value="<s:message code="refer"></s:message>">
 </form>

在浏览器=====javascript.doucment.forms[0].submit()    可以直接绕过前台验证





后台验证

1、要在pom.xml中引入jsr303的jar包

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>4.3.2.Final</version>
</dependency>


      JSR 303是Java为Bean数据合法性校验所提供的标准框架,它已经包含在Java EE 6.0中。JSR303通过在Bean属性上标注类似于@NotNull、@Max等标准的注解指定校验规则,并通过标准的验证接口对Bean进行验证。

     你可以通过http://jcp.org/en/jsr/detail?id=303了解JSR303的详细内容。

注    解

功能说明

@Null

 被注释的元素必须为null

@NotNull

 被注释的元素必须不为null

@AssertTrue

 被注释的元素必须为true

@AssertFalse

 被注释的元素必须为false

@Min(value)

 被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@Max(value)

 被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@DecimalMin(value)

 被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@DecimalMax(value)

 被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@Size(max, min)

 被注释的元素的大小必须在指定的范围内

@Digits (integer, fraction)

 被注释的元素必须是一个数字,其值必须在可接受的范围内

@Past

 被注释的元素必须是一个过去的日期

@Future

 被注释的元素必须是一个将来的日期




     <mvc:annotation-driven/>会默认装配好一个LocalValidatorFactoryBean,通过在处理方法的入参上标注@Valid注解即可让SpringMVC在完成数据绑定后执行数据校验的工作。

<!-- 启用注解驱动 -->
<mvc:annotation-driven validator="localValidatorFactoryBean"></mvc:annotation-driven>


1.声名式

实体类 与表单的name值一致

package cn.et.springmvc.lesson03;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;


public class UserInfo {
	/**
	 * NotNull 属性名 !=null
	 * NotEmpty 属性名!=null &&  !属性名.equals("")
	 */
	@NotEmpty(message="用户名不能为空")
	private String userName;

	@NotEmpty(message="密码不能为空")
	private String password;
	
	@NotEmpty(message="再次输入不能为空")
	private String repassword;
	
	// lixin@126.com  
	@Pattern(message="邮箱格式错误",regexp=".+@.+\\..+")
	@Email(message="邮箱格式不正确")  
	private String email;
	
	@NotEmpty(message="年龄不能为空")
	@Max(value=100,message="年龄必须小于100")
	@Min(value=1,message="年龄大于1")
	private String age;
	
	@Size(min=11, max=11,message="手机号码必须是11位")
	private String phone;
	@Pattern(message="网址格式不正确",regexp="^(?=^.{3,255}$)(http(s)?:\\/\\/)?(www\\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\\d+)*(\\/\\w+\\.\\w+)*$")
	private String website;
	@Pattern(message="时间格式错误",regexp="(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)")
	private String date;
	
	
	public String getDate() {
		return date;
	}
	public void setDate(String date) {
		this.date = date;
	}
	public String getWebsite() {
		return website;
	}
	public void setWebsite(String website) {
		this.website = website;
	}
	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;
	}
	public String getRepassword() {
		return repassword;
	}
	public void setRepassword(String repassword) {
		this.repassword = repassword;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	
	@Override
	public String toString() {
		return "UserInfo [age=" + age + ", email=" + email + ", password="
				+ password + ", phone=" + phone + ", repassword=" + repassword
				+ ", userName=" + userName + "]";
	}
}


package cn.et.springmvc.lesson03;



import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
 * 编程式
 * 
 * 生名式 
 * 
 * 
 * 
 * 后台验证步骤
 * 	1、javabean添加验证注解
 * 	2、action中使用@valid表示javabean  使用Errors或者BindingResult判断是否验证失败
 * 	3、出现jar包冲突
 * @author THINK
 *
 */
@Controller
public class RegController {
	@RequestMapping(value="/reg",method=RequestMethod.POST)
	//@ModelAttribute("userInfo")  修改对象名   
	public String index(@ModelAttribute("userInfo") @Valid UserInfo user,BindingResult error){
		if(error.hasErrors()){//出现错误 跳到登陆页面并提示错误信息
			return "/lesson03/reg.jsp";
		}
		return "/lesson03/suc.jsp";//成功的页面
	}
}


前台的页面

jsp页面引入  <%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>  标签库

打印错误信息  <font color=red><form:errors path="userInfo.userName"></form:errors></font>

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'reg.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  <script type="text/javascript">
  function checkSubmit(){
	  	/*var userName=document.getElementsByName("userName")[0].value;
	  	if(userName==null||userName==""){
	  		alert("用户名不能为空");
	  		return;
	  	}
	  	var password=document.getElementsByName("password")[0].value;
	  	var repassword=document.getElementsByName("repassword")[0].value;
	  	if(password!=repassword){
	  		alert("两次输入密码不一致");
	  		return;
	  	}*/
	  	document.forms[0].submit();
  	}
  </script>
  <body>
    <form action="${pageContext.request.contextPath}/reg" method="post">
    	用户名:<input type="text" name="userName"><font color=red><form:errors path="userInfo.userName"></form:errors></font><br/>
    	密码:<input type="password" name="password"><font color=red><form:errors path="userInfo.password"></form:errors></font><br/>
    	再次输入密码<input type="password" name="repassword"><font color=red><form:errors path="userInfo.repassword"></form:errors></font><br/>
    	邮件:<input type="text" name="email"><font color=red><form:errors path="userInfo.email"></form:errors></font><br/>
    	年龄:<input type="text" name="age"><font color=red><form:errors path="userInfo.age"></form:errors></font><br/>
    	手机号码:<input type="text" name="phone"><font color=red><form:errors path="userInfo.phone"></form:errors></font><br/>
    	个人网站:<input type="text" name="website"><font color=red><form:errors path="userInfo.website"></form:errors></font><br/>
    	出生日期:<input type="text" name="date"/><font color=red><form:errors path="userInfo.date"></form:errors></font><br/>
    	<input type="button" οnclick="checkSubmit()" value="提交">
    </form>
  </body>
</html>



页面效果(显示的效果不是很好)  我们可以和编程式结合是使用   把实体类的年龄验证注释掉






2.编程式

package cn.et.springmvc.lesson03;



import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
 * 编程式
 * 
 * 生名式 
 * 
 * 
 * 
 * 后台验证步骤
 * 	1、javabean添加验证注解
 * 	2、action中使用@valid表示javabean  使用Errors或者BindingResult判断是否验证失败
 * 	3、出现jar包冲突
 * @author THINK
 *
 */
@Controller
public class RegController {
	@RequestMapping(value="/reg",method=RequestMethod.POST)
	//@ModelAttribute("userInfo")  修改对象名   
	public String index(@ModelAttribute("userInfo") @Valid UserInfo user,BindingResult error){
		if(!user.getPassword().equals(user.getRepassword())){
			error.addError(new FieldError("userInfo","repassword","两次密码输入不一致"));
		}
		if(user.getAge()==null||"".equals(user.getAge())){
			error.addError(new FieldError("userInfo","age","年龄不能空"));
		}else{
			Integer age;
			try {
				age = Integer.parseInt(user.getAge());
				if(age<1||age>100){
					error.addError(new FieldError("userInfo","age","年龄不合法"));
				}
			} catch (NumberFormatException e) {
				error.addError(new FieldError("userInfo","age","必须是数字"));
			}
		}
		if(error.hasErrors()){
			return "/lesson03/reg.jsp";
		}
		return "/lesson03/suc.jsp";
	}
}

结合后的页面(这样就比前面的美观多了)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值