springMVC数据效验

数据效验:
  验证客户输入的数据是否合法
比如客户登录时,用户名不能为空,或者不能超出指定长度等要求

  数据效验分为客户端效验和服务端效验.
  客户端效验: js效验
  服务端效验: springmvc使用validation校验,struts2使用validation校验
1.导入数据效验的包 validation-api
          hibernate-validator
          jboss-logging
2.在需要效验的POJO中进行设置
3.在controller中需要效验的参数,前面加上@Validated
4.在spring-MVC的配置文件中配置 localvalidator的bean
并且将该Bean设置为 annotation-Dirven标签的属性
5.在需要验证的参数后面,加一个BinderResult对象,从该对象中就可以获取验证信息

<!--6.在前端界面通过 spring的<from: errors> 标签获取错误信息-->
  <form:errors path="数据校验的参数名.变量名"/>  

1.pom.xml

<profiles>
        <!-- JDK:JRE转化版本 -->
        <profile>
            <id>development</id>
            <activation>
                <jdk>1.8</jdk>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <maven.compiler.source>1.8</maven.compiler.source>
                <maven.compiler.target>1.8</maven.compiler.target>
                <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
            </properties>
        </profile>
    </profiles>
    <!-- 统一属性设置 -->
    <properties>
        <!-- 字符编码配置 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- springMVC相关依赖版本 -->
        <spring.version>5.0.7.RELEASE</spring.version>
    </properties>
    <dependencies>
        <!--springMVC 数据校验 相关包 -->
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.0.12.Final</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!--springMVC 相关依赖-->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>

2.web.xml

<!-- POST防止中文乱码 -->
    <filter>      <!--注意这里是filter,不要配置成servlet -->
        <filter-name>CharactorFilter</filter-name>    <!--过滤器名称 -->
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  <!--过滤器的完整类名 -->
        <init-param>   <!--初始化参数 -->
            <param-name>encoding</param-name>  <!--参数名称 -->
            <param-value>utf-8</param-value>   <!--参数值 -->
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping> <!--过滤器映射 -->
        <filter-name>CharactorFilter</filter-name><!--过滤器名称 -->
        <url-pattern>/*</url-pattern><!--URL映射,给所有页面处理乱码 -->
    </filter-mapping>

    <!-- struts2 是通过过滤器对请求进行处理 springMVC通过servlet对所有的请求进行处理 servlet也称为前端控制器、中央控制器 
        1、servlet比过滤器效率高 2、好管理 -->
    <servlet>
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 配置spring的bean配置文件 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springMVC_beans.xml</param-value>
        </init-param>
        <!-- 加载顺序 -->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!-- 前端控制器的映射路径配置,由于前端控制器是处理所有请求的,所以,此处路径配置为根目录 -->
    <!-- "/*":根目录底下所有的文件 "/":根目录下所有的资源都能处理,除了.jsp. .js .jpg.... .jsp管不到,不经过前端控制器 
        *.do: 只处理.do文件 -->
    <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

3.springMVC_beans.xml

<!-- 扫描注解包 -->
    <context:component-scan base-package="com.xalo.controller"></context:component-scan>
<!-- 在annotation-Driver中注册数据校验器:必须注册,要不不生效,因为它不是spring的注解 -->
     <mvc:annotation-driven validator="validator"></mvc:annotation-driven> 
<!-- 配置数据校验器 -->
    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"></bean> 
<!-- 界面解析器配置  根据逻辑视图名称匹配到物理视图. 例如:逻辑视图名称为 hello  逻辑视图拼接上前缀后缀 /hello.jsp -->
<bean id="viewParse" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/"></property>  <!-- 前缀 -->
  <property name="suffix" value=".jsp"></property> <!-- 后缀 -->
</bean> 

4.User.java

邮箱格式的解释:

@之前必须有内容且只能是字母(大小写)、数字、下划线(_)、减号(-)、点(.)
@和最后一个点(.)之间必须有内容且只能是字母(大小写)、数字、点(.)、减号(-),且两个点不能挨着
最后一个点(.)之后必须有内容且内容只能是字母(大小写)、数字且长度为大于等于2个字节,小于等于6个字节
public class User implements Serializable {
  @Size(min=1, max=4, message="名字长度需要在1-4之间")
  private String name;
  @Min(value=4, message="年龄不能小于4岁") //被释放的元素必须是一个数字,其值必须大于等于指定的最小值
  private Integer age;
  @Email(regexp = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z0-9]{2,6}$", message = "邮箱格式有误")
    private String email;
    //提供无参数的构造方法
    //提供setter和getter方法
    //重写toString()方法    
 }

5.ValidatorController.java

@Controller
public class ValidatorController{
 /* 
  *@Validated(): 当前的参数需要效验
  *如果要拿到错误信息,需要增加一个参数BindingResult.
  *从该参数中就可以获取它前面的验证数据的错误信息;此参数必须写在@Validated需要验证的参数之后
  */
   @RequestMapping("/tv")
   public String testValidator(@Validated() User user,BindingResult br){
     //获取验证有误参数的个数
       int count = br.getErrorCount();
     System.out.println("count:" + count);
       if(count > 0) {
         //获取所有的错误信息
         List<ObjectError> list = br.getAllErrors();
          for(ObjectError error : list) {
             //获取默认的错误信息
             System.out.println(error.getDefaultMessage());
          }  
        }
          return "register";
    }
     //该方法是显示错误信息
     @RequestMapping("/register")
     public String register() {
          return  "register";
       }
   }

6.register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!-- 导入spring标签库 -->
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<body>
   <h3>获取错误信息</h3>
   <h1>注册界面</h1>
   <form action="tv">
     用户名:&nbsp;<input type="text" name="name"/><span style="color: red"><form:errors path="user.name"></form:errors></span><br>
     年  龄:&nbsp;<input type="text" name="age"/><span style="color: red"><form:errors path="user.age"></form:errors></span><br>
     邮  箱:&nbsp;<input type="text" name="email"/><span style="color: red"><form:errors path="user.email"></form:errors></span><br>
     <input type="submit" value="提交">
   </form>
</body>

猜你喜欢

转载自blog.csdn.net/zs1342084776/article/details/81781915