springmvc的数据校验
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中首先进行如下配置,我们使用注解进行配
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context.xsd
- http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc.xsd ">
- <!--让spring扫描包下所有的类,让标注spring注解的类生效 -->
- <context:component-scan base-package="cn.yxj.controller"/>
- <!--生成验证器 -->
- <bean id="myValidator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
- <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
- </bean>
- <!--注册mvc注解驱动 -->
- <mvc:annotation-driven validator="myValidator"/>
- </beans>
步骤二、对需要校验的实体类进行校验配置
- package cn.yxj.pojo;
- import java.util.List;
- 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.NotEmpty;
- public class UserInfo {
- @NotEmpty(message="用户名不能为空")
- @Size(min=3,max=6,message="姓名长度应在{min}-{max}个字符")
- private String username;
- @Min(value=0,message="成绩不能小于{value}")
- @Max(value=100,message="成绩不能大于{value}")
- private Integer score;
- @NotEmpty(message="手机号码不允许为空")
- @Pattern(regexp="^1[34578]\\d{9}$",message="手机号格式不正确")
- private String phone;
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public Integer getScore() {
- return score;
- }
- public void setScore(Integer score) {
- this.score = score;
- }
- public String getPhone() {
- return phone;
- }
- public void setPhone(String phone) {
- this.phone = phone;
- }
- }
步骤三、在我们的处理器类中进行相应的判断处理
注意:在我们的方法参数中 需要对我们校验的实体加一个@Validated标识
- package cn.yxj.controller;
- import org.springframework.stereotype.Controller;
- import org.springframework.validation.BindingResult;
- import org.springframework.validation.FieldError;
- import org.springframework.validation.annotation.Validated;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.servlet.ModelAndView;
- import cn.yxj.pojo.UserInfo;
- @Controller
- public class MyController{
- //处理器方法
- @RequestMapping(value="/list.do")
- public ModelAndView doFirst(@Validated UserInfo info,BindingResult br){
- ModelAndView mv=new ModelAndView();
- mv.addObject("info",info);
- mv.setViewName("/list.jsp");
- int errorCount=br.getErrorCount();
- if(errorCount>0){
- FieldError nameError=br.getFieldError("username");
- FieldError scoreError=br.getFieldError("score");
- FieldError phoneError=br.getFieldError("phone");
- if(nameError!=null){
- String nameErrormsg=nameError.getDefaultMessage();
- mv.addObject("nameErrormsg",nameErrormsg);
- }
- if(scoreError!=null){
- String scoreErrormsg=scoreError.getDefaultMessage();
- mv.addObject("scoreErrormsg",scoreErrormsg);
- }
- if(phoneError!=null){
- String phoneErrormsg=phoneError.getDefaultMessage();
- mv.addObject("phoneErrormsg",phoneErrormsg);
- }
- mv.setViewName("/index.jsp");
- }
- return mv;
- }
- }
步骤四、准备jsp页面
- <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
- <%
- 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>数据验证</title>
- </head>
- <body>
- <form action="${pageContext.request.contextPath }/list.do" method="post">
- <h1>数据验证</h1>
- 姓名:<input name="username"/>${nameErrormsg }<br/><br/>
- 成绩:<input name="score" />${scoreErrormsg }<br/><br/>
- 电话:<input name="phone" />${phoneErrormsg }<br/><br/>
- <input type="submit" value="注册"/>
- </form>
- </body>
- </html>
到此配置即可完成
springmvc的数据校验的更多相关文章
- springmvc(四) springmvc的数据校验的实现
so easy~ --WH 一.什么是数据校验? 这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验. 数据校验分为客户端 ...
- SpringMVC学习(三)———— springmvc的数据校验的实现
一.什么是数据校验? 这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验. 数据校验分为客户端校验和服务端校验 客户端校验 ...
- 学习SpringMVC必知必会(7)~springmvc的数据校验、表单标签、文件上传和下载
输入校验是 Web 开发任务之一,在 SpringMVC 中有两种方式可以实现,分别是使用 Spring 自带的验证 框架和使用 JSR 303 实现, 也称之为 spring-validator 和 ...
- 【SpringMVC】数据校验时,抛出javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.util.Date.
老魏原创,转载请留言. 原因:给Javabean中的字段注解多余或者错误导致. @NotEmpty @Past @DateTimeFormat(pattern="yyyy-MM-dd&quo ...
- SpringMVC——类型转换和格式化、数据校验、客户端显示错误消息
在介绍类型转换和格式化之前,我首先来介绍 <mvc:annotation-driven />. 需要导入的 schema: xmlns:mvc="http://www.sprin ...
- 《Java从入门到放弃》入门篇:springMVC数据校验
昨天我们扯完了数据传递,今天我们来聊聊数据校验的问题.来,跟着我一起读:计一噢叫,一按艳. 在springMVC中校验数据也非常简单,spring3.0拥有自己独立的数据校验框架,同时支持JSR303 ...
- SpringMVC的数据转换&&数据格式化&&数据校验
1 SpringMVC的数据绑定流程 SpringMVC将ServletRequest对象及目标方法的入参实例传递给WebDataBinderFactory实例,以创建DataBinder实例对象. ...
- SpringMvc中的数据校验
SpringMvc中的数据校验 Hibernate校验框架中提供了很多注解的校验,如下: 注解 运行时检查 @AssertFalse 被注解的元素必须为false @AssertTrue 被注解的元素 ...
- SpringMVC框架下数据的增删改查,数据类型转换,数据格式化,数据校验,错误输入的消息回显
在eclipse中javaEE环境下: 这儿并没有连接数据库,而是将数据存放在map集合中: 将各种架包导入lib下... web.xml文件配置为 <?xml version="1. ...
随机推荐
- BPM协同平台解决方案分享
一.需求分析 企业信息化的过程都是从单纯解决一个业务功能问题,到解决企业内部业务流程问题,再扩展到解决不同业务流程的关联互动问题, 核心是业务的集成和业务的协同,需要有一个统一的业务协同平台. 国内的 ...
- linux系统内存爆满的解决办法!~
1.首先用free工具检查一下内存的使用情况: 这个是我的linux时时数据 Mem: 4046824 763620 3283204 9004 10284 61560 -/+buffers/cach ...
- Vim使用
模式 ESC\Ctrl+c:退出编辑模式 ZZ\wq:命令模式下保存退出 编辑 i:进入编辑模式 I:转到行首非空字符开始编辑 s:删除当前字符进入编辑模式 a:从当前字符后开始编辑 A:从当前行末非 ...
- 【python之路4】循环语句之while
1.while 循环语句 #!/usr/bin/env python # -*- coding:utf-8 -*- import time bol = True while bol: print '1 ...
- Android AppBar
AppBar官方文档摘记 2016-6-12 本文摘自Android官方文档,为方便自己及其他开发者朋友阅读. 章节目录为"Develop > Training > Best P ...
- AOP之Castle DynamicProxy 动态代理
这里主要介绍使用castle这个动态代理,在.net一些开源的框架里可以找到它的影子,就连微软的rchard也是使用这个进行方法拦截等可以基于这个进行方法拦截,在这个方面PostSharp算是比较好用 ...
- C#与C++的发展历程第四 - C#6的新时代
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- C++虚函数和函数指针一起使用
C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...
- Hadoop相关日常操作
1.Hive相关 脚本导数据,并设置运行队列 bin/beeline -u 'url' --outputformat=tsv -e "set mapreduce.job.queuename= ...
- Atitit 编程语言编程方法的进化演进 sp COP ,AOP ,SOP
Atitit 编程语言编程方法的进化演进 sp COP ,AOP ,SOP 1.1. Sp oop>>COP ,AOP ,SOP1 1.2. Sp oop 结构化方法SP(Stru ...