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 注解对前台提交的数据进行验证,代码如下:
1 package com.SpringMVC.Entity; 2 3 4 import org.hibernate.validator.constraints.Email; 5 import org.hibernate.validator.constraints.Length; 6 import org.hibernate.validator.constraints.NotBlank; 7 import org.hibernate.validator.constraints.Range; 8 9 public class User { 10 @NotBlank(message = "Username can not be empty") 11 private String username; 12 @Length(min = 6, max = 16, message = "The length of the password must be between 6 and 16 bits") 13 private String password; 14 @Range(min = 18, max = 60, message = "Age must be between 18 and 60 years old") 15 private Integer age; 16 @Email(message = "Please enter a valid email address") 17 private String email; 18 19 20 21 public User(){} 22 public User(String username, String password, int age, String email) { 23 this.username = username; 24 this.password = password; 25 this.age = age; 26 this.email = email; 27 } 28 29 public String getUsername() { 30 return username; 31 } 32 33 public void setUsername(String username) { 34 this.username = username; 35 } 36 37 public String getPassword() { 38 return password; 39 } 40 41 public void setPassword(String password) { 42 this.password = password; 43 } 44 45 public int getAge() { 46 return age; 47 } 48 49 public void setAge(int age) { 50 this.age = age; 51 } 52 53 public String getEmail() { 54 return email; 55 } 56 57 public void setEmail(String email) { 58 this.email = email; 59 } 60 }
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> 标签显示属性的错误信息
1 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 2 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 3 <html> 4 <head> 5 <title>Register</title> 6 </head> 7 <body> 8 9 <div id="global"> 10 <form:form modelAttribute="user" method="post" action="register"> 11 <fieldset> 12 <legend>register</legend> 13 <p> 14 <label>name:</label> 15 <form:input path="username" /> 16 <form:errors path="username" cssStyle="color:red"/> 17 </p> 18 <p> 19 <label>password:</label> 20 <form:password path="password" /> 21 <form:errors path="password" cssStyle="color:red"/> 22 </p> 23 <p> 24 <label>age:</label> 25 <form:input path="age" /> 26 <form:errors path="age" cssStyle="color:red"/> 27 </p> 28 <p> 29 <label>email:</label> 30 <form:input path="email" /> 31 <form:errors path="email" cssStyle="color:red"/> 32 </p> 33 <p id="buttons"> 34 <input id="submit" type="submit" value="register"> <input 35 id="reset" type="reset" value="reset"> 36 </p> 37 </fieldset> 38 </form:form> 39 </div> 40 </body> 41 </html>
form 表单中的 modelAttribute="user" 绑定了一个 JavaBean 对象。
2、success.jsp
在WEB-INF/page文件夹下创建success.jsp
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 <html> 3 <head> 4 <title>success</title> 5 </head> 6 <body> 7 <h5>Registration success, personal information:</h5> 8 name:${user.username}<br /> 9 password:${user.password}<br /> 10 age:${user.age}<br /> 11 email:${user.email}<br /> 12 13 </body> 14 </html>
4.实验测试
-----------------------------------------------------------------------------------------------------------------------------