Filter
过滤器(Filter)也称之为拦截器,是Servlet 2.3 规范新增的功能,在Servlet 2.4 规范中得到增强。
Filter是Servlet技术中非常实用的技术,Web开发人员通过Filter技术,可以在用户访问某个Web资源之前,对访问的请求和响应进行拦截,从而实现一些特殊功能。
过滤器的运行原理:
预处理:当用户的请求到达指定的网页之前,可以借助过滤器来改变这些请求的内容
后处理:当执行结果要响应到用户之前,可经过过滤器修改响应输出的内容
运行过程分为以下几个步骤:
1.Web容器判断接收的请求资源是否有与之匹配的过滤器,如果有,容器将请求交给相应过滤器进行处理。
2.在过滤器预处理过程中,可以改变请求的内容,或者重新设置请求的报头信息,然后将请求发给目标资源。
3.目标资源对请求进行处理后作出响应。
4.容器将响应转发回过滤器。
5.在过滤器后处理过程中,可以根据需求对响应的内容进行修改。
6.Web容器将响应发送回客户端。
过滤器链
在一个Web应用中,也可以部署多个过滤器,这些过滤器组成了一个过滤器链。
过滤器链中的每个过滤器负责特定的操作和任务,客户端的请求可以在这些过滤器之间进行传递,直到达到目标资源。
例如,一个由两个Filter所组成的过滤器链的过滤过程:
在客户端的请求响应过程中,并不需要经过所有的过滤器链,而是根据过滤器链中每个过滤器的过滤条件来匹配需要的过滤资源。
与开发Servlet需要实现Servlet接口类似,开发Filter要实现javax.servlet.Filter接口,并提供一个公共的不带参数的构造方法。
生命周期分为四个阶段:
加载和实例化
初始化
doFilter()方法的执行
销毁
应用情况:
1.做统一的认证处理
2.对用户的请求进行检查和更精确的记录
3.监视或对用户所传递的参数做前置处理,例如:防止数据注入攻击
4.改变图像文件的格式
5.对请求和响应进行编码
6.对响应做压缩处理
7.对XML的输出使用XSLT来转换