SpringMVC总结四:拦截器简单介绍
2024-08-27 03:31:28
首先要说一下HandlerExecutionChain:
HandlerExecutionChain是一个执行链,当用户的请求到达DispatcherServlet的时候,DispatcherServlet会到HandlerMapping中查找对应的Handler,找到后返回的就是这个:HandlerExecutionChain,里面包含了:
1) 正确的Handler对象
2) Handler的拦截器集合,这里的拦截器对象是:HandlerInterceptor
HandlerInterceptor接口中有三个方法:
preHandle:预处理回调方法,在Handler执行前执行,第三个参数为处理器(Controller 实现);
返回值:true 表示继续流程(如调用下一个拦截器或处理器);
false 表示流程中断(如登录检查失败),不会继续调用其他的拦截器或处理器; postHandle :后处理回调方法,实现处理器的后处理(但在渲染视图之前) afterCompletion: :整个请求处理完毕回调方法,即在视图渲染完毕时回调
我们自定义拦截器的时候需要实现HandlerInterceptor接口。
拦截器的执行顺序:
异常中断流程:
简单实现案例:
自定义两个拦截器:
public class MyInterceptor1 implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("*********拦截器1的前置处理方法");
return true;//这里如果return false 流程就中断不再继续往下执行controller了
} @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("*********拦截器1的后置处理方法");
} @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("*********拦截器1的 完成后 处理方法");
}
}
public class MyInterceptor2 implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("*********拦截器2的前置处理方法");
return true;//这里如果return false 流程就中断不再继续往下执行controller了
} @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("*********拦截器2的后置处理方法");
} @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("*********拦截器2的 完成后 处理方法");
}
}
springmvc配置文件中配置自定义拦截器:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <!--HandlerMapping和HandlerAdapter-->
<mvc:annotation-driven/>
<!--扫描controller-->
<context:component-scan base-package="zy.com.controller"/>
<!--视图解析器 viewResolver-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/views/"></property>
<!--后缀-->
<property name="suffix" value=".jsp"></property>
</bean> <!--配置拦截器-->
<mvc:interceptors>
<!--方式一 拦截controller所有方法-->
<bean class="zy.com.interceptor.MyInterceptor1"></bean>
<!--方式二 配置拦截指定controller方法-->
<mvc:interceptor>
<mvc:mapping path="/test/jsonView.do"/>
<bean class="zy.com.interceptor.MyInterceptor2"></bean>
</mvc:interceptor>
</mvc:interceptors>
</beans>
运行结果:
访问/test/jsonView.do(两个拦截器都起作用):
访问其他的controller方法(只有拦截器1起作用):
最新文章
- Windows - 性能监控之磁盘剩余空间大小警报
- 升级java8---from centos
- 【Android】不使用WebView来执行Javascript脚本(Rhino)
- c#开发Mongo笔记第三篇
- [tp3.2.1]数据模型 - 简单的模型连接
- juce: 跨平台的C++用户界面库
- DML
- ubuntu12.04 安装 opencv 2.4.8(非源代码编译)
- leetcode medium
- VS调试再次遭遇“应用程序中断模式”问题,附解决方法
- logback 按时间和大小生成日志不生效的问题
- 什么是JavaScript原型
- centos7进入单用户模式
- (笔记)ubuntu下安装jdk
- 2015-10-13 jQuery5实例
- JMeter处理返回结果unicode转码为中文
- django外键以及主表和子表的相互查询
- C++ const 和static的总结以及使用
- mpstat命令详解
- hadoo异常——org.apache.hadoop.security.UserGroupInformation: PriviledgedActionException
热门文章
- [置顶]
 Android 关于ToolBar分分钟玩死自己?
- Android 进阶8:进程通信之 Binder 机制浅析
- OpenGL ES 2: debugging, and improvements to VAO, VBO
- 推荐使用typora
- animal farm 第一章阅读笔记
- 牛顿方法的简单MATLAB编程示意
- Xcode7 修改项目名完全攻略
- Django-rest-framework多条件查询/分页/多表Json
- Ubantu 新建用户后没有生成对应文件夹
- cors,跨域资源共享,Java配置