Filter也称为过滤器,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理。
1、新建一个类,实现Filter接口
2、实现doFilter()方法
3、在web.xml中进行配置(参照Servlet配置)
1 package com.test.filter; 2 3 import java.io.IOException; 4 import javax.servlet.Filter; 5 import javax.servlet.FilterChain; 6 import javax.servlet.FilterConfig; 7 import javax.servlet.ServletException; 8 import javax.servlet.ServletRequest; 9 import javax.servlet.ServletResponse; 10 public class Demo1Filter implements Filter { 11 private FilterConfig filterConfig; 12 13 public void doFilter(ServletRequest request, ServletResponse response, 14 FilterChain chain) throws IOException, ServletException { 15 System.out.println("Demo1过滤前"); 16 System.out.println(filterConfig.getInitParameter("param1")); 17 chain.doFilter(request, response);//放行。让其走到下个链或目标资源中 18 System.out.println("Demo1过滤后"); 19 } 20 21 public void init(FilterConfig filterConfig) throws ServletException { 22 System.out.println("初始化了"); 23 this.filterConfig = filterConfig; 24 } 25 26 public void destroy() { 27 System.out.println("销毁了"); 28 } 29 }
1 <filter> 2 <filter-name>Demo1Filter</filter-name> 3 <filter-class>com.itheima.filter.Demo1Filter</filter-class> 4 <init-param> 5 <param-name>param1</param-name> 6 <param-value>value在这里呢</param-value> 7 </init-param> 8 </filter> 9 <filter-mapping> 10 <filter-name>Demo1Filter</filter-name> 11 <url-pattern>/*</url-pattern> 12 <dispatcher>REQUEST</dispatcher> <!-- 没有配置dispatcher就是默认request方式的 --> 13 <dispatcher>FORWARD</dispatcher> 14 <dispatcher>ERROR</dispatcher> 15 <dispatcher>INCLUDE</dispatcher> 16 </filter-mapping>
Filter的应用场景
通过对filter过滤器的了解,可以得知在以下三种情况下可以做些处理:
1> 通过控制对chain.doFilter的方法的调用,来决定是否需要访问目标资源。
比如,可以在用户权限验证等等。判断用户是否有访问某些资源的权限,有权限放行,没权限不执行chain.doFilter方法。
2> 通过在调用chain.doFilter方法之前,做些处理来达到某些目的。
比如,解决中文乱码的问题等等。可以在doFilter方法前,执行设置请求编码与响应的编码。甚至可以对request接口进行封装装饰来处理get请求方式的中文乱码问题(重写相应的request.getParameter方法)。
3> 通过在调用chain.doFilter方法之后,做些处理来达到某些目的。
比如对整个web网站进行压缩。在调用chain.doFilter方法之前用类A对response对象进行封装装饰,重写getOutputStream和重写getWriter方法。在类A内部中,将输出内容缓存进ByteArrayOutputStream流中,然后在chain.doFilter方法执行后,获取类A中ByteArrayOutputStream流缓存数据,用GZIPOutputStream流进行压缩下。
Filter实现拦截的原理
Filter接口中有一个doFilter方法,当开发人员编写好Filter类实现doFilter方法,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前(服务器内部对资源的访问机制决定的),都会先调用一下filter的doFilter方法。
Filter生命周期
和Servlet一样Filter的创建和销毁也是由WEB服务器负责。不过与Servlet区别的是
1>在应用启动的时候就进行装载Filter类(与Servlet的load-on-startup配置效果相同)。
2>容器创建好Filter对象实例后,调用init()方法。接着被Web容器保存进应用级的集合容器中去了等待着,用户访问资源。
3>当用户访问的资源正好被Filter的url-pattern拦截时,容器会取出Filter类调用doFilter方法,下次或多次访问被拦截的资源时,Web容器会直接取出指定Filter对象实例调用doFilter方法(Filter对象常驻留Web容器了)。
4>当应用服务被停止或重新装载了,则会执行Filter的destroy方法,Filter对象销毁。
注意:init方法与destroy方法只会直接一次。
Filter部署应用注意事项
1> filter-mapping标签中servlet-name与url-pattern。
Filter不仅可以通过url-pattern来指定拦截哪些url匹配的资源。而且还可以通过servlet-name来指定拦截哪个指定的servlet(专门为某个servlet服务了,servlet-name对应Servlet的相关配置)。
2> filter-mapping标签中dispatcher。
指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。用户可以设置多个<dispatcher> 子元素用来指定 Filter 对资源的多种调用方式进行拦截。
REQUEST:
当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问或ERROR情况时,那么该过滤器就不会被调用。
INCLUDE:
如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。
FORWARD:
如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。
ERROR:
如若在A.jsp页面page指令中指定了error属性=examError.jsp,那么A.jsp中若出现了异常,会跳转到examError.jsp中处理。而在跳转到examError.jsp时,若过滤器配置了ERROR的dispather那么则会拦截,否则不会拦截。
相关推荐
JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤JavaWeb-过滤器Filter...
本文将详细讲解三个使用JavaWeb过滤器的实际案例,帮助开发者深入理解其功能和应用场景。 案例1:分IP统计网站的访问次数 在网站运营中,了解用户访问来源是至关重要的。通过实现一个过滤器,我们可以记录每个IP...
JavaWeb过滤器(Filter)是Servlet规范的一部分,它允许开发者在请求到达目标资源(如Servlet、JSP页面)之前对其进行预处理,或者在响应返回给客户端之后进行后处理。过滤器可以用来实现统一的功能,如登录检查、...
### JavaWeb过滤器详解 #### 过滤器概述 在JavaWeb开发中,过滤器扮演着极其重要的角色,它能够实现在请求到达目标资源(如Servlet或JSP页面)之前或者响应返回客户端之前的拦截功能。这类似于现实生活中大厦里的...
首先,让我们了解过滤器(Filter)在JavaWeb中的概念。在Servlet规范中,过滤器是实现动态网页请求处理链路中的一个组件。它可以对请求和响应进行预处理和后处理,比如认证、授权、数据转换等。`javax.servlet....
在给定的标题“JavaWeb页面过滤器之编码过滤”和描述中,我们可以深入探讨JavaWeb中的编码过滤器,以及如何在MyEclipse 8.5环境下开发和应用这样的过滤器。这个过滤器不仅适用于JSP页面,也适用于Servlet和HTML等Web...
在标题"JAVAWEB-19:JDBC之过滤器Filter"中,我们关注的是如何利用过滤器来优化JDBC操作。JDBC(Java Database Connectivity)是Java语言中访问数据库的标准API,它允许Java程序与各种类型的数据库进行交互。然而,...
myFilterDemoWeb.zip JavaWeb-过滤器Filter学习(二)设置全站编码与设置页面缓存
javaweb 监听器(Listener)和过滤器(Filter)
【JavaWeb过滤器Filter详解】 过滤器(Filter)是JavaWeb开发中不可或缺的一部分,它遵循Servlet规范,提供了在请求处理前后的拦截能力。本专题主要围绕Filter的基础知识展开,包括其生命周期、特性、FilterConfig...
JavaWeb Servlet中Filter过滤器的详解 1.简述 Filter过滤器,对web服务器所有web资源进行过滤,从而实现一些特殊的功能(权限访问控制、过滤敏感词汇、压缩响应信息)。Filter能够对Servlet容器的请求和响应进行检查...
在Java Web开发中,Filter(过滤器)是一个强大的工具,它可以拦截HTTP请求和响应,对数据进行预处理或后处理,以实现各种功能。本文将深入探讨javaweb中Filter的常见应用,以及如何解决全站字符编码问题。 首先,...
在JavaWeb开发中,过滤器(Filter)和监听器(Listener)是两种非常重要的组件,它们能够帮助我们实现更精细的控制和管理应用程序的行为。本篇将详细介绍过滤器的原理、使用方法、映射配置以及实际应用案例。 ### 1...
character-encoding-filter 是 Java Web 乱码过滤器。 web.xml <filter> <filter-name>character-encoding-filter</filter-name> <filter-class>...
综上所述,"javaWeb实现的过滤器敏感字过滤"项目通过使用JavaWeb过滤器技术,有效地防止了敏感字符的传播,提高了应用程序的安全性。通过不断学习和实践,我们可以更好地掌握这一技能,为构建更安全、可靠的Web应用...
在JavaWeb开发中,过滤器(Filter)是一个重要的概念,它允许我们在请求被发送到目标资源(如Servlet、JSP页面)之前或之后对请求进行处理。本项目"javaWeb项目 filter练习"主要关注了两个核心的应用场景:编码过滤...
在JavaWeb开发中,过滤器(Filter)是一个至关重要的组件,它是JavaWeb三大核心组件(Servlet、Filter、Listener)之一。过滤器的主要作用是拦截用户的请求,并在请求到达目标Servlet之前进行预处理,或者在响应返回...
在JavaWeb开发中,过滤器(Filter)是一个非常重要的组件,它允许我们在HTTP请求和响应之间进行拦截,执行一些预处理或后处理操作。这里我们将深入探讨标题中提到的几个常用的过滤器及其源码实现。 首先,我们来看...
### JavaWeb中Filter(过滤器)的常见应用 #### 一、概述 在JavaWeb开发中,`Filter`(过滤器)是一种非常重要的组件,它主要用于对用户请求进行预处理或者对响应结果进行后处理。通过合理的配置和设计,开发者...