1.过滤器的意义
2.生命周期
3.在web.xml中如何注册一个过滤器
4.过滤器链对象
5.过滤器初始化信息
1.过滤器的意义:根据URL分析要过滤什么样的请求
所谓过滤,就是在真正请求资源之前将代表请求的request对象和代表响应的response对象截获,从而实现在执行资源之前和之后做一些额外的控制和操作。
2.生命周期:
服务器启动,web应用加载,创建这个web应用的所有过滤器。
创建好后调用init()方法执行初始化操作。
然后一直驻留在内存中为后续的拦截进行服务,每次拦截到请求调用doFilter()方法执行。
在服务器关闭或者web应用被移除出容器时,随着web应用的销毁过滤器对象销毁,销毁前调用destroy()方法善后。
3.在web.xml中如何注册一个过滤器
<filter>
<filter-name>demo</filter-name>
<filter-class>filter.demo</filter-class>
</filter>
<filter-mapping>
<filter-name>demo</filter-name>
<url-pattern>/session</url-pattern>
<servlet-name>session1</servlet-name>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
注:
一个<filter-mapping>可以有多个<url-pattern>
一个<filter-mapping>可以有多个<servlet-name>,其实内容是明确的要拦截的servlet
<dispatcher>配置拦截哪种方式的对资源的访问,可以是REQUEST/ERROR/FORWARD/INCLUDE,默认是REQUEST,可以配置多个<dispatcher>
4.过滤器链对象:FilterChain
一个资源可能被多个过滤器过滤,这些过滤器按照在<filter-mapping>中的配置顺序组成一个过滤器链对象。过滤器链对象的最后一个节点一个是要访问的资源。过滤器的各个节点提供了doFilter()方法,一旦这个方法调用,说明当前过滤器节点没问题可以执行下一个节点,如果下一个节点就是资源则直接执行资源。
chain.doFilter(request,response);
当两个过滤器都进行了过滤,过滤结果为:
demo1前,demo2前,资源,demo2后,demo1后
5.过滤器初始化信息
<filter>
<init-param>
<param-name>name1</param-name>
<param-value>value1</param-value>
</init-param>
</filter>
注:可用FilterConfig获取初始化信息
String value = filterConfig.getInitParameter("name1");
注:filterConfig对象还可以获取ServletContext对象
filterConfig.getServletContext();