关系
Filter过滤器
对Servlet容器调用Servlet过程的拦截,从而对Servlet的请求、响应前后实现一些特殊的功能。
Filter链。
浏览器–>请求–>服务器【–>Filter1–>Filter2–>资源】
浏览器<–响应<–服务器【<–Filter1<–Filter2<–资源】
Filter的拦截顺序和web.xml中元素的映射顺序一致。
创建Filter
实现Filter接口,重写方法
生命周期
Filter的三个方法init(FilterConfig config)、doFilter()、destroy()就是Filter的生命周期。
- destroy()只调用一次。在web服务卸载Filter对象之前被调用,该方法用于释放被Filter对象打开的资源,例如关闭数据库和IO流。
- init(FilterConfig config)只调用一次初始化过滤器。可以在此方法中完成于构造方法类似的初始化功能。如果初始化代码使用到FilterConfig对象,则初始化代码只能在此方法中书写。
- 配置文件
- init方法读取配置文件
- doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)。参数req和resp是Web服务器或者上一个过滤器传递过来的请求响应对象。参数chain是当前FilterChain的对象。只有chain调用其doFilter()方法,才能把过滤后的请求响应传递给下一个过滤器或者目标程序。俗称,放行。
拦截不同方式的请求
在web.xml配置文件中。一个配置一个Filter所拦截的资源。其有一个特殊的子元素用于指定过滤器所拦截资源被Servlet容器调用的方式。它的值有四个。
-
REQUEST:当客户端直接访问页面时,会调用该过滤器。当通过RequestDispatcher的inculde()和forward()方法访问时,则不会被调用。
-
INCLUDE:同过RequestDispatcher的inculde()方法访问时,被调用。除此之外,不会被调用
-
FORWARD:同过RequestDispatcher的forward()方法访问时,被调用。除此之外,不会被调用
-
ERROR:目标是通过声明式异常处理机制调用时,被调用。除此之外,不会被调用。
Lisener监听器
(后续总结… …)