springmvc的数据校验

在Web应用程序中,为了防止客户端传来的数据引发程序异常,常常需要对数据进行验证,输入验证分为客户端验证与服务器端验证。

客户端验证主要通过javaScript脚本进行,而服务器端验证则主要通过Java代码进行验证

为了保证数据的安全性,一般情况下,客户端和服务器端验证都是必须的

在前两次我们展示了如何绑定数据,绑定完数据之后如何确保我们得到的数据的正确性?这就是我们本篇要说的内容 —> 数据验证。

    这里我们采用Hibernate-validator来进行验证,Hibernate-validator实现了JSR-303验证框架支持注解风格的验证。首先我们要到http://hibernate.org/validator/下载需要的jar包,这里以4.3.1.Final作为演 

    示,解压后把hibernate-validator-4.3.1.Final.jar、jboss-logging-3.3.0.jar、validation-api-1.0.0.GA.jar这三个包添加到项目中。

    配置步骤:

      步骤一、在spring-servlet.xml中首先进行如下配置,我们使用注解进行配

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:p="http://www.springframework.org/schema/p"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xmlns:context="http://www.springframework.org/schema/context"
  7. xsi:schemaLocation="
  8. http://www.springframework.org/schema/beans
  9. http://www.springframework.org/schema/beans/spring-beans.xsd
  10. http://www.springframework.org/schema/context
  11. http://www.springframework.org/schema/context/spring-context.xsd
  12. http://www.springframework.org/schema/mvc
  13. http://www.springframework.org/schema/mvc/spring-mvc.xsd ">
  14.  
  15. <!--让spring扫描包下所有的类,让标注spring注解的类生效 -->
  16. <context:component-scan base-package="cn.yxj.controller"/>
  17.  
  18. <!--生成验证器 -->
  19. <bean id="myValidator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
  20. <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
  21. </bean>
  22. <!--注册mvc注解驱动 -->
  23. <mvc:annotation-driven validator="myValidator"/>
  24.  
  25. </beans>

    步骤二、对需要校验的实体类进行校验配置

  1. package cn.yxj.pojo;
  2.  
  3. import java.util.List;
  4.  
  5. import javax.validation.constraints.Max;
  6. import javax.validation.constraints.Min;
  7. import javax.validation.constraints.Pattern;
  8. import javax.validation.constraints.Size;
  9.  
  10. import org.hibernate.validator.constraints.NotEmpty;
  11.  
  12. public class UserInfo {
  13. @NotEmpty(message="用户名不能为空")
  14. @Size(min=3,max=6,message="姓名长度应在{min}-{max}个字符")
  15. private String username;
  16.  
  17. @Min(value=0,message="成绩不能小于{value}")
  18. @Max(value=100,message="成绩不能大于{value}")
  19. private Integer score;
  20. @NotEmpty(message="手机号码不允许为空")
  21. @Pattern(regexp="^1[34578]\\d{9}$",message="手机号格式不正确")
  22. private String phone;
  23.  
  24. public String getUsername() {
  25. return username;
  26. }
  27. public void setUsername(String username) {
  28. this.username = username;
  29. }
  30. public Integer getScore() {
  31. return score;
  32. }
  33. public void setScore(Integer score) {
  34. this.score = score;
  35. }
  36. public String getPhone() {
  37. return phone;
  38. }
  39. public void setPhone(String phone) {
  40. this.phone = phone;
  41. }
  42. }

  步骤三、在我们的处理器类中进行相应的判断处理

  注意:在我们的方法参数中 需要对我们校验的实体加一个@Validated标识

  1. package cn.yxj.controller;
  2.  
  3. import org.springframework.stereotype.Controller;
  4.  
  5. import org.springframework.validation.BindingResult;
  6. import org.springframework.validation.FieldError;
  7. import org.springframework.validation.annotation.Validated;
  8.  
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.servlet.ModelAndView;
  11.  
  12. import cn.yxj.pojo.UserInfo;
  13.  
  14. @Controller
  15. public class MyController{
  16. //处理器方法
  17. @RequestMapping(value="/list.do")
  18. public ModelAndView doFirst(@Validated UserInfo info,BindingResult br){
  19. ModelAndView mv=new ModelAndView();
  20. mv.addObject("info",info);
  21. mv.setViewName("/list.jsp");
  22.  
  23. int errorCount=br.getErrorCount();
  24. if(errorCount>0){
  25. FieldError nameError=br.getFieldError("username");
  26. FieldError scoreError=br.getFieldError("score");
  27. FieldError phoneError=br.getFieldError("phone");
  28. if(nameError!=null){
  29. String nameErrormsg=nameError.getDefaultMessage();
  30. mv.addObject("nameErrormsg",nameErrormsg);
  31. }
  32. if(scoreError!=null){
  33. String scoreErrormsg=scoreError.getDefaultMessage();
  34. mv.addObject("scoreErrormsg",scoreErrormsg);
  35. }
  36. if(phoneError!=null){
  37. String phoneErrormsg=phoneError.getDefaultMessage();
  38. mv.addObject("phoneErrormsg",phoneErrormsg);
  39. }
  40. mv.setViewName("/index.jsp");
  41. }
  42. return mv;
  43. }
  44. }

