关于Filter(过滤器)的源码翻译(一)

   简要的自己翻译了一下filter的源码注释,希望大神们可以不吝赐教。因为自己感觉有些地方确实不通,不够透彻。这是第一篇比较简单的只翻译了filter包含的三个方法的源码,后续还会写一些相关的源码翻译和自己的理解。例如FilterConfig,ServletRequest ,ServletResponse,FilterChain等,希望和大家共同探讨。


package javax.servlet;



import java.io.IOException;


 
/**

 * 过滤器是一个在请求资源(服务器或者静态资源),或从一个资源返回响应,或者两    者都有的过程中执行过滤任务的对象。 

 *

 *

过滤器是在doFilter 方法中执行过滤的.
 * 每个过滤器都有一个FilterConfig(过滤器配置)对象,它可以让过滤器获得初始元素  * 并且获得一个参照关于他可以使用的ServletContext。例如,加载过滤任务所需要的  * 资源。
 * 
 *

过滤器在web程序的部署描述符中配置(一般为web.XML)。
 *
 *

以下是一些过滤器例子:
 *


     *
  1. Authentication Filters(认证)
     *
  2. Logging and Auditing Filters(日志记录和审计)
     *
  3. Image conversion Filters(图像转换)
     *
  4. Data compression Filters(数据压缩)
     *
  5. Encryption Filters(加密)
     *
  6. Tokenizing Filters(令牌化)
     *
  7. Filters that trigger resource access events(触发资源访问事件的过滤器)
     *
  8. XSL/T filters(能改变XML内容)
     *
  9. Mime-type chain Filter(MIME类型链)
     *

 *
 * @since Servlet 2.3
 */


public interface Filter {


    /** 
     * 由Web容器调用,向过滤器指示它正在投入使用。
     *
     *

服务容器通过调用init()方法来实例化filter。
     * 只有在init()方法成功执行后,filter才能开始执行过滤工作。
     * 
     *

如果init()方法出现以下任何一种情况,web容器都不能将filter布置到服务上。
     *


         *
  1. 抛出ServletException异常。
         *
  2. 在web容器定义的时间内没有响应。
         *

     */
    public void init(FilterConfig filterConfig) throws ServletException;


    /**
     * 过滤器的 doFilter 方法在由于客户端请求在链末端的资源
     * 而每次通过链中传递一个请求/响应对时,被容器所调用。
     * 传递给此方法的FilterChain允许过滤器将请求和响应传递给链中的下一个实体。
     *
     *

该方法的典型实现有以下模式:
     *


         *
  1. 审查请求
         *
  2. 可以选择自定义包装的请求对象过滤内容或者头部来进行输入过滤
         *
  3. 可以选择自定义包装的响应对象过滤内容或者头部来进行输出过滤
         *

           *
    • 可以使用FilterChain对象调用链中的下一个实体
           *
    • 或者不将请求/响应对传递给过滤器链中的下一个实体以阻止请求
           *

         *
  4. 在调用过滤器链中下一个实体后直接设置响应头。
         *

     */
    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain)
            throws IOException, ServletException;





    /**
     *由网络容器调用以向过滤器指示它被停用。
     *
     *

这个方法在doFilter方法的所有线程结束或者超时以后将会被调用
     * 当web容器调用此方法后,将不能调用过滤器本次实例的doFilter方法。
     *
     *

这个方法给过滤器提供了机会以便去清除任何正在被调用的资源(例如,内          * 存,文件句柄,线程等)。
     * 并确保任何持久化状态与内存中的筛选器当前状态同步。
     */
    public void destroy();
}

你可能感兴趣的:(源码翻译,Filter源码翻译)