Filter
1.Filter是一个接口,过滤器是执行过滤任务的对象,这些任务是针对对某一资源(servlet或静态内容)的请求或来自某一资源的响应执
行的,抑或同时针对这两者执行
2.过滤器的分类;
1) 验证过滤器
2) 日志记录和审计过滤器
3) 图像转换过滤器
4) 数据压缩过滤器
5) 加密过滤器
6) 标记过滤器
7) 触发资源访问事件的过滤器
8) XSL/T 过滤器
9) Mime 类型链过滤器
3.Filter创建步骤:
//1.创建一个类实现Filter接口 public class MyFilter implements Filter { //2.重写接口中方法 @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { //放行 filterChain.doFilter(servletRequest, servletResponse);//doFilter方法是真正过滤的 } @Override public void destroy() { } //3.在web.xml文件中配置 }
<filter> <filter-name>MyFilter</filter-name> <filter-class>day19_Listener_Filter.filter.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>MyFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
4.FilterChain
FilterChain是servlet容器为开发人员提供的对象,它提供了对某一资源的已过滤请求调用链的视图。过滤器使用 FilterChain 调
用链中的下一个过滤器,如果调用的过滤器是链中的最后一个过滤器,则调用链末尾的资源。
注:1)只要多个Filter对同一个资源进行拦截就可以形成Filter链
2)Filter的执行顺序由<filter-mapping>来确定
5.Filter的生命周期
当服务器启动(Servlet是在第一次初始化时),会创建Filter对象,并调用init方法,只调用一次.
当访问资源时,路径与Filter的拦截路径匹配,会执行Filter中的doFilter方法,这个方法是真正拦截操作的方法.
当服务器关闭时,会调用Filter的destroy方法来进行销毁操作.
6.FilterConfig
在Filter的init方法上有一个参数,类型就是FilterConfig,它是Filter的配置对象,servlet 容器使用的过滤器配置对象,该对象在初始化期间将信息传递给过滤器。
Method Summary:
String getFilterName()
Returns the filter-name of this filter as defined in the deployment descriptor.
String getInitParameter(String name)
Returns a String containing the value of the named initialization parameter, or null if the parameter does not exist.
Enumeration getInitParameterNames()
Returns the names of the filter's initialization parameters as an Enumeration of String objects, or an empty Enumeration
if the filter has no initialization parameters.
ServletContext getServletContext()
Returns a reference to the ServletContext in which the caller is executing.
7.Filter配置
(1)基本配置
<filter>
<filter-name>filter名称</filter-name>
<filter-class>Filter类的包名.类名</filter-class>
</filter>
<filter-mapping>
<filter-name>filter名称</filter-name>
<url-pattern>路径</url-pattern> //与servlet类似
</filter-mapping>
(2)<servlet-name>
它是对指定的servlet名称的servlet进行拦截的。
(3)<dispatcher>
它的作用是:当以什么方式去访问web资源时,进行拦截操作.(默认是request)
1).REQUEST 当是从浏览器直接访问资源,或是重定向到某个资源时进行拦截方式配置的
2).FORWARD 请求转发的拦截方式配置
3).ERROR 如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用
4).INCLUDE 如果目标资源是通过RequestDispatcher的include()方法访问时
<filter-mapping> <filter-name>MyFilter1</filter-name> <servlet-name>Demo1</servlet-name> </filter-mapping> <filter-mapping> <filter-name>MyFilter3</filter-name> <url-pattern>/*</url-pattern> <dispatcher>INCLUDE</dispatcher> <dispatcher>REQUEST</dispatcher> </filter-mapping>

浙公网安备 33010602011771号