• 【代码总结】Spring MVC数据校验


    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.实验测试

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

     

  • 相关阅读:
    djangoadmin实现文件上传下载
    Apscheduler详解(转)
    django集成Apscheduler3
    springboot实现token鉴权
    xss攻击入门
    回顾2012——运维工作周年祭
    9个常用iptables配置实例
    ardunio 实验:超声波测距、声光报警模拟倒车雷达
    一款我用了好多年的多线程FTP软件
    线程Thread基础学习(2)
  • 原文地址:https://www.cnblogs.com/sqyysec/p/8323790.html
Copyright © 2020-2023  润新知