Servlet 过滤器可以动态地拦截要乞降相应,以变换或利用包含在要求或相应中的信息。可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet。Servlet 过滤器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 页面。调用 Servlet 前调用所有附加的 Servlet 过滤器。
(2)过滤器的浸染
Servlet 过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的:
·在客户真个要求访问后端资源之前,拦截这些要求。
·在做事器的相应发送回客户端之前,处理这些相应。
(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. 过滤器的核心类:FilterConfigFilter 的 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:如果目标资源是通过声明式非常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。
此头条号每天都会分享非常实用的技能文章和笔试题讲解,欢迎大家关注此头条号!