springmvc 验证器的使用

Springmvc中验证器的使用

对于任何一个应用而言,在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证。

1.引入jar包
在这里插入图片描述
2.在springmvc的配置文件中添加验证器的配置信息

	<!-- 定义扫描器 -->
	<context:component-scan base-package="com.zhiyou100"></context:component-scan>
	<!-- 验证器的配置 -->
	<bean class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" id="validator">
		<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
	</bean>
	<!-- 引入验证器 -->
	<mvc:annotation-driven validator="validator"/>

特别注意:在web.xml和spring.xml中进行配置的时候,class="“中的内容需要手动ctrl+shift+t,输入最后一个”."后的单词,选择自己当前形目名称下的那个,双击或enter进入。如果粘贴复制之前项目中的内容,可能会导致项目启动失败。
以下图校验器的配置为例:
在这里插入图片描述
ctrl+shift+t,在弹出的窗口中输入LocalValidatorFactoryBean,选择当前项目名下的那一条,鼠标左键双击进入
在这里插入图片描述
鼠标左键双击进入后,选择下图红线所画的内容,注意前后不要带有空格,复制粘贴到对应的class中
在这里插入图片描述

3.在web.xml中添加配置信息

以下web.xml中class中的内容参照2.中spring.xml的配置

<!-- 配置核心功能处理器 -->
  <servlet>
  	<servlet-name>dispatcherServlet</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<!-- 读取spring.xml文件 -->
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:spring.xml</param-value>
  	</init-param>
  	<!-- 优先启动加载 -->
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>dispatcherServlet</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>
  
  <!-- 字符过滤 -->
  <filter>
  	<filter-name>characterEncodingFilter</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>
  </filter>
  <filter-mapping>
  	<filter-name>characterEncodingFilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

4.根据使用场景的不同给验证字段分组
(1)创建验证的空接口

public interface UserLoginValidation {
	//验证用户登录的空接口
}
public interface UserRegisterValidation {
	//验证用户注册的空接口
}

5.创建用户的实体类User

在实体类的属性头部添加验证和分组

public class User {
	private int id;
	//用户名不能为null					分组为:登录 注册
	@NotNull(message="用户名不能为null",groups={UserRegisterValidation.class,UserLoginValidation.class})
	//用户名不能有空格					分组为:登录 注册
	@NotBlank(message="用户名不能有空格",groups={UserRegisterValidation.class,UserLoginValidation.class})
	//用户名不能为空					分组为:登录 注册
	@NotEmpty(message="用户名不能为空",groups={UserRegisterValidation.class,UserLoginValidation.class})
	//正则表达式验证(用户名只能以字母开头,包含字母、数字、下划线,长度6-12位)					                                                 分组为:注册
	@Pattern(regexp="^[a-zA-Z][a-zA-Z0-9_]{5,11}",message="用户名只能以字母开头,包含字母、数字、下划线,长度6-12位",groups={UserRegisterValidation.class})
	private String username;
	
	@NotNull(message="密码不能为null",groups={UserRegisterValidation.class,UserLoginValidation.class})
	@Pattern(regexp="[0-9]{3,6}",message="密码只能为纯数字,长度3-6位",groups={UserRegisterValidation.class,UserLoginValidation.class})
	private String password;
	
	@NotNull(message="手机号不能为null",groups={UserRegisterValidation.class})
	@Pattern(regexp="^(1)(3[0-9]|4[5-9]|5[0-35-9]|66|7[0-8]|8[0-9]|9[8-9])[0-9]{8}",message="手机号只能为纯数字,长度11位",groups={UserRegisterValidation.class})
	private String phone;
	
	@NotNull(message="年龄不能为null",groups={UserRegisterValidation.class})
	@Range(min=1,max=500,message="年龄最小为1,最大为500",groups={UserRegisterValidation.class})
	@Pattern(regexp="[0-9]{1,3}",message="年龄只能是数字,长度1-3位",groups={UserRegisterValidation.class})
	private int age;
	
	//为以上属性提供公开的get和set方法
	//已省略 get() set()
}

6.在控制器中使用验证器

@Controller
@RequestMapping
public class UserController {
	
	@RequestMapping(value="/register.do",method={RequestMethod.POST})
	public String register(@Validated(value={UserRegisterValidation.class})User user,BindingResult result,HttpSession session){
		Map<String, String> map = new HashMap<>();
		if(result.hasErrors()){
			List<FieldError> errors = result.getFieldErrors();
			for (FieldError fieldError : errors) {
				String field = fieldError.getField();//获取字段名字,作为map集合的键
				String message = fieldError.getDefaultMessage();//获取错误信息
				System.out.println(field+"\t"+message);
				map.put(field, message);//如果一个字段包含多个错误信息,使用map集合会覆盖掉
			}
			session.setAttribute("map", map);
			return "redirect:register.jsp";
		}
		return "redirect:login.jsp";
	}

7.jsp页面
register.jsp

	<form action="register.do" method="post">
		用户名:<input type="text" name="username"/>${sessionScope.map.username }<br>
		密&nbsp;&nbsp;&nbsp;码:<input type="password" name="password"/>${sessionScope.map.password }<br>
		手机号:<input type="text" name="phone"/>${sessionScope.map.phone }<br>
		年龄:<input type="text" name="age"/>${sessionScope.map.age }<br><c:remove var="map" scope="session"/>
		<input type="submit" value="注册"/>
	</form>

login.jsp

	<form action="login.do" method="post">
		用户名:<input type="text" name="username"/><br>
		密&nbsp;&nbsp;&nbsp;码:<input type="password" name="password"/><br>
		<input type="submit" value="登录"/>
	</form>

以上内容即可完成在springmvc中对用户注册和登录时对用户名等信息进行验证

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值