步骤四、准备jsp页面

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>
  6.  
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  8. <html>
  9. <head>
  10. <base href="<%=basePath%>">
  11.  
  12. <title>数据验证</title>
  13. </head>
  14.  
  15. <body>
  16. <form action="${pageContext.request.contextPath }/list.do" method="post">
  17. <h1>数据验证</h1>
  18. 姓名:<input name="username"/>${nameErrormsg }<br/><br/>
  19. 成绩:<input name="score" />${scoreErrormsg }<br/><br/>
  20. 电话:<input name="phone" />${phoneErrormsg }<br/><br/>
  21. <input type="submit" value="注册"/>
  22. </form>
  23. </body>
  24. </html>

到此配置即可完成

springmvc的数据校验的更多相关文章

  1. springmvc(四) springmvc的数据校验的实现

    so easy~ --WH 一.什么是数据校验? 这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验. 数据校验分为客户端 ...

  2. SpringMVC学习(三)———— springmvc的数据校验的实现

    一.什么是数据校验? 这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验. 数据校验分为客户端校验和服务端校验 客户端校验 ...

  3. 学习SpringMVC必知必会(7)~springmvc的数据校验、表单标签、文件上传和下载

    输入校验是 Web 开发任务之一,在 SpringMVC 中有两种方式可以实现,分别是使用 Spring 自带的验证 框架和使用 JSR 303 实现, 也称之为 spring-validator 和 ...

  4. 【SpringMVC】数据校验时,抛出javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.util.Date.

    老魏原创,转载请留言. 原因:给Javabean中的字段注解多余或者错误导致. @NotEmpty @Past @DateTimeFormat(pattern="yyyy-MM-dd&quo ...

  5. SpringMVC——类型转换和格式化、数据校验、客户端显示错误消息

    在介绍类型转换和格式化之前,我首先来介绍 <mvc:annotation-driven />. 需要导入的 schema: xmlns:mvc="http://www.sprin ...

  6. 《Java从入门到放弃》入门篇:springMVC数据校验

    昨天我们扯完了数据传递,今天我们来聊聊数据校验的问题.来,跟着我一起读:计一噢叫,一按艳. 在springMVC中校验数据也非常简单,spring3.0拥有自己独立的数据校验框架,同时支持JSR303 ...

  7. SpringMVC的数据转换&&数据格式化&&数据校验

    1 SpringMVC的数据绑定流程 SpringMVC将ServletRequest对象及目标方法的入参实例传递给WebDataBinderFactory实例,以创建DataBinder实例对象. ...

  8. SpringMvc中的数据校验

    SpringMvc中的数据校验 Hibernate校验框架中提供了很多注解的校验,如下: 注解 运行时检查 @AssertFalse 被注解的元素必须为false @AssertTrue 被注解的元素 ...

  9. SpringMVC框架下数据的增删改查,数据类型转换,数据格式化,数据校验,错误输入的消息回显

    在eclipse中javaEE环境下: 这儿并没有连接数据库,而是将数据存放在map集合中: 将各种架包导入lib下... web.xml文件配置为 <?xml version="1. ...

随机推荐

  1. BPM协同平台解决方案分享

    一.需求分析 企业信息化的过程都是从单纯解决一个业务功能问题,到解决企业内部业务流程问题,再扩展到解决不同业务流程的关联互动问题, 核心是业务的集成和业务的协同,需要有一个统一的业务协同平台. 国内的 ...

  2. linux系统内存爆满的解决办法!~

    1.首先用free工具检查一下内存的使用情况: 这个是我的linux时时数据 Mem: 4046824 763620 3283204 9004 10284 61560  -/+buffers/cach ...

  3. Vim使用

    模式 ESC\Ctrl+c:退出编辑模式 ZZ\wq:命令模式下保存退出 编辑 i:进入编辑模式 I:转到行首非空字符开始编辑 s:删除当前字符进入编辑模式 a:从当前字符后开始编辑 A:从当前行末非 ...

  4. 【python之路4】循环语句之while

    1.while 循环语句 #!/usr/bin/env python # -*- coding:utf-8 -*- import time bol = True while bol: print '1 ...

  5. Android AppBar

    AppBar官方文档摘记 2016-6-12 本文摘自Android官方文档,为方便自己及其他开发者朋友阅读. 章节目录为"Develop > Training > Best P ...

  6. AOP之Castle DynamicProxy 动态代理

    这里主要介绍使用castle这个动态代理,在.net一些开源的框架里可以找到它的影子,就连微软的rchard也是使用这个进行方法拦截等可以基于这个进行方法拦截,在这个方面PostSharp算是比较好用 ...

  7. C#与C++的发展历程第四 - C#6的新时代

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  8. C++虚函数和函数指针一起使用

    C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...

  9. Hadoop相关日常操作

    1.Hive相关 脚本导数据,并设置运行队列 bin/beeline -u 'url' --outputformat=tsv -e "set mapreduce.job.queuename= ...

  10. Atitit 编程语言编程方法的进化演进 sp  COP ,AOP ,SOP

    Atitit 编程语言编程方法的进化演进 sp  COP ,AOP ,SOP 1.1.  Sp  oop>>COP ,AOP ,SOP1 1.2. Sp  oop 结构化方法SP(Stru ...