Servlet-filter过滤器

简介: Filter的创建过程 实现javax.servlet.Filter接口 实现init方法,读取过滤器的初始化参数 实现doFilter方法,完成对请求或响应的过滤 调用FilterChain接口对象的doFilter方法,向后续的过滤器传递请求或响应 实现过滤器 在Servlet中,如果要定义一个过滤器,则直接让一个类实现javax.

Filter的创建过程

实现javax.servlet.Filter接口
实现init方法,读取过滤器的初始化参数
实现doFilter方法,完成对请求或响应的过滤
调用FilterChain接口对象的doFilter方法,向后续的过滤器传递请求或响应

实现过滤器

在Servlet中,如果要定义一个过滤器,则直接让一个类实现javax.servlet.Filter接口即可,此接口定义了三个操作方法:

* public void init(FilterConfig filterConfig) throws ServletException
* public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException
* public void destroy()

FilterChain接口的主要作用是将用户的请求向下传递给其他的过滤器或者是Servlet:

* public void doFilter(ServletRequest request,ServletResponse response) throws IOException,ServletException

Filter的创建

  Filter的创建和销毁由WEB服务器负责。 web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作,filter对象只会创建一次,init方法也只会执行一次。通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。Filter的销毁
  Web容器调用destroy方法销毁Filter。destroy方法在Filter的生命周期中仅执行一次。在destroy方法中,可以释放过滤器使用的资源。
FilterConfig接口

  用户在配置filter时,可以使用为filter配置一些初始化参数,当web容器实例化Filter对象,调用其init方法时,会把封装了filter初始化参数的filterConfig对象传递进来。因此开发人员在编写filter时,通过filterConfig对象的方法,就可获得:

String getFilterName():得到filter的名称。
String getInitParameter(String name): 返回在部署描述中指定名称的初始化参数的值。如果不存在返回null.
Enumeration getInitParameterNames():返回过滤器的所有初始化参数的名字的枚举集合。
public ServletContext getServletContext():返回Servlet上下文对象的引用。

Filter的部署

  
Filter的部署分为两个步骤:
  1、注册Filter
  2、映射Filter注册Filter
开发好Filter之后,需要在web.xml文件中进行注册,这样才能够被web服务器调用

在web.xml文件中注册Filter范例:

1 <filter>
2 <description>FilterDemo02过滤器</description>
3 <filter-name>FilterDemo02</filter-name>
4 <filter-class>me.gacl.web.filter.FilterDemo02</filter-class>
5 <!--配置FilterDemo02过滤器的初始化参数-->
6 <init-param>
7 <description>配置FilterDemo02过滤器的初始化参数</description>
8 <param-name>name</param-name>
9 <param-value>gacl</param-value>
10 </init-param>
11 <init-param>
12 <description>配置FilterDemo02过滤器的初始化参数</description>
13 <param-name>like</param-name>
14 <param-value>java</param-value>
15 </init-param>
16 </filter>
<description>用于添加描述信息,该元素的内容可为空,<description>可以不配置。
<filter-name>用于为过滤器指定一个名字,该元素的内容不能为空。
<filter-class>元素用于指定过滤器的完整的限定类名。
<init-param>元素用于为过滤器指定初始化参数,它的子元素<param-name>指定参数的名字,<param-value>指定参数的值。在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。如果过滤器不需要指定初始化参数,那么<init-param>元素可以不配置。

  
在web.xml文件中注册了Filter之后,还要在web.xml文件中映射Filter

