小结:
一.过滤器整个生命周期:
1.实例化阶段:启动容器,会自动加载web.xml文件的过滤器配置信息,然后自动实例化过滤器对象
2.初始化阶段:实例化对象后,会引入初始化信息配置,对应方法:init(FilterConfig filterConfig)
3.过滤器处理请求和响应阶段:通过url访问服务器资源时,首先进入过滤器的方法:doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain);在该方法里,可以通过filterChain.doFilter(servletRequest,servletResponse)方法放行请求
4.进入Servlet的Web资源
5.服务器响应信息经过过滤器doFilter方法里filterChain.doFilter之后的代码,处理响应信息。
6.如果关闭容器,会执行过滤器的destroy方法,释放过滤器资源,销毁过滤器。
小案例:
/**
*一个过滤器类
*/
public class FirstFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init-----------初始化");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("doFilter-------------过滤处理1");
filterChain.doFilter(servletRequest, servletResponse);
System.out.println("doFilter-------------过滤处理2");
}
@Override
public void destroy() {
System.out.println("destroy--------------释放过滤器资源,销毁过滤器");
}
}
<filter>
<filter-name>firstFilter</filter-name>
<filter-class>com.cald.filter.FirstFilter</filter-class>
<init-param>
<param-name>username</param-name>
<param-value>pengjun</param-value>
</init-param>
</filter>
<filter-mapping> //映射配置
<filter-name>firstFilter</filter-name>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
再写第二个完全类似的过滤器类和filter配置信息
如果配置信息<url-pattern>完全相同,则两个过滤器的处理对象是一样的,会根据web.xml书写顺序执行