filter介绍:
filter主要用于对用户请求request进行预处理,和对Response进行后处理,是个典型的处理链。
详细解析起来就是:Filter对用户请求进行预处理,接着将请求HttpServletRequest交给Servlet进行处理并生成响应,最后Filter再对服务器响应HttpServletResponse进行后处理。
其实Filter也可以看做是Servlet的加强版,Filter与Servlet具有完全相同的生命周期,且Filter也可以通过<init-param>来配置初始化参数,获取Filter的初始化参数则使用FilterConfig的getInitParameter()。
Filter可负责拦截多个请求或响应;一个请求或响应也可被多个Filter拦截。
常用场合:
(1)认证Filter
(2)日志和审核Filter
(3)图片转换Filter
(4)数据压缩Filter
(5)密码Filter
(6)令牌Filter
(7)触发资源访问事件的Filter
(8)XSLT Filter
(9)媒体类型链Filter
如何创建Filter?
类似于servlet,需两步
第一步:创建Filter处理类(一般我们都用现有的)
Filter必须实现javax.servlet.Filter接口,在该接口中定义了三个方法:
(1) void init(FilterConfig config):用于Filter的初始化。FilteConfig用于访问Filter的配置信息。
(2) void destroy():Filter销毁前的操作,例如完成某些资源的回收。
(3) void doFilter(ServletRequest request,ServletResponse response,FilterChain chain):
实现过滤功能的核心方法,实现对请求request进行预处理,也可以实现对服务器响应response进行后处理---它们的分界线为是否调用了chain.doFilter(request,response),执行该方法之前,即对用户
请求request进行预处理,执行该方法之后,即对服务器响应response进行后处理。
第二步:Web.xml文件中配置Filter
Filter配置与Servlet的配置非常相似,区别在于Servlet通常只配置一个URL,而Filter可以同时配置多个请求的URL。配置Filter有两种方式:
(1). 在Filter类中通过Annotation进行配置。
(2). 在web.xml文件中通过配置文件进行配置。
这里我们使用web.xml这种配置方式,下面重点介绍<filter>内包含的一些元素。
(1).<filter-name>用来定义过滤器的名称,该名称在整个程序中都必须唯一。
(2).<filter-class>元素指定过滤器类的完全限定的名称,即Filter的实现类。
(3). <init-param>为Filter配置参数,与<context-param>具有相同的元素描述符<param-name>和<param-value>。
(4). <filter-mapping>元素用来声明Web应用中的过滤器映射,过滤器被映射到一个servlet或一个URL 模式。这个过滤器的<filter>和<filter-mapping>必须具有相同的<filter-name>,指定该Filter所拦截的URL。过滤是按照部署描述符的<filter-mapping>出现的顺序执行的。