引言


     在最近的学习中,使用到了

filter,小编觉得我们要知其然,更要知其所以然,所以今天我们来叨叨filter……

Filter简介

     中文名字就是过滤器,所以大家可以根据他的中文名字大概的知道这个东东是干什么的。Filter技术是servlet2.3新增加的功能,大部分的jsp/servlet容器都支持。

     与servlet相似,filter是一些web应用程序组件,可以绑定到一个web应用程序中。但是Filter 不是一个servlet,它不能产生一个response,与其他web应用程序组件不同的是,filter是“链”在容器的处理过程中的。这就意味着filter会在servlet处理期之前访问一个进入的请求,并且在外发相应信息返回到客户前访问这些响应信息。这种访问使得filter可以检查并修改请求和响应的内容。


Filter放在容器结构的位置


在filter中使用redis filter left_servlet容器






     通过上图,我们可以知道,filter放在web资源之前,可以在请求抵达它所应用的web资源(可以是一个servlet、一个Jsp页面等)之前截获进入的请求,并且在它返回到客户之前截获输入请求。处于客户端与被请求的资源之间,目的是重用代码。


Filter链




     一个Filter可以负责拦截多个请求或响应,一个请求或响应也可以被多个filter拦截。Filter和AOP相似,都是面向切面的编程,可以看做是一种横切性的技术,体现了“职责连模式“。在web.xml中哪个先配置,就先调用哪个。


Filter种类




  1、用户授权的Filter: Filter 负责检查用户请求,根据请求过滤用户非法请求。

  2、日志Filter: 详细记录某些特殊的用户请求。

  3、负责解码的Filter: 包括对非标准编码的请求解码。

  4、能改变XML 内容的XSLTFilter 等。

 

Filter用处




   1、其实是对request和response请求进行了拦截。

   2、提供了一种声明式服务,具有可插拔的能力(用的时候放上去,不用的时候可以随时拿下来)。

   3、Filter只对Post请求起作用。


总结




     Filter是一个功能强大的东西,在开发初期的时候我们可以为一个web应用程序的新功能建立模型,对请求进行验证或者是其他的响应,而且还可以我们还可以在旧的代码上使用filter添加新功能。是不是很强大!