在拦截器里放入参数 controller_第四十五天SpringMVC(拦截器和过滤器)

转:https://blog.csdn.net/huyiju/article/details/83028720

1:什么是过滤器(Filter)

过滤器Filter:过滤器通过实现Filter接口,实现了过滤器的三个方法,分别是初始化方法,dofilter方法和销毁方法,随着容器的启动和销毁而初始化和销毁,依赖于servlet容器,过滤器拦截的是地址栏请求,过滤器实在进入容器后执行的servlet之前后执行,针对的在处理业务之前的操作。

chain

1.1代码实现

过滤器代码:

public 

xml配置:

<filter>

 

2:什么是拦截器

拦截器是基于Javaf反射实现的,不依赖于servlet容器,过滤器针对于contraller方法,并且能获取到所有的类,对类里面所有的方法实现拦截,粒度更小,拦截器中可以注入service,也可以调用业务逻辑

2.1代码实现

拦截器1:

//拦截器1

拦截器2:

//拦截器2

springxml配置:

<!--拦截器注册 -->

 

xml配置:

<!-- 方法一:这种方式默认读取WEB-INF下的(servlet-name)+(-servlet.xml)   springmvc-servlet.xml并且名字是固定的 -->

 

3:拦截器于过滤器对比

两者都是AOP编程思想的实现,都能够实现权限控制和日志记录等问题的处理,但是两者粒度不同拦截对象不一样

适用范围不同:Filter是servlet的规范,只能用于web程序,但是拦截器可以用于application等程序。

规范不同:Filter是servlet的规范。但是Interceptor是spring容器支撑,有spring框架支持。

使用资源不一样:spring的拦截器由于依赖spring,也是spring的一个组件,因此能够在拦截器中使用spring的任何资源和对象。例如service对象,数据源,事务管理等,通过ioc注入拦截器即可,而filter不能

粒度不同:Filter只能在servlet的前后起作用,而拦截器能在方法前后异常前后执行,更加灵活,粒度更小,spring框架程序优先使用拦截器。

4:案例执行图

v2-b29d610ec12aa4669112bf8f322a339f_b.jpg

v2-ece442ff07e3b68f155f705c943d237c_b.jpg

执行结果如下:

/*
0:过滤器1的初始化方法
1:过滤器1,客户端向Servlet发送的请求被我拦截到了
2:拦截器1的前置方法 preHandle
3:拦截器2的前置方法 preHandle
4: controller主方法
5:拦截器2的后置方法postHandle(在controller主方法执行之后执行)
6:拦截器1的后置方法postHandle(在controller主方法执行之后执行)
7:拦截器2的完成后方法afterCompletion(在DispatcherServlet处理完请求后,才会执行)
8:拦截器1的完成后方法afterCompletion(在DispatcherServlet处理完请求后,才会执行)
9:过滤器1,Servlet向客户端发送的响应被我拦截到了
10:过滤器的销毁方法
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值