简要的自己翻译了一下filter的源码注释,希望大神们可以不吝赐教。因为自己感觉有些地方确实不通,不够透彻。这是第一篇比较简单的只翻译了filter包含的三个方法的源码,后续还会写一些相关的源码翻译和自己的理解。例如FilterConfig,ServletRequest ,ServletResponse,FilterChain等,希望和大家共同探讨。
package javax.servlet;
import java.io.IOException;
/**
* 过滤器是一个在请求资源(服务器或者静态资源),或从一个资源返回响应,或者两 * 者都有的过程中执行过滤任务的对象。
*
* <p>过滤器是在<code>doFilter</code> 方法中执行过滤的.* 每个过滤器都有一个FilterConfig(过滤器配置)对象,它可以让过滤器获得初始元素 * 并且获得一个参照关于他可以使用的ServletContext。例如,加载过滤任务所需要的 * 资源。
*
* <p>过滤器在web程序的部署描述符中配置(一般为web.XML)。
*
* <p>以下是一些过滤器例子:
* <ol>
* <li>Authentication Filters(认证)
* <li>Logging and Auditing Filters(日志记录和审计)
* <li>Image conversion Filters(图像转换)
* <li>Data compression Filters(数据压缩)
* <li>Encryption Filters(加密)
* <li>Tokenizing Filters(令牌化)
* <li>Filters that trigger resource access events(触发资源访问事件的过滤器)
* <li>XSL/T filters(能改变XML内容)
* <li>Mime-type chain Filter(MIME类型链)
* </ol>
*
* @since Servlet 2.3
*/
public interface Filter {
/**
* 由Web容器调用,向过滤器指示它正在投入使用。
*
* <p>服务容器通过调用init()方法来实例化filter。
* 只有在init()方法成功执行后,filter才能开始执行过滤工作。
*
* <p>如果init()方法出现以下任何一种情况,web容器都不能将filter布置到服务上。
* <ol>
* <li>抛出ServletException异常。
* <li>在web容器定义的时间内没有响应。
* </ol>
*/
public void init(FilterConfig filterConfig) throws ServletException;
/**
* 过滤器的<code> doFilter </ code>方法在由于客户端请求在链末端的资源
* 而每次通过链中传递一个请求/响应对时,被容器所调用。
* 传递给此方法的FilterChain允许过滤器将请求和响应传递给链中的下一个实体。
*
* <p>该方法的典型实现有以下模式:
* <ol>
* <li>审查请求
* <li>可以选择自定义包装的请求对象过滤内容或者头部来进行输入过滤
* <li>可以选择自定义包装的响应对象过滤内容或者头部来进行输出过滤
* <ul>
* <li>可以使用FilterChain对象调用链中的下一个实体
* <li>或者不将请求/响应对传递给过滤器链中的下一个实体以阻止请求
* </ul>
* <li>在调用过滤器链中下一个实体后直接设置响应头。
* </ol>
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException;
/**
*由网络容器调用以向过滤器指示它被停用。
*
* <p>这个方法在doFilter方法的所有线程结束或者超时以后将会被调用
* 当web容器调用此方法后,将不能调用过滤器本次实例的doFilter方法。
*
* <p>这个方法给过滤器提供了机会以便去清除任何正在被调用的资源(例如,内 * 存,文件句柄,线程等)。
* 并确保任何持久化状态与内存中的筛选器当前状态同步。
*/
public void destroy();
}