package javax.servlet;
import java.io.IOException;
/**
* 目的:过滤器初始化并执行过滤
*
* <p>一个过滤器执行请求或响应或请求+响应的过滤任何资源
*
* <p>过滤器过滤是在doFilter()方法执行,每一个过滤器将访问FilterConfig对象的
* 初始化参数,并使用ServletContext。例如:加载资源时进行过滤。
*
* <p>过滤器在web的工程配置文件中进行配置,如以下过滤:
* Authentication Filters(身份验证过滤)
* Logging and Auditing Filters(登录和审查过滤)
* Image conversion Filters(图像转换过滤)
* Data compression Filters(数据压缩过滤)
* ...
* @author TCM
* @create 2017年10月24日下午4:13:28
* @since Servlet 2.3
*/
public interface Filter {
/**
* web容器调用过滤器才会进入service。
*
* servlet容器在过滤器实例化后调用init()。过滤器执行任何过滤功能之前,必须
* 成功完成init()。若是抛出异常或超时,不能执行过滤。
*/
public void init(FilterConfig filterConfig) throws ServletException;
/**
* 过滤器执行doFilter()方法,每一次请求/响应对获取的资源都是执行过滤后的资源。
* 执行该过滤后,请求和响应都会进入FilterChain中的下一个过滤器。
*
* 典型应用:
* 检查请求,过滤请求体和请求头,过滤响应体和响应头
*
* 当前过滤添加到过滤链中:chain.doFilter()
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException;
/**
* web容器退出service后,调用该方法销毁过滤器实例
*
* 所有线程的过滤器完成doFilter()或超时之后,仅执行一次该方法。
* web容器执行该方法后,过滤器实例不能调用doFilter()。
*
* 该方法执行,是清空任何资源(内存,文件,线程等)。确保内存中固定状态与
* 过滤器当前状态同步。
*/
public void destroy();
}
package javax.servlet;
import java.io.IOException;
/**
* 目的:过滤器调用FilterChain调用链中的下一个过滤器,
* 即:两个过滤器通过FilterChain对象链接
* @author TCM
* @create 2017年10月24日下午4:56:56
* @see Filter
* @since Servlet 2.3
*/
public interface FilterChain {
/**
* 调用链调用下一个过滤器。如果是链中的最后一个过滤器,则调用资源
* @param request 请求沿着链传递
* @param response 响应沿着链传递
*/
public void doFilter ( ServletRequest request, ServletResponse response )
throws IOException, ServletException;
}
package javax.servlet;
import java.util.Enumeration;
/**
* 目的:获取配置文件中对过滤器的初始化参数
* @author TCM
* @create 2017年10月24日下午5:15:59
* @see Filter
* @since Servlet 2.3
*/
public interface FilterConfig {
/**
* 获取过滤器名称
* web.xml配置文件中的<filter-name>
*/
public String getFilterName();
/**
* 获取{@link ServletContext}对象
* @see ServletContext
*/
public ServletContext getServletContext();
/**
* 获取过滤器初始化参数
* web.xml文件中的<filter>下的<init-param>
*/
public String getInitParameter(String name);
/**
* 过滤器的所有参数
*/
public Enumeration<String> getInitParameterNames();
}