1.实验介绍

-----------------------------------------------------------------------------------------------------------------------------

1.1实验环境

  • Tomcat 7.0.72
  • JDK 1.8
  • IntelliJ IDEA 2017.2
  • Firefox

1.2实验知识点

  • Spring MVC执行流程
  • 注解
  • 参数绑定
  • 数据绑定
  • Hibernate-Validator

-----------------------------------------------------------------------------------------------------------------------------

2.实验介绍

2.1Spring MVC执行流程

1、DispatcherServlet

前端控制器,所有的请求都经过它统一分发,请求会被分给对应的Handler

2、HandlerMapping(处理器映射器)

解析请求链接,然后根据请求连接找到执行这个请求的类

3、HandlerAddapter(处理器适配器)

调用具体的方法对用户发来的请求来进行处理

4、Controller

Controller 将处理用户请求,Controller 处理完用户请求,则返回 ModelAndView 对象给 DispatcherServlet 前端控制器。

从宏观角度考虑,DispatcherServlet 是整个 Web 应用的控制器;从微观考虑,Controller 是单个 Http 请求处理过程中的控制器。

5、ViewResolver(视图解析器)

解析 ModelMdoelAndView 中的逻辑视图名变为一个真正的 View 对象,并将 MdoelAndView 中的 Model 取出

2.2常用注解@Controller

在Spring MVC中,控制器Controoller负责处理有DispatcherServlet分发的请求,它把用户请求的数据经过业务处理层处理之后封装成Model,再把Model返回给对应的View进行展示

2.3常用注解@RequestMapping

@RequestMapping注解用来处理请求地址映射,指示Spring用哪个类或方法处理请求

常见属性:

value:指定请求的实际地址,即value属性将URL映射到方法上

@RequestMapping(value="/register")
@RequestMapping("/register")

method:指定请求的method类型,即该方法可以处理的HTTP请求方式,如GET,POST

@RequestMapping("/register",method=RequestMethod.POST)

consumes:指定处理请求的提交内容类型(Content-Type),如aoolication/json

@RequestMapping("/register",method=RequestMethod.POST,consumes="application/json")

produces:指定返回的内容类型,仅当request求情头的(Accept)类型中包含指定类型才返回

@RequestMapping("/register",method=RequestMethod.POST,produces="application/json")

params:指定request中必须包含的参数值

@RequestMapping("/register",method=RequestMethod.POST,params="myParam=Value")

header:指定request中必须包含指定的header值

@RequestMapping("/register",method=RequestMethod.POST,headers="Referer=http://www.shiyanlou.com")

2.4常用校检注解

这里给出 Hibernate-Validator 主要的校验注解说明:

-----------------------------------------------------------------------------------------------------------------------------

3.实验过程

3.1新建项目工程

在WEB-INF下创建lib文件夹,将jar包下载到lib文件夹内,单击右键 Add as Libiary,这里 hibernate-validator最新版的包缺少关联的jar包,会报错

3.2配置web.xml文件

3.4SpringMVC-servlet.xml文件

在web/WEB-INF/目录下新建Spring MVC配置文件

3.5创建实体类

在项目目录src的包com.SpringMVC.Entity下新建类User.java,包含username,password,age和email属性,在 User 类要校验的属性前添加必要的 Hibernate Validator 注解对前台提交的数据进行验证,代码如下:

 package com.SpringMVC.Entity;

 import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.Range; public class User {
@NotBlank(message = "Username can not be empty")
private String username;
@Length(min = 6, max = 16, message = "The length of the password must be between 6 and 16 bits")
private String password;
@Range(min = 18, max = 60, message = "Age must be between 18 and 60 years old")
private Integer age;
@Email(message = "Please enter a valid email address")
private String email; public User(){}
public User(String username, String password, int age, String email) {
this.username = username;
this.password = password;
this.age = age;
this.email = email;
} 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 int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
}
}

3.6Controller类的实现

在项目目录src的包com.SpringMVC.Controller下新建类UserController.java,代码如下:

package com.SpringMVC.Controller;

import com.SpringMVC.Entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping; import javax.validation.Valid; @Controller
public class UserController { // 进入注册页面
@RequestMapping(value = "/register_form")
public String register_form(Model model) {
model.addAttribute("user", new User());
return "register";
} // 注册请求的响应方法
@RequestMapping(value = "/register")
public String register(@Valid @ModelAttribute("user") User user, Errors errors, Model model) {
if(errors.hasErrors()){
return "/register";
}else {
model.addAttribute("user", user);
return "success";
}
}
}

其中 @Valid @ModelAttribute("user") User user 的 @Valid 意思是在把数据绑定到 @ModelAttribute("user") 后就进行验证。后面跟着 Errors 对象保存校验信息,如果 errors 中有错误信息,则返回 register 页面,验证成功则跳转到 success 页面

3.7JSP页面

1、register.jsp

在WEB-INF文件夹下新建page文件夹,和SpringMVC指定的文件目录相同,并在文件夹下创建register.jsp,添加 <form:errors> 标签显示属性的错误信息

 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Register</title>
</head>
<body> <div id="global">
<form:form modelAttribute="user" method="post" action="register">
<fieldset>
<legend>register</legend>
<p>
<label>name:</label>
<form:input path="username" />
<form:errors path="username" cssStyle="color:red"/>
</p>
<p>
<label>password:</label>
<form:password path="password" />
<form:errors path="password" cssStyle="color:red"/>
</p>
<p>
<label>age:</label>
<form:input path="age" />
<form:errors path="age" cssStyle="color:red"/>
</p>
<p>
<label>email:</label>
<form:input path="email" />
<form:errors path="email" cssStyle="color:red"/>
</p>
<p id="buttons">
<input id="submit" type="submit" value="register"> <input
id="reset" type="reset" value="reset">
</p>
</fieldset>
</form:form>
</div>
</body>
</html>

