过滤器与监听器知识总结

过滤器

什么是过滤器?

过滤器是servlet2.3规范中定义的一种小型的、可插入的Web组件。用来拦截Servlet容器的请求和响应过程。以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据。

过滤器通常是封装了一些功能的Web组件,这些功能很重要,但对于处理客户端请求或发送响应来说不是决定性的。

典型的应用包括记录请求和响应的数据、管理会话属性等。

如何编写过滤器?

1.编写一个java类,实现Filter接口

--  过滤器API中有3个常用的接口,位于javax,Servlet包中:Filter,FilterChain,FilterConfig

编程中,过滤器类要实现Filter接口,该接口中包含三个必须实现的方法:

void init(FilterConfig  filterConfig);

void doFilter(ServletRequest  request,ServletResponse  response,FilterChain  chain);

void  destroy();

2.在doFilter方法中实现拦截处理逻辑

--  public class CommentFilter implements Filter{

    //创建实例后,调用init方法,该方法只执行一次

    public void init(FilterConfig  filterConfig) throws ServletException{ //.....}

    //容器调用doFilter方法处理请求

    public void doFilter(ServletRequest  request,ServletResponse  response,FilterChain  chain)  throws IOException,ServletException{ //......     chian.doFilter(request,response);}

    //容器删除过滤器实例之前调用该方法,该方法只执行一次

    public void destroy(){...  ...}

}

3.将过滤器添加到Web程序中;

--  修改web.xml文件,增加过滤器节点

<filter>

  <filter-name>filter1</filter-name>

  <filter-class>web.xxxServlet</filter-class>

</filter>

<filter-mapping>

  <filter-name>filter1</filter-name>

  <url-pattern>/xxx</url-pattern>

<filter-mapping>

4.把过滤器和Web应用一起打包部署。

--  与web应用程序一起部署过滤器时,只需要把过滤器类和其他web组件类包括在一起,把web.xml文件(连同过滤器注册)放进web应用程序结构中,Servlet容器将处理之后的其他所有事情。

过滤器的优先级

如果有多个过滤器都满足过滤的条件,则容器依据<filter-mapping>的先后顺序来调用各个过滤器。

<filter>.......</filter>

<filter>.......</filter>

<filter-mapping>......</filter-mapping>

<filter-mapping>......</filter-mapping>

过滤器的初始化参数

容器启动之后,会创建过滤器实例

接下来,容器会调用过滤器的init方法,而容器会事先创建FilterConfig对象。该对象可以访问在web.xml文件中配置的一些参数。

这些在web.xml文件中存储,由FilterConfig对象读取,在执行init方法时能够访问的参数值,叫初始化参数。

通过这些初始化参数可以方便快捷的配置及修改一些辅助参数。

其中初始化参数的配置示例为:

<filter>

  <filter-name>filter1</filter-name>

  <filter-class>web.xxxFilter</filter-class>

  <! -- 初始化参数 -- >

  <init-param>

    <param-name>illegaIStr</param-name>

    <param-value>xxx</param-value>

  </init-param>

</filter>

读取初始化参数

使用FilterConfig对象可以读取在web.xml中配置的初始化参数。示例:

String  config.getInitParamter("illegalStr")

过滤器的优点:

实现代码的“可插拔性”,即增加或减少某个功能模块,不会影响程序的正常执行;

可以将多个相同处理逻辑的模块集中写在过滤器里面,方便代码的维护。

监听器

什么是监听器?

Servlet规范中定义的一种特殊的组件,用来监听Servlet容器产生的事件并进行相应的处理。

容器产生的两大类事件:

--生命周期相关的事件

容器创建或者销毁request,session,ServletContext时产生的事件

--绑定数据相关的事件

调用了request,session,ServletContext的setAttribute,removeAttribute方法时产生的事件

如何编写监听器?

1.编写一个java类,依据监听的事件类型选择实现相应的监听器接口。例如要监听Session对象的创建和销毁,要实现HttpSessionListener

--public class CouListener implements HttpSessionListener{ // 实现方法}

2.在监听器接口方法中,实现相应的监听处理逻辑

--public class CouListener implements HttpSessionListener{

  public void sessionCreate(HttpSessionEvent arg0){

    //......

    HttpSession session = arg0.getSession();

    ServletContext ctx = session.getServletContext();(获取session或上下文对象的方法)

}

}

3.在web.xml文件中注册该监听器

--在web.xml文件中,增加以下节点:

<! -- 监听器 -->

<listener>

  <listener-class>web.CouListener</listener-class>

</listener>

<!-- 实现相同的listener接口的多个监听器,在执行时是按web.xml注册出现的顺序决定 -->

应用场景

由于ServletRequest,HttpSession,ServletContext对象都是容器创建的,通过对这些对象注册监听器,就可以得知何时创建了。例如:

在contextDestroy方法中对应用级别的资源进行释放;

统计在线人数可以通过HttpSessionListener监听器的sessionCreated方法监听session的创建动作。

未完,暂时总结这些。

时间: 2024-10-11 05:39:37

过滤器与监听器知识总结的相关文章

Servlet过滤器和监听器知识总结(转)

 Servlet过滤器是 Servlet 程序的一种特殊用法,主要用来完成一些通用的操作,如编码的过滤.判断用户的登录状态.过滤器使得Servlet开发者能够在客户端请求到达 Servlet资源之前被截获,在处理之后再发送给被请求的Servlet资源,并且还可以截获响应,修改之后再发送给用户.而Servlet监听器可以  监听客户端发出的请求.服务器端的操作,通过监听器,可以自动激发一些操作,如监听在线人数.  Servlet过滤器简介绍      Servlet过滤器是在Java Servle

过滤器、监听器、拦截器配置

一.过滤器.监听器配置在web.xml配置文件中,拦截器则不一定,可通过 web.xml加载配置拦截器的文件: 1.在DispatcherServlet的初始化过程中,Spring会在web应用的WEB-INF文件夹下寻找名为[servlet-name]-servlet.xml的配置文件,     生成文件中定义的bean.这些bean会覆盖在全局范围(global cope)中定义的同名的bean.如果servletName-servlet.xml不在默认路径下必须显示指定. 2. 在 XXX

Java 过滤器、监听器、拦截器的区别

原文:http://www.360doc.com/content/10/0601/09/495229_30616324.shtml 1.过滤器 Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码.做一些业务逻辑判断等.其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request.Response)统一设置编码,简化操作:同时还可进行逻辑判断,如用户是否

java 拦截器、过滤器、监听器

转自:http://www.cnblogs.com/wangyuyu/archive/2013/07/02/3167354.html 一.理解Struts2拦截器 1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2. 拦截器栈(Interceptor Stack).Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链.在访问被拦截的方法或字段时,Struts2拦截器链中的拦截

JSP详细篇——Servlet过滤器和监听器

过滤器和监听器 Servlet过滤器是从Servlet2.3规范开始新增的功能,并在Servlet2.4规范中得到增强,监听器可以监听到Web应用程序启动和关闭.创建监听器需要实现响应的接口,并对其进行配置. Servlet过滤器 1.什么是过滤器 Servlet过滤器与Servlet十分相似,但是它具有拦截客户端请求的功能.Servlet过滤器可以改变请求中的内容,来满足实际开发中的需要.对于程序开发人员来说,过滤器实质上就是在Web应用服务器上的一个Web应用组件,用于拦截客户端与目标资源之

过滤器、监听器、上下文、servlet线程安全问题

就像名字写那样,过滤器可以过滤请求,比如对一些评论进行过滤.又不改原有代码的基础上可以加上一个过滤器,或者是登陆验证.集中在一个过滤器中处理.写一个类实现接口 Filter 之后一定要在配置文件中配置!!!监听器可以监听,上下文的概念. 过滤器: 什么是过滤器: servlet规范当中定义的一种特殊的组件,用来拦截servlet容器的调用过程. 会先调过过滤器的方法,过滤器决定是否向后继续调用就是调用servlet容器 容器收到请求之后 通常情况下会调用servlet的service方法来处理请

java中过滤器和监听器详解

先说一下java中过滤器的作用: 过滤器是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url.主要为了减轻服务器负载.减少压力 拦截器的作用: 拦截器是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法.比如可以用拦截器做一些权限管理 或者log之类的事情. 过滤器和拦截器他们的作用是不同的.   Java中过

springBoot(6)---过滤器,监听器,拦截器

过滤器,监听器,拦截器 一.理解它们 看里十几篇博客,总算有点小明白,总的来讲,两张图可以让我看明白点. 通过两幅图我们可以理解拦截器和过滤器的特点 1.过滤器 过滤器是在请求进入tomcat容器后,但请求进入servlet之前进行预处理的.请求结束返回也是,是在servlet处理完后,返回给前端之前. 理解上面这句话我们就可以知道,进入servlet之前,主要是两个参数:ServletRequest,ServletResponse  那我们得到这两个测试可以干哪些事呢? 我们可以通过Servl

SpringBoot | 第七章:过滤器、监听器、拦截器

前言 在实际开发过程中,经常会碰见一些比如系统启动初始化信息.统计在线人数.在线用户数.过滤敏高词汇.访问权限控制(URL级别)等业务需求.这些对于业务来说一般上是无关的,业务方是无需关系的,业务只需要关系自己内部业务的事情.所以一般上实现以上的功能,都会或多或少的用到今天准备讲解的过滤器.监听器.拦截器来实现以上功能. 过滤器 利用WebFilter注解配置 FilterRegistrationBean方式 监听器 拦截器 请求链路说明 最后 老生常谈 过滤器 过滤器Filter,是Servl