SSM(spring mvc+spring+mybatis)学习路径——2-2、spring MVC拦截器
目录
SSM学习路径分为4个阶段
- 战斗伊始——Spring
- 转战阵地——SpringMVC
- 再下一城——MyBatis
- 终极目标——整合案例
转战阵地——SpringMVC
2-2 Spring MVC拦截器
第一章 概述
1. 课程内容
- 了解拦截器
- 掌握Spring mvc拦截器的原理和使用
- 掌握Spring mvc拦截器的使用场景
- Spring mvc拦截器的对比和总结
2. 什么是拦截器?
- 拦截器是指通过统一拦截从浏览器发往服务器的请求来完成功能的增强
sequenceDiagram
浏览器->>服务器: 请求数据
服务器->>浏览器: 返回数据
- 使用场景:解决请求的共性问题(如:乱码问题、权限验证问题等)
第二章 Spring mvc拦截器的实现
2-1 拦截器的工作原理
- Spring mvc可以通过配置过滤器来解决乱码问题
- 拦截器的工作原理和过滤器非常相似
2-2 拦截器的实现
- 编写拦截器类实现
HandlerInterceptor
接口 - 将拦截器注册到Spring mvc框架中
<mvc:interceptors>
<bean class="com.springmvc.test.interceptor.Test1Interceptor"/>
</mvc:interceptors>
- 配置拦截器的拦截规则
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/viewAll.form"/>
<bean class="com.springmvc.test.interceptor.Test1Interceptor"/>
</mvc:interceptor>
</mvc:interceptors>
2-3 拦截器的方法介绍
preHandle方法,在请求被处理之前进行调用
返回值:表示我们是否需要将当前的请求拦截下来
如果返回false,请求将被终止
如果返回true,请求会被继续执行- postHandle方法,在请求被处理之后进行调用
afterCompletion方法,在请求结束之后才进行调用
2-4 多个拦截器应用
多个拦截器可以想象成从A到B经过2个收费站。假设A开车到B,先后经过收费站1和收费站2,此时依次执行收费站1的preHandle方法和收费站2的preHandle方法。从B回到A,依次经过收费站2和收费站1,依次执行收费站2的postHandle方法和收费站1的postHandle方法,然后收费站寄来发票,因为回来是先经过的收费站2,所以理论上是收费站2的发票先出来,所以依次执行收费站2的afterCompletion和收费站1的afterCompletion
2-5 拦截器的其他实现方式
拦截器的类还可以通过实现WebRequestInterceptor接口来编写,向Spring mvc框架注册的写法不变
弊端:preHandle方法没有返回值,不能终止请求
第三章 拦截器的使用场景
使用原则:处理所有请求的共同问题
- 解决乱码问题
- 解决权限验证问题
第四章 拦截器和过滤器的对比
- 过滤器Filter依赖于Servlet容器,基于回调函数,过滤范围大
- 拦截器Interceptor依赖于框架容器,基于反射机制,只过滤请求
总结:
- 拦截器可以处理web应用中请求的一些通用性问题
- 共性问题在拦截器中处理,可以减少重复代码,便于维护
SSM(spring mvc+spring+mybatis)学习路径——2-2、spring MVC拦截器的更多相关文章
- SSM(spring mvc+spring+mybatis)学习路径——2-1、spring MVC入门
目录 2-1 Spring MVC起步 一.回顾Servlet 二.SpringMVC简介 三.搭建SpringMVC第一个案例 四.简单流程及配置 五.使用注解开发Controller 六.参数绑定 ...
- SSM(spring mvc+spring+mybatis)学习路径——1-1、spring入门篇
目录 1-1 Spring入门篇 专题一.IOC 接口及面向接口编程 什么是IOC Spring的Bean配置 Bean的初始化 Spring的常用注入方式 专题二.Bean Bean配置项 Bean ...
- SSM(spring mvc+spring+mybatis)学习路径——1-2、spring事务管理
目录 1-2 Spring事务管理 概念介绍 事务回顾 事务的API介绍 Spring 事务管理 转账案例 编程式事务管理 声明式事务管理 使用XML配置声明式事务 基于tx/aop 使用注解配置声明 ...
- myBatis学习笔记(10)——使用拦截器实现分页查询
1. Page package com.sm.model; import java.util.List; public class Page<T> { public static fina ...
- MyBatis学习系列三——结合Spring
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring MyBatis在项目中应用一般都要结合Spring,这一章主要把MyBat ...
- Spring Boot 2+gRPC 学习系列1:搭建Spring Boot 2+gRPC本地项目
Spring Boot 2+gRPC 学习系列1:搭建Spring Boot 2+gRPC本地项目 https://blog.csdn.net/alinyua/article/details/8303 ...
- MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)
前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...
- MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则)
前言:上篇介绍了下自己的MVC框架前两个版本,经过两天的整理,版本三基本已经完成,今天还是发出来供大家参考和学习.虽然微软的Routing功能已经非常强大,完全没有必要再“重复造轮子”了,但博主还是觉 ...
- MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)
前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个 ...
随机推荐
- [Swift通天遁地]七、数据与安全-(14)使用单元测试进行邮箱格式的验证
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Akka源码分析-Remote-网络链接
上一篇博客中,我们分析了Akka remote模式下消息发送的过程,但细心的读者一定发现没有介绍网络相关初始化.创建链接.释放链接的过程,本文就介绍一下相关的内容. 网络初始化就离不开ActorSys ...
- Android源码下载方法
1. 下载 repo 工具 mkdir ~/bin PATH=~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/re ...
- 附加数据库错误代码 - 5120【MSSQL】
解决方法 数据库所在的文件夹右击打开属性 - 安全 - 给予Authenticated Users用户完全控制权限.然后再附加一次即可成功.
- [ BZOJ 2134 ] 单选错位
\(\\\) \(Description\) 一共\(N\)道题目,第\(i\)道题有\(A_i\)个选项,现在有一个人做完了所有题目,但将每一道题的答案都写到了下一道题的位置\((\)第\( ...
- python框架之虚拟环境的配置
在开发过程中,往往同一台电脑要开发不同的项目,不同的项目可能需要不同版本的包,为了解决这个问题就引出了虚拟环境. 配置虚拟环境: 1.安装虚拟环境: sudo pip3 install virtual ...
- Java Web框架前景浅析
基于三(多)层架构模式,典型WEB系统的总体架构如下图所示: 在上述分层架构中,整个应用被划分为两大部分: 客户端:基于浏览器提供信息展现.用户交互等功能.所采用的技术主要有:HTML/HTML5.J ...
- CSS——轮播图中的箭头
注意事项: 1.定位中left权重比right高,top权重比bottom高 2.两个span标签嵌套在一个盒子中,将来显示隐藏只需要控制父盒子就行了 <!DOCTYPE html> &l ...
- C# 获得Properties下的定义的资源
var str1 = Properties.Resources.ResourceManager.GetObject("String1", null); string url = S ...
- CPU重要性能参数
内容来自http://www.360doc.com/content/18/1124/15/60810319_796935567.shtml CPU有几个重要的参数:主频.核心.线程.缓存.架构.那么他 ...