Servlet之Filter

Filter是Servlet规范定义的。实现一般是容器,如Tomcat。

  • Filter设计主要有三个接口,Filter,FilterChain,FilterConfig。
  • Filter是FilterChain和FilterConfig的使用者、管理者。
  • Filter需要有注册动作才能被容器识别到,一旦容器启动,Filter数量、类型、顺序就是确定了的。
  • Filter的注册方式有2种,一种是使用@WebFilter("/user"),一种是在web.xml中配置标签。
  •  
package javax.servlet;

import java.io.IOException;

public interface Filter {
    // 初始化方法,容器创建Filter对象后,立即调用init方法,整个生命周期中只执行一次。
    // 在init方法成功(失败如抛异常等)执行完前,不能提供过滤服务。
    // 参数FilterConfig用于获取初始化参数
    public default void init(FilterConfig filterConfig) throws ServletException {}

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

    public default void destroy() {}
}
package javax.servlet;

import java.io.IOException;

public interface FilterChain {

    public void doFilter(ServletRequest request, ServletResponse response)
            throws IOException, ServletException;

}
package javax.servlet;

import java.util.Enumeration;

public interface FilterConfig {

    public String getFilterName();

    public ServletContext getServletContext();

    public String getInitParameter(String name);

    public Enumeration getInitParameterNames();

}

 我们需要理解的有2点,一是你定义的Filter是如何被Tomcat扫描到的,二是FilterChain是如何生成的。

 

你可能感兴趣的:(Servlet,Web)