Servlet 过滤器可以动态地拦截要乞降相应,以变换或利用包含在要求或相应中的信息。
可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet。
Servlet 过滤器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 页面。
调用 Servlet 前调用所有附加的 Servlet 过滤器。

(2)过滤器的浸染

Servlet 过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的:

jsp过滤器过滤多个Servlet多个过滤器并存及代码实战webxml的7种典范节点设置装备摆设 JavaScript

·在客户真个要求访问后端资源之前,拦截这些要求。

·在做事器的相应发送回客户端之前,处理这些相应。

(3)过滤器运用的9个类型

身份验证过滤器(Authentication Filters)。

·数据压缩过滤器(Data compression Filters)。

·加密过滤器(Encryption Filters)。

·触发资源访问事宜过滤器。

·图像转换过滤器(Image Conversion Filters)。

·日志记录和审核过滤器(Logging and Auditing Filters)。

·MIME-TYPE 链过滤器(MIME-TYPE Chain Filters)。

·标记化过滤器(Tokenizing Filters)。

·XSL/T 过滤器(XSL/T Filters),转换 XML 内容。

2. Servlet过滤器的常用方法简介

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

方法1:public void doFilter (ServletRequest, ServletResponse, FilterChain)

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

方法2:public void init(FilterConfig filterConfig)

web 运用程序启动时,web 做事器将创建Filter 的实例工具,并调用其init方法,读取web.xml配置,完成工具的初始化功能,从而为后续的用户要求作好拦截的准备事情(filter工具只会创建一次,init方法也只会实行一次)。
开拓职员通过init方法的参数,可得到代表当前filter配置信息的FilterConfig工具。

方法3:public void destroy()

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

3. 过滤器的核心类:FilterConfig

Filter 的 init 方法中供应了一个 FilterConfig 工具。
通过FilterConfig 工具获取参数,核心代码如下:

public void init(FilterConfig fConfig) throws ServletException {

// 获取初始化参数

String name = fConfig.getInitParameter(\"大众name\"大众);

// 输出初始化参数

System.out.println(\"大众姓名: \"大众 + name);

}

4. Servlet过滤器的代码实战

(1)通过以下sevlet过滤器代码可以初步理解编写一个过滤器的步骤。
该代码实例的核心逻辑是:

1)先编写一个过滤器TestFilter

2)该过滤器是针对所有要求进行过滤,过滤之后,进行代码处理。

(2)代码详细先容

第一步编写过滤器,创建包com.web.filter,该包下创建类:

第二步配置web.xml,针对所有要求进行过滤:

第三步:随便访问一个要求,该过滤器便可以过滤,然后打印一句话,比如:访问之前的GetHeader类:

http://localhost:8080/webtest/getheader

第四步:掌握台打印如下信息:

过滤器已拦截住要求

5. 多个过滤器的配置

Web 运用程序可以根据特定的目的定义多少个不同的过滤器。
假设您定义了两个过滤器TestFilter和 DevoFilter。
您须要创建一个如下所述的不同的映射,别的的处理与上述所讲解的大致相同:

6. 过滤器的运用顺序

web.xml 中的 filter-mapping 元素的顺序决定了 Web 容器运用过滤器到 Servlet 的顺序。
若要反转过滤器的顺序,您只须要在 web.xml 文件中反转 filter-mapping 元素即可。

例如,上面的实例将先运用DevoFilter,然后再运用TestFilter,但是下面的实例将颠倒这个顺序:

7. web.xml中7种范例节点的配置解释

(1)<filter>指定一个过滤器。

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

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

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

在过滤器中,可以利用FilterConfig接口工具来访问初始化参数。

(5)<filter-mapping>元素用于设置一个 Filter 所卖力拦截的资源。
一个Filter拦截的资源可通过两种办法来指定:Servlet 名称和资源访问的要求路径.下边是它的子元素:

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

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

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

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

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

REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。
如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。

INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。
除此之外,该过滤器不会被调用。

FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。

ERROR:如果目标资源是通过声明式非常处理机制调用时,那么该过滤器将被调用。
除此之外,过滤器不会被调用。

此头条号每天都会分享非常实用的技能文章和笔试题讲解,欢迎大家关注此头条号!