SpringMVC拦截器和数据校验
1、什么是拦截器
Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。在SpringMVC中通过实现HandlerInterceptor接口实现自定义拦截器类。
2、 拦截器案例
(1)MyIntercept
package com.springmvc.intercept; import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class MyIntercept implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("=========拦截器当中的handle方法=========");
return true;
} @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("=======在HandlerAdapter之后执行,在DispatcherServlet解析视图之前执行=====");
} @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("=========呈现之后调用=========");
}
}
代码实现
(2)拦截器配置spring-mvc.xml
<!--利用default-servlet放行资源-->
<mvc:default-servlet-handler/> <!--配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/my/**"/>
<bean class="com.springmvc.intercept.MyIntercept"></bean>
</mvc:interceptor>
</mvc:interceptors>
代码实现
(3)MyController
@Controller
@RequestMapping("/my")
public class MyController {
@RequestMapping("/doFirst")
public String doFirst(){
System.out.println("=========控制器中的方法=========");
return "index";
}
代码实现
(4)控制台效果

3、Spring MVC的数据校验
3.1 数据校验案例
(1)导入依赖
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.1.Final</version>
</dependency>
代码实现
(2)validate.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>测试案例</title>
</head>
<body>
<form action="/my/validate" method="post">
编号:<input type="text" name="uid"/><br/>
姓名:<input type="text" name="uName"/><br/>
邮箱:<input type="text" name="email"/><br/>
电话:<input type="text" name="phone"/><br/>
身份证号:<input type="text" name="userCode"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
代码实现
(3)实体类UserInfo
package com.springmvc.entity; import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern; public class UserInfo { @NotNull(message="编号不能为空")
private Integer uid; @NotNull
@Length(min = 2,max = 8,message = "用户名不能少于2位或大于8位")
private String uName; @Email(message = "邮箱格式不正确")
private String email; @Pattern(regexp = "/^1[3456789]\\d{9}$/",message = "手机号式不正确")
private String phone; @Pattern(regexp = "/(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)/",message = "身份证号格式不正确")
private String userCode; public Integer getUid() {
return uid;
} public void setUid(Integer uid) {
this.uid = uid;
} public String getuName() {
return uName;
} public void setuName(String uName) {
this.uName = uName;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public String getPhone() {
return phone;
} public void setPhone(String phone) {
this.phone = phone;
} public String getUserCode() {
return userCode;
} public void setUserCode(String userCode) {
this.userCode = userCode;
}
}
代码实现
(4)MyController
package com.springmvc.controller; import com.springmvc.entity.UserInfo;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.RequestMapping; import javax.validation.Valid;
import java.util.List; @Controller
@RequestMapping("/my")
public class MyController {
@RequestMapping("/doFirst")
public String doFirst(){
System.out.println("=========控制器中的方法=========");
return "index";
} @RequestMapping("/validate")
public String Validate(@Valid UserInfo info, BindingResult bindingResult){
//如果有异常信息
if (bindingResult.hasErrors()){
//获取异常信息对象
List<ObjectError> allErrors = bindingResult.getAllErrors();
//将异常信息输出
for (ObjectError errors:allErrors) {
System.out.println(errors.getDefaultMessage());
}
}
return "index";
}
}
代码实现
(5)效果展示


SpringMVC拦截器和数据校验的更多相关文章
- SpringMVC的拦截器和数据校验
SpringMVC拦截器 什么是拦截器:Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理.例如通过拦截器可以 ...
- 解决SpringMVC拦截器中Request数据只能读取一次的问题
解决SpringMVC拦截器中Request数据只能读取一次的问题 开发项目中,经常会直接在request中取数据,如Json数据,也经常用到@RequestBody注解,也可以直接通过request ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十七)——SpringMVC拦截器
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7098753.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十六)--S ...
- SpringMVC之八:基于SpringMVC拦截器和注解实现controller中访问权限控制
SpringMVC的拦截器HandlerInterceptorAdapter对应提供了三个preHandle,postHandle,afterCompletion方法. preHandle在业务处理器 ...
- SpringMVC拦截器+Spring自定义注解实现权限验证
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- SpringMVC拦截器的使用
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- SpringMVC拦截器2(资源和权限管理)(作为补充说明)
SpringMVC拦截器(资源和权限管理) 1.DispatcherServlet SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServle ...
- SpringMVC拦截器Interceptor
SpringMVC拦截器(Interceptor)实现对每一个请求处理前后进行相关的业务处理,类似与servlet中的Filter. SpringMVC 中的Interceptor 拦截请求是通过Ha ...
- 五 : springMVC拦截器
springMVC拦截器的实现一般有两种方式 第一种方式是要定义的Interceptor类要实现了Spring的HandlerInterceptor 接口 第二种方式是继承实现了HandlerInte ...
随机推荐
- Android五大布局详解——FrameLayout(帧布局)
FrameLayout 这个布局相对前面两节介绍的布局就简单了很多,因此它的应用场景也就特别的少.这种布局没有方便的定位方式,所有的控件都会默认摆放在布局的左上角.新建UILayoutTestThre ...
- django的使用INNODE的方式,排除错误MySQL Strict Mode is not set for database connection 'default'
出现如下错误: 解决办法: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mxshop', 'HO ...
- n个数字相加
求s=a+aa+aaa+aaaa+aa...a的值 其中a是一个数字,多少个数字相加由键盘输入控制 a = int(input("数字:")) count = int(input( ...
- <深度学习>TensorBoard的demo
import tensorflow.compat.v1 as tf import os os.environ["CUDA_VISIBLE_DEVICES"] = "-1& ...
- 阿里云 centOS系统 配置 node + ngnix
**centOS系统可以直接使用yun命令** 安装node 1.使用git将源码克隆到本地的~/.nvm目录下,并检查最新版本.> yum install git > git clone ...
- BootStrap 关于input与btn的点击focus取消特效相关css
取消btn按钮点击出现的外边框: .btn:focus, /*清除btn按钮点击出现的边框*/.btn:active:focus,.btn.active:focus,.btn.focus,.btn:a ...
- MySQL 在 Windows 下安装教程、避坑指南
MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,2008 年被 SUN 公司收购,后 SUN 公司又被 Oracle 公司收购. 一.下载 MySQL 官网 https:/ ...
- 巧妙利用label标签实现input file上传文件自定义样式
提到上传文件,一般会想到用input file属性来实现,简单便捷,一行代码即可 但input file原生提供的默认样式大多情况下都不符合需求,且在不同浏览器上呈现的样式也不尽相同 我们往 ...
- 传统jdbc存在的问题总结
1.数据库连接创建.释放频繁造成系统资源浪费,影响系统性能,可使用数据库连接池解决此问题. 2.sql语句中在代码中硬编码,代码不易维护,sql变动需要改变java代码. 3.使用preparedSt ...
- 周会材料:高并发程序设计<一>
第一章 几个概念 同步:一次方法调用须等到其返回后才能有后续 异步:一次方法调用后在另一线程执行,调用者可不必等其返回就可进行后续 并发:任务以极短的时间交替进行 并行:任务同时进行 临界区:公共资源 ...