一、过滤器的生命周期与常用方法
1、过滤器的生命周期
过滤器的生命周期分为四个阶段:实例化、初始化、过滤和销毁:
实例化: 在web.xml文件中声明一个过滤器,这就是实例化!
初始化: 在实例化后,服务器会调用所写的java类中的init方法.
过滤:在初始化后调用doFilter()方法,不管时响应还是请求都进行过滤!
最后,当服务器停止时,对过滤器销毁,调用destory() 方法
2、过滤器的常用方法
从上面对过滤器的生命周期的分析中可以看到,过滤器最常用的方法有三个:init()、doFilter()和destory()。
1)init()方法:这是过滤器的初始化方法,在Web容器创建了过滤器实例之后将调用这个方法进行一些初始化的操作,这个方法可以读取web.xml中为过滤器定义的一些初始化参数。
2)doFilter()方法:这是过滤器的核心方法,会执行实际的过滤操作,当用户访问与过滤器关联的URL时,Web容器会先调用过滤器的doFilter方法进行过滤。
3)destory()方法:这是Web容器在销毁过滤器实例前调用的方法,主要用来释放过滤器的资源等。
二、第一个过滤器实例
首先,创建一个java类,让继承Filter,实现init方法,doFilter,destory方法!
public class LogFiler implements Filter { public void init(FilterConfig filterConfig) throws ServletException { String initParameter = filterConfig.getInitParameter("test-param"); System.out.print(initParameter); } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { String remoteAddr = servletRequest.getRemoteAddr(); System.out.print("ip:" + remoteAddr+""+new Date().toString()); filterChain.doFilter(servletRequest,servletResponse); } public void destroy() { } }
doFilter()方法中FiterChain.doFilter()方法表示将请求传给下一个过滤器或目标资源,当过滤器收到响应之后再执行FilterChain.doFilter()之后的内容。
定义了过滤器之后需要在web.xml文件中进行声明,过滤器在web.xml文件中的配置可以参考下图(转载于网络)
下面是我在web.xml文件中的配置,当用户请求URL就会触发过滤器!
<filter> <filter-name>LogFiler</filter-name> <filter-class>LogFiler</filter-class> <init-param> <param-name>test-param</param-name> <param-value>Initialization Paramter</param-value> </init-param> </filter> <filter-mapping> <filter-name>LogFiler</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>