1 <!--映射过滤器-->
2 <filter-mapping>
3 <filter-name>FilterDemo02</filter-name>
4 <!--“/*”表示拦截所有的请求 -->
5 <url-pattern>/*</url-pattern>
6 </filter-mapping>
<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 对资源的多种调用方式进行拦截。如下:
1 <filter-mapping>
2 <filter-name>testFilter</filter-name>
3 <url-pattern>/index.jsp</url-pattern>
4 <dispatcher>REQUEST</dispatcher>
5 <dispatcher>FORWARD</dispatcher>
6 </filter-mapping>
<dispatcher> 子元素可以设置的值及其意义:
1. REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。
2. INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。
3. FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。
4. ERROR:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。
相关文章
|
2月前
|
JavaScript Java 容器
servlet过滤器Filter简要回顾-过滤请求字符编码,/和/*和/**的区别
本文简要回顾了Servlet过滤器Filter的概念和使用,通过实例演示了如何创建过滤器以过滤请求字符编码,并解释了在web.xml中配置过滤器时使用`/`、`/*`和`/**`的区别。
servlet过滤器Filter简要回顾-过滤请求字符编码,/和/*和/**的区别
|
3月前
|
存储 前端开发 Java
servlet过滤器--使用过滤器统计网站访问人数的计数(注解形式)
该文章展示了如何使用Servlet过滤器(Filter)通过注解方式创建一个网站访问人数统计功能,通过`@WebFilter`注解定义过滤器及其URL模式,并在`doFilter`方法中实现计数逻辑,将访问次数存储在`ServletContext`中,最后在JSP页面展示访问人数。
servlet过滤器--使用过滤器统计网站访问人数的计数(注解形式)
|
3月前
|
C# 数据可视化 开发者
WPF开发者福音:深度解析OxyPlot与LiveCharts图表库,轻松实现数据可视化不再是难题!
【8月更文挑战第31天】在WPF应用中,数据可视化对提升用户体验至关重要。本文介绍并演示了两种流行图表库OxyPlot和LiveCharts的集成与使用方法。OxyPlot是一款适用于.NET应用的开源图表库,提供多种图表类型,易于集成。LiveCharts则以其丰富的图表类型和动画效果,特别适合实时数据展示。通过具体代码示例,本文展示了如何利用这两种图表库创建折线图和柱状图,并详细说明了安装和配置步骤。希望本文能帮助开发者在WPF应用中轻松实现高效、美观的数据可视化。
187 0
|
3月前
|
监控 前端开发 Java
揭秘Web开发神器:Servlet、过滤器、拦截器、监听器如何联手打造无敌博客系统,让你的用户欲罢不能!
【8月更文挑战第24天】在Java Web开发中,Servlet、过滤器(Filter)、拦截器(Interceptor,特指Spring MVC中的)及监听器(Listener)协同工作,实现复杂应用逻辑。以博客系统为例,Servlet处理文章详情请求,过滤器(如LoginFilter)检查登录状态并重定向,Spring MVC拦截器(如LoggingInterceptor)提供细粒度控制(如日志记录),监听器(如SessionListener)监控会话生命周期事件。这些组件共同构建出高效、有序的Web应用程序。
39 0
|
6月前
|
容器
Servlet 教程 之 Servlet 编写过滤器 6
该教程介绍了如何在Servlet中编写过滤器。可以创建多个过滤器,如AuthenFilter和LogFilter,并通过不同的映射进行配置。过滤器的应用顺序由web.xml中filter-mapping的顺序决定,可通过调整顺序改变过滤器执行的先后。
30 3
|
6月前
|
Java 容器
Servlet 教程 之 Servlet 编写过滤器 2
Servlet过滤器教程:实现Filter接口,包含3个核心方法。1) doFilter用于实际过滤,处理匹配URL的请求,调用FilterChain处理后续过滤。2) init方法在应用启动时被调用,初始化filter,从FilterConfig获取配置信息。3) destroy方法在过滤器销毁前执行,释放资源。
34 2
|
6月前
|
Java
Servlet 教程 之 Servlet 编写过滤器 3
`LogFilter` 是一个 Servlet 过滤器示例,它打印网站名称并传递请求至过滤链。当与 `DisplayHeader` Servlet(显示 HTTP 头信息)配合使用时,提供基础过滤器概念的理解。过滤器在请求处理前可添加额外功能或修改输入,而 `doGet` 方法则用于响应 GET 请求,展示请求头信息。
25 2
|
6月前
|
XML 数据格式
Servlet 教程 之 Servlet 编写过滤器 4
在Servlet教程中,学习如何编写过滤器。在`web.xml`配置文件中,创建一个名为`LogFilter`的过滤器,类为`com.baidu.test.LogFilter`,设置初始化参数`Site`为`百度`。将过滤器映射到`/*`,确保所有请求都会经过此过滤器。同时定义了一个名为`DisplayHeader`的Servlet,映射到`/TomcatTest/DisplayHeader`路径。
28 1
|
6月前
|
XML Java 数据安全/隐私保护
Servlet 教程 之 Servlet 编写过滤器 1
Servlet过滤器用于动态拦截请求和响应,实现如身份验证、数据压缩、日志记录等多种功能。它们可附加于Servlet、JSP或HTML,按web.xml中配置的顺序执行。Web容器启动时会根据部署描述符创建过滤器实例。
30 2
|
6月前
|
容器
Servlet 教程 之 Servlet 编写过滤器 7
Servlet教程讲解如何编写过滤器。在`web.xml`中,`&lt;filter&gt;`定义过滤器,`&lt;filter-name&gt;`和`&lt;filter-class&gt;`分别设定名称和类。`&lt;init-param&gt;`配置初始化参数。`&lt;filter-mapping&gt;`指定过滤器作用的资源,可通过`&lt;servlet-name&gt;`或`&lt;url-pattern&gt;`定义。`&lt;dispatcher&gt;`定义过滤器触发时机,如REQUEST、INCLUDE、FORWARD和ERROR,控制过滤器何时拦截资源调用。
33 0