标签:
1.什么是过滤器
过滤器是Servlet2.3规范中定义的一种小型的、可插入的Web组件。用来拦截Servlet容器的请求和响应过程,以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据。
过滤器通常是封装了一些功能的Web组件,这些功能很重要,但对于处理客户请求或发送响应来说不是决定性的。
典型的应用包括记录请求和响应的数据、管理会话属性等。
2.如何编写过滤器
1.编写一个Java类,实现Filter接口
2.在doFilter方法中实现拦截处理逻辑
3.将过滤器添加到Web程序中
4.把过滤器和Web应用一起打包部署
3.编写一个java类实现Filter接口
过滤器API有3个常用接口,位于javax.Servlet包中。
Filter、FilterChain、FilterConfig
编程中,过滤器类要实现Filter接口
该接口中包含三个必须实现的方法
void init(FilterConfig filterConfig)
void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
void destroy()
4.实现拦截处理逻辑
public class CommentFilter implements Filter{
/**创建实例后,调用init方法,只执行一次*/
public void init(FilterConfig filterConfig){//... ...}
/**容器调用doFilter方法处理请求*/
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException ServletException{\
//...
chain.doFilter(request,response);
}
/**容器删除过滤器实例之前调用该方法,只执行一次*/
public void destory(){ ... ...}
}
5.将过滤器添加到Web应用中
修改web.xml文件,增加注册过滤器的节点
<filter>
<filter-name>filter1</filter-name>
<filter-class>web.xxxServlet</filter-class>
</filter>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/xxx</url-pattern>
</filter-mapping>
6.过滤器和Web应用一起打包部署
与Web应用程序一起部署过滤器时,只需把过滤器类和其他Web组件类包括在一起,把web.xml文件(连同过滤器注册)放进Web应用程序结构中,Servlet容器将处理之后的其它所有事情
7.过滤器的优先级
如果有多个过滤器都满足过滤条件,则容器依据<filter-mapping>的先后顺序来调用各个过滤器
8.过滤器的初始化参数
容器启动之后,会创建过滤器实例
接下来,容器会调用过滤器的init方法,而容器会事先创建FilterConfig对象。该对象可以访问在web.xml文件中配置的一些参数
这些在web.xml文件中存储,由FilterConfig对象读取,在执行init方法时能够访问的参数值,叫初始化参数
通过这些初始化参数可以方便快捷的配置及修改一些辅助参数
9.初始化参数的配置
<filter>
<filter-name>filter1</filter-name>
<filter-class>web.xxxServlet</filter-class>
<!-- 初始化参数 -->
<init-param>
<param-name>illegalStr</param-name>
<param-value>xxx</param-value>
</init-param>
</filter>
10.读取初始化参数
使用FilterConfig对象可以读取在web.xml中配置的初始化参数
String config.getInitParamter("illegaStr")
11.过滤器的优点
实现代码的“可插拔性”,即增加或减少某个功能模块不会影响程序的正常执行
可以将多个相同处理逻辑的模块集中写在过滤器里面,方便代码的维护
标签:
原文地址:http://www.cnblogs.com/Crow00/p/4714059.html