过滤器Filter,监听器Listener,拦截器Interceptor

过滤器Filter

概念:

Servlet过滤器是在java servlet规范2.3中定义的,他能够对servlet容器的请求和响应对象进行检查和修改。

Servlet过滤器本身并不产生请求和响应对象,他只能提供过滤作用,servlet过滤能够在servlet被调用之前检查request对象,修改request的header和request内容,在调用后检查response对象,修改response的头和内容。

Servlet过滤负责过滤的web组件可以是servlet,jsp或html文件。

特点:

过滤器可以检查和修改request和response对象

过滤器可以被指定url,当访问到该url时才会触发过滤

过滤器可以有很多个,串联使用,形成过滤器链。

作用:

查询请求并作出相应的行动

阻塞请求和响应

修改请求头和请求体,自定义请求

修改响应头和响应体,自定义响应

与外部资源进行交互

场景:

认证过滤,登录和审核过滤,加密过滤率,令牌过滤,资源访问出发事件过滤

接口构成:

过滤器都必须实现javax.servlet.Filter接口,主要有三种方法:

init方法:初始化时方法,容器启动时做读取一些初始化参数,

doFilter方法:实际进行过滤操作,具体怎么过滤,怎么修改在这里进行,

destroy方法:容器字啊销毁过滤器实例前调用的方法,可以释放资源。

Servlet过滤器对请求的过滤:

1,容器创建一个过滤实例

2,过滤器实例调用init方法,读取过滤器的初始化参数

3,过滤器实例调用doFilter方法,根据初始化参数进行判断

4,如果判断不合法就阻塞

5,如果合法就调用chain.doFilter方法将请求继续传递

Servlet过滤器的发布:
***************************************************************************************
A.发布Servlet过滤器时,必须在web.xml文件中加入<filter>元素和<filter-mapping>元素。
B.<filter>元素用来定义一个过滤器:
属性                   含义
filter-name    指定过滤器的名字
filter-class    指定过滤器的类名
init-param    为过滤器实例提供初始化参数,可以有多个
C.<filter-mapping>元素用于将过滤器和URL关联:
属性                     含义
filter-name    指定过滤器的名字
url-pattern    指定和过滤器关联的URL,为”/*”表示所有URL

拦截器Interceptor

 SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理。比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间。

 SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的。在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式:

第一种方式是要定义的Interceptor类要实现了Spring 的HandlerInterceptor 接口,或者是这个类继承实现了HandlerInterceptor 接口的类,比如Spring 已经提供的实现了HandlerInterceptor 接口的抽象类HandlerInterceptorAdapter ;

第二种方式是实现Spring的WebRequestInterceptor接口,或者是继承实现了WebRequestInterceptor的类。

过滤器和拦截器的区别:

  ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。
  ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
  ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
  ④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
  ⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

  ⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

过滤器与拦截器的顺序(先过滤再做实际的拦截操作):

1.过滤器是JavaEE标准,采用函数回调的方式进行。是在请求进入容器之后,还未进入Servlet之前进行预处理,并且在请求结束返回给前端这之间进行后期处理。

2.拦截器是被包裹在过滤器之中的。

3,

监听器Listener

Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后可以做一些必要的处理。下面将介绍几种常用的监听器,以及它们都适合运用于那些环境。 

分类及介绍:
1,ServletContextListener:用于监听WEB 应用启动和销毁的事件,监听器类需要实现javax.servlet.ServletContextListener 接口。

2,ServletContextAttributeListener:用于监听WEB应用属性改变的事件,包括:增加属性、删除属性、修改属性,监听器类需要实现javax.servlet.ServletContextAttributeListener接口。 

3,HttpSessionListener:用于监听Session对象的创建和销毁,监听器类需要实现javax.servlet.http.HttpSessionListener接口或者javax.servlet.http.HttpSessionActivationListener接口,或者两个都实现。

4,HttpSessionActivationListener:用于监听Session对象的钝化/活化事件,监听器类需要实现javax.servlet.http.HttpSessionListener接口或者javax.servlet.http.HttpSessionActivationListener接口,或者两个都实现。(没用过)

5,HttpSessionAttributeListener:用于监听Session对象属性的改变事件,监听器类需要实现javax.servlet.http.HttpSessionAttributeListener接口。  (没用过)

自己理解:过滤器是容器的一种功能,通过过滤器过滤一些url请求,然后针对特定的请求进行请求前的一些自定义处理,比如登录验证,拦截器之后再进行controller处理,处理后还可以进行拦截,针对返回请求前的一些处理,拦截器跟动态代理一样,在请求的前后可以做一些业务逻辑处理,

拦截器也是切面编程的一种实现,过滤下来的url请求做一些拦截操作。

声明:以上内容属于转载,对拦截器与过滤器概念比较模糊,所以找了几篇大神的博客进行学习,吧其中重要的转载过来,自己手写映像深刻些,保存起来防止找不到了。

转载于:https://blog.csdn.net/chenleixing/article/details/44573495

https://blog.csdn.net/jiangwei0910410003/article/details/23372847

http://elim.iteye.com/blog/1750680

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值