Servlet过滤器

Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。

1.详细说明

可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet。Servlet 过滤器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 页面。调用 Servlet 前调用所有附加的 Servlet 过滤器。

 

Servlet 过滤器用途

在客户端的请求访问后端资源之前,拦截这些请求。

在服务器的响应发送回客户端之前,处理这些响应。

 

2.使用说明

Web 容器启动 Web 应用程序时,它会为您在部署描述符中声明的每一个过滤器创建一个实例。

Filter的执行顺序与在web.xml配置文件中的配置顺序一致,一般把Filter配置在所有的Servlet之前。

 

1)Servlet 过滤器方法

过滤器是一个实现了 javax.servlet.Filter 接口的 Java 类。javax.servlet.Filter 接口定义了三个方法:

 

方法 & 描述

public void doFilter (ServletRequest, ServletResponse, FilterChain)

该方法完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain用户访问后续过滤器。

 

public void init(FilterConfig filterConfig)

web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。

 

public void destroy()

Servlet容器在销毁过滤器实例前调用该方法,在该方法中释放Servlet过滤器占用的资源。

 

2)过滤器流程

 

 

请求 ----> 匹配过滤器 -->doFilter() --->  servlet响应前的过滤     chain链(servlet响应)  --->servlet的响应后的过滤

 

注解方式配置:

 

@WebFilter(filterName = "loginFilter",   

    urlPatterns = "/*",   

    initParams = {  

            @WebInitParam(name = "loginUI", value = "/home/loginUI"),  

            @WebInitParam(name = "loginProcess", value = "home/login"),  

            @WebInitParam(name = "encoding", value = "utf-8")  

}) 

 

 

3)FilterConfig 使用

Filter 的 init 方法中提供了一个 FilterConfig 对象。

 

web.xml 文件配置如下:

 

<filter>

    <filter-name>LogFilter</filter-name>

    <filter-class>com.sxt.test.LogFilter</filter-class>

    <init-param>

        <param-name>Site</param-name>

        <param-value>sxt教程</param-value>

</init-param>

 </filter>

 

init 方法使用 FilterConfig 对象获取参数:

 

public void  init(FilterConfig config) throws ServletException {

    // 获取初始化参数

    String site = config.getInitParameter("Site");

    // 输出初始化参数

    System.out.println("网站名称: " + site);

}

 

 

 

 

3.web.xml配置各节点说明

<filter>指定一个过滤器。

<filter-name>用于为过滤器指定一个名字,该元素的内容不能为空。

<filter-class>元素用于指定过滤器的完整的限定类名。

<init-param>元素用于为过滤器指定初始化参数,它的子元素<param-name>指定参数的名字,<param-value>指定参数的值。

在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。

<filter-mapping>元素用于设置一个 Filter 所负责拦截的资源。一个Filter拦截的资源可通过两种方式来指定:Servlet 名称和资源访问的请求路径

<filter-name>子元素用于设置filter的注册名称。该值必须是在<filter>元素中声明过的过滤器的名字

<url-pattern>设置 filter 所拦截的请求路径(过滤器关联的URL样式)

<servlet-name>指定过滤器所拦截的Servlet名称。

<dispatcher>指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。用户可以设置多个<dispatcher>子元素用来指定 Filter 对资源的多种调用方式进行拦截。

<dispatcher>子元素可以设置的值及其意义

posted @ 2019-06-14 22:30  他也就火三年  阅读(229)  评论(0编辑  收藏  举报