美文网首页
JavaWeb学习笔记 | Filter

JavaWeb学习笔记 | Filter

作者: 一颗白菜_ | 来源:发表于2019-07-31 19:51 被阅读0次

1. Filter简介

  1. Filter的基本功能是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理的前后实现一些特殊的功能。
  2. 在Servlet API中定义了三个接口类来供开发人员编写Filter程序:Filter,FilterChain,FilterConfig
  3. Filter程序是一个实现了Filter接口的Java类,与Servlet程序相似,它由Servlet容器进行调用和执行
  4. Filter程序需要在Web.xml文件中进行配置和映射
  5. 与开发Servlet不同的是,Filter接口并没有相应的实现类可供继承,要开发过滤器,只能直接实现Filter接口

2. 创建一个Filter的过程

  1. 创建一个Filter类,实现Filter接口
  2. 在web.xml文件中配置并映射该Filter类,其中url-pattern指定该Filter可以拦截哪些资源,即可以通过哪些url访问到该Filter

配置的demo:

<!-- 注册Filter -->
<!-- 可以注册和映射多个Filter-->
<filter>
    <filter-name>HelloFilters</filter-name>
    <filter-class>HelloFilter</filter-class>
</filter>
<!-- 映射Filter -->
<filter-mapping>
    <filter-name>HelloFilters</filter-name>   
    <!-- 要拦截的资源 -->
    <url-pattern>/test.jsp</url-pattern>
</filter-mapping>

3. 相关API

(1).init:类似于Servlet的init方法,在创建Filter对象(Filter对象在Servlet容器加载当前WEB应用时即被创建)后,立即被调用,且==只被调用一次==。该方法用于对当前的Filter进行初始化操作。Filter实例是单例的

//FilterConfig类似于ServletConfig,可以在web.xml文件中配置当前 Filter的初始化参数,配置方式也和Servlet类似
public void init(FilterConfig filterConfig);

在web.xml中配置当前Filter的初始化参数实例如下:

<filter>
    <filter-name>HelloFilters</filter-name>
    <filter-class>HelloFilter</filter-class>
    <init-param>
        <param-name>name</param-name>
        <param-value>root</param-value>
    </init-param>
</filter>

(2).doFilter:真正Filter的逻辑代码需要编写在该方法中,每次拦截都会调用该方法

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain);
    
//FilterChain接口:
//Filter链,多个Filter可以构成一个Filter链
//FilterChain有一个方法:doFilter(ServletRequest request,ServletResponse response):把请求传给Filter链的下一个
//若当前Filter是Filter链的最后一个Filert,则把请求给到目标Servlet(或JSP)
    
//多个Filter拦截的顺序和与他们在应用程序的web.xml中映射的顺序一致(靠前的先被拦截)

demo:

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
     System.out.println("do");

     //把请求传给Filter链的下一个,如果是最后一个,则把请求给到目标Servlet(或JSP)
     filterChain.doFilter(servletRequest,servletResponse);
}

(3). destroy:释放当前Filter所占用的资源的方法,在Filtet被销毁之前被调用,且只被调用一次。

public void destroy();

相关文章

网友评论

      本文标题:JavaWeb学习笔记 | Filter

      本文链接:https://www.haomeiwen.com/subject/pqkxdctx.html