首页 servlet

Filter

过滤器

过滤器是一个对象,他对资源(Servlet或静态内容)的请求或对资源的响应或两者都执行过滤任务。

过滤器在doFilter方法中执行过滤,每个过滤器都可以访问一个FilterConfig对象,从中获取其初始话参数,还可以访问ServletContext

Web.xml中进行配置过滤器

// 源码:
package javax.servlet;

import java.io.IOException;

public interface Filter {
    void init(FilterConfig filterConfig) throws ServletException;

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

    void destroy();
}
init

Web容器调用以指示过滤器已投入使用。实例化过滤器后,servlet容器只调用一次init方法。在要求过滤器执行任何过滤工作之前,init方法必须执行完毕。

如果抛出ServletException或在Web容器定义阶段,init不会执行完毕

参数:

filterConfig:于正在初始化的过滤器实例相关联的配置信息

抛出:

ServletException:初始化失败

doFilter

每次客户端对chain末端的资源发出请求或响应对时,容器都会调用FilterdoFilter方法,传如此方法的FIlterChain允许Filter将请求和响应传递给链中的下一个实体。

实现顺序:

  1. 检查请求
  2. (可选)使用自定义实现包装请求对象,以过滤内容或标头以进行输入过滤
  3. (可选)使用自定义实现包装响应对象,以过滤内容或表头以进行输出过滤
  4. 使用FilterChain对象调用Chain中的下一个实体或不将响应或请求传递给下一个实体以阻止请求处理
  5. 调用FilterChain中的下一个实体后,直接在响应上设置标头。
参数:

requset:处理请求

response:于请求关联的响应

chain:提供对该Chain中下一个过滤器的访问,以使该过滤器将请求和响应传递并做进一步的处理

抛出:

IOException:期间发生I/O异常

ServletException:由于其他原因而失败

destroy

Web容器调用以指示过滤器已经停止使用,仅在过滤器的doFilter方法中的所有线程都已经退出或超过时间后才调用。

总的来说就和之前的都一样。

FilterChain

Servlet容器提供给开放人员的一个对象,提供了对资源的已过了请求的调用链的视图。过滤器通过FilterChain调用下一个过滤器

// 源码:
package javax.servlet;

import java.io.IOException;

public interface FilterChain {
    void doFilter(ServletRequest requset, ServletResponse response) throws IOException, ServletException;
}
doFilter

调用Chain中的下一个过滤器,或者如果是最后一个过滤器,调用Chain末端的资源

参数:

requset:沿Chain传递的请求

response:沿Chain传递的响应

抛出:

IOException:期间发生I/O异常

ServletException:由于其他原因而失败

FilterConfig

Servlet容器用于在初始话期间将信息传递给过滤器的过滤器配置对象

// 源码:
package javax.servlet;

import java.util.Enumeration;

public interface FilterConfig {
    String getFilterName();

    ServletContext getServletContext();

    String getInitParameter(String name);

    Enumeration<String> getInitParameterNames();
}
getFilterName

返回Web.xml中定义的名称

返回值:

filter-name

getServletContext

返回正在执行的ServletContext的引用

返回值:

一个ServletContext对象

getInitParamter

返回一个字符串,包换命名的初始话参数的值,如果初始话参数不存在,返回null

参数:

name:一个字符串,指定初始话参数的名称。

返回值:

null or包含初始话参数值的字符串

getInitParameterNames

返回一个String类型的枚举,String是初始化参数的名称,如果没有初始化参数的名称,返回empty。

返回值:

包含过滤器初始化参数名称的String对象的枚举

oracle官方文档:https://docs.oracle.com/javaee/7/api/index.html

apache官方文档:https://tomcat.apache.org/tomcat-8.5-doc/servletapi/index.html




文章评论

目录