form 表单中的 modelAttribute="user" 绑定了一个 JavaBean 对象。

2、success.jsp

在WEB-INF/page文件夹下创建success.jsp

 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>success</title>
</head>
<body>
<h5>Registration success, personal information:</h5>
name:${user.username}<br />
password:${user.password}<br />
age:${user.age}<br />
email:${user.email}<br /> </body>
</html>

4.实验测试

-----------------------------------------------------------------------------------------------------------------------------

【代码总结】Spring MVC数据校验的更多相关文章

  1. spring mvc 数据校验(bean实体注解实现)

    spring mvc 数据校验 1.添加个jar (jar与一版本会冲突) <dependency> <groupId>com.fasterxml</groupId> ...

  2. JSR教程2——Spring MVC数据校验与国际化

    SpringMVC数据校验采用JSR-303校验. • Spring4.0拥有自己独立的数据校验框架,同时支持JSR303标准的校验框架. • Spring在进行数据绑定时,可同时调用校验框架完成数据 ...

  3. Spring MVC数据校验

    在web应用程序中,为了防止客户端传来的数据引发程序异常,常常需要对 数据进行验证.输入验证分为客户端验证与服务器端验证.客户端验证主要通过JavaScript脚本进行,而服务器端验证则主要通过Jav ...

  4. Spring MVC 数据校验@Valid

    先看看几个关键词 @Valid @Pattern @NotNull @NotBlank @Size BindingResult 这些就是Spring MVC的数据校验的几个注解. 那怎么用呢?往下看 ...

  5. spring mvc 数据校验

    1.需要导入的jar包: slf4j-api-1.7.21.jar validation-api-1.0.0.GA.jar hibernate-validator-4.0.1.GA.jar 2.访问页 ...

  6. Hibernate Validation,Spring mvc 数据验证框架注解

    1.@NotNull:不能为 Null,但是可以为Empty:用在基本数据类型上. @NotNull(message="{state.notnull.valid}", groups ...

  7. Java Web 学习(6) —— Spring MVC 之校验器

    Spring MVC 之校验器 数据验证 一个典型的 Spring MVC 应用会同时应用到 formatters/converters 和 validators. 在调用 controller 期间 ...

  8. Spring MVC 数据验证——validate编码方式

    1.导入jar包 validation-api-1.0.0.GA.jar这是比較关键的一个jar包,主要用于解析注解@Valid. hibernate-validator-4.3.2.Final.ja ...

  9. spring mvc 数据回显

    1.spring mvc自动将传入的pojo数据存入request域 request中的key是该pojo类名,首字母小写. JSP controller 第一次访问user.jsp 填写表单 点击提 ...

随机推荐

  1. 八连通(vector动态数组法)

    题目和一般的八连通一样,但行数和列数未定,相乘对于1e6,直接开a[1e6][1e6]的数组肯定会爆内存.用二维的动态vector就能很好的解决这个问题 #include<bits/stdc++ ...

  2. Beego模板 循环和判断几个例子

    Beego模板 循环和判断几个例子 Beego的前端几乎是另一种语言.一些循环.判断,不细看文档真的做不出来. 0. Beego的View模板语法规则: beego前端(view)统一使用了 {{ 和 ...

  3. 【你不知道的javaScript 上卷 笔记6】javaScript中的对象相关内容

    一.创建一个对象的语法 var myObj = { key: value // ... };//字面量 var myObj = new Object(); //new myObj.key = valu ...

  4. Python的字典、列表合并

    字典合并: 在日常工作中需要对字典进行合并操作,下面提供几个操作方法 1.使用dict(a,**b) 例: >>> a={'a':1,'b':2} >>> b={' ...

  5. Wannafly Camp 2020 Day 2F 采蘑菇的克拉莉丝 - 树链剖分

    如果暴力维护,每次询问时需要对所有孩子做计算 考虑通过树剖来平衡修改与询问的时间,询问时计算重链和父树,轻链的贡献预先维护好,修改时则需要修改可能影响的轻链贡献,因为某个点到根的路径上轻重交替只有 \ ...

  6. How to do high impact research + 实事求是

    1. develop a strong publications record early, so do what you can to make that happen. 2. 粗读:abstrac ...

  7. 162.扩展User模型-使用Proxy模型

    扩展用户模型: Django内置的User模型虽然已经足够强大了,但是有时候还是不能满足我们的需求,比如在验证用户登录的时候,它用的是用户名作为验证,而我们有时候需要通过手机号码或者是邮箱进行验证,还 ...

  8. C语言--“.”与“->”有什么区别?

    这虽然是个小问题,但有时候很容易让人迷惑,因为有的时候用混淆了,程序编译不通过.   下面说说我对它们的理解.   一般情况下用“.”,只需要声明一个结构体.格式是,结构体类型名+结构体名.然后用结构 ...

  9. python:if else 语句

    #!/usr/bin/python# -*- coding:utf-8 -*- import os fileName1 = 'a.txt'if os.path.exists(fileName1): f ...

  10. SequoiaDB 巨杉数据库Docker镜像使用教程

    为方便用户快速体验,SequoiaDB 巨杉数据库提供基于 Docker 的镜像.本文介绍如何在 Docker 环境下部署 SequoiaDB 分布式集群环境.   集群规划 我们准备在五个容器中部署 ...