`

Servlet 监听器 过滤器

阅读更多
Servlet监听器详解
http://www.21jn.net/html/85/n-285.html

Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后可以做一些必要的处理。
接口:
目前Servlet2.4和JSP2.0总共有8个监听器接口和6个Event类,其中HttpSessionAttributeListener与
HttpSessionBindingListener皆使用HttpSessionBindingEvent;HttpSessionListener和HttpSessionActivationListener则都使用HttpSessionEvent;其余Listener对应的Event如下所示:

Listener接口
Event类

ServletContextListener
ServletContextEvent

ServletContextAttributeListener
ServletContextAttributeEvent

HttpSessionListener
HttpSessionEvent

HttpSessionActivationListener

HttpSessionAttributeListener
HttpSessionBindingEvent

HttpSessionBindingListener

ServletRequestListener
ServletRequestEvent

ServletRequestAttributeListener
ServletRequestAttributeEvent





一 ServletContext相关监听接口

补充知识:通过ServletContext 的实例可以存取应用程序的全局对象以及初始化阶段的变量。
在JSP文件中,application 是 ServletContext 的实例,由JSP容器默认创建。Servlet 中调用 getServletContext()方法得到 ServletContext 的实例。

注意:全局对象即Application范围对象,初始化阶段的变量指在web.xml中,经由<context-param>元素所设定的变量,它的范围也是Application范围,例如:

<context-param>
  <param-name>Name</param-name>
  <param-value>browser</param-value>
</context-param>

当容器启动时,会建立一个Application范围的对象,若要在JSP网页中取得此变量时:
  String name = (String)application.getInitParameter("Name");
或者使用EL时:
  ${initPara.name}
若是在Servlet中,取得Name的值方法:
  String name = (String)ServletContext.getInitParameter("Name");

1.ServletContextListener:
用于监听WEB 应用启动和销毁的事件,监听器类需要实现javax.servlet.ServletContextListener 接口。
ServletContextListener 是 ServletContext 的监听者,如果 ServletContext 发生变化,如服务器启动时 ServletContext 被创建,服务器关闭时 ServletContext 将要被销毁。

ServletContextListener接口的方法:
  void contextInitialized(ServletContextEvent sce) 
通知正在接受的对象,应用程序已经被加载及初始化。
  void contextDestroyed(ServletContextEvent sce) 
通知正在接受的对象,应用程序已经被载出。
ServletContextEvent中的方法:
ServletContext getServletContext()
取得ServletContext对象

2.ServletContextAttributeListener:用于监听WEB应用属性改变的事件,包括:增加属性、删除属性、修改属性,监听器类需要实现javax.servlet.ServletContextAttributeListener接口。

ServletContextAttributeListener接口方法:
void attributeAdded(ServletContextAttributeEvent scab)
若有对象加入Application的范围,通知正在收听的对象
void attributeRemoved(ServletContextAttributeEvent scab)
若有对象从Application的范围移除,通知正在收听的对象
void attributeReplaced(ServletContextAttributeEvent scab)
若在Application的范围中,有对象取代另一个对象时,通知正在收听的对象


ServletContextAttributeEvent中的方法:
java.lang.String getName()
回传属性的名称
java.lang.Object getValue()
回传属性的值

二、HttpSession相关监听接口
1.HttpSessionBindingListener接口
注意:HttpSessionBindingListener接口是唯一不需要再web.xml中设定的Listener

当我们的类实现了HttpSessionBindingListener接口后,只要对象加入Session范围(即调用HttpSession对象的setAttribute方法的时候)或从Session范围中移出(即调用HttpSession对象的removeAttribute方法的时候或Session Time out的时候)时,容器分别会自动调用下列两个方法:
void valueBound(HttpSessionBindingEvent event)
void valueUnbound(HttpSessionBindingEvent event)

思考:如何实现记录网站的客户登录日志, 统计在线人数?

2.HttpSessionAttributeListener接口
HttpSessionAttributeListener监听HttpSession中的属性的操作。
当在Session增加一个属性时,激发attributeAdded(HttpSessionBindingEvent se) 方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent se)方法;当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se) 方法。这和ServletContextAttributeListener比较类似。

3.HttpSessionListener接口
HttpSessionListener监听HttpSession的操作。当创建一个Session时,激发session Created(HttpSessionEvent se)方法;当销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se)方法。

4.HttpSessionActivationListener接口
  主要用于同一个Session转移至不同的JVM的情形。

四、ServletRequest监听接口
1.ServletRequestListener接口和ServletContextListener接口类似的,这里由ServletContext改为ServletRequest
2.ServletRequestAttributeListener接口和ServletContextListener接口类似的,这里由ServletContext改为ServletRequest

Servlet监听器概念特点常用概述
http://developer.51cto.com/art/200907/134146.htm

Servlet监听器用于监听一些重要事件的发生,Servlet监听器对象可以在事情发生前、发生后可以做一些必要的处理。
Servlet监听器监听器概述

◆Listener是Servlet的监听器

◆可以监听客户端的请求、服务端的操作等。

◆通过监听器,可以自动激发一些操作,如监听在线用户数量,当增加一个HttpSession时,给在线人数加1。

◆编写监听器需要实现相应的接口

◆编写完成后在web.xml文件中配置一下,就可以起作用了

◆可以在不修改现有系统基础上,增加web应用程序生命周期事件的跟踪

常用的Servlet监听器监听接口

◆ServletContextAttributeListener

监听对ServletContext属性的操作,比如增加/删除/修改

◆ServletContextListener

监听ServletContext,当创建ServletContext时,激发contextInitialized(ServletContextEvent sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEvent sce)方法。

◆HttpSessionListener

监听HttpSession的操作。当创建一个Session时,激发session Created(SessionEvent se)方法;当销毁一个Session
时,激发sessionDestroyed (HttpSessionEvent se)方法。

◆HttpSessionAttributeListener

监听HttpSession中的属性的操作。当在Session增加一个属性时,激发attributeAdded(HttpSessionBindingEvent se) 方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent se)方法;当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se) 方法。

使用范例:

计算在线用户数量的Linstener

(1)Package xxx;

public class OnlineCounter
{      
private static long online = 0; 
public static long getOnline()
{       
return online;    
}     
public static void raise()
{        
online++;     
}     
public static void reduce()
{         
online--;


import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;  
public class OnlineCounterListener implements HttpSessionListener{     
public void sessionCreated(HttpSessionEvent hse)
{          
OnlineCounter.raise();       
}     
public void sessionDestroyed(HttpSessionEvent hse)
{           
OnlineCounter.reduce();     
}   

在需要显示在线人数的JSP中可是使用目前在线人数:

﹤%@ page import=“xxx.OnlineCounter" %﹥ 
﹤%=OnlineCounter.getOnline()%﹥
退出会话(可以给用户提供一个注销按钮):

﹤form action="exit.jsp" method=post﹥    
﹤input type=submit value="exit"﹥  
﹤/form﹥  exit.jsp: ﹤%session.invalidate() ;%﹥

在web.xml中加入:

﹤listener﹥
﹤listener-class﹥
servletlistener111111.SecondListener
﹤/listener-class﹥
﹤/listener﹥

使用servlet过滤器和监听器
http://charmo.iteye.com/blog/170259

1. Servlet过滤器基础
Servlet过滤器是Servlet的一种特殊用法,主要用来完成一些通用的操作。比如编码的过滤,判断用户的登陆状态等等。Servlet过滤器的适用场合:
A.认证过滤
B.登录和审核过滤
C.图像转换过滤
D.数据压缩过滤
E.加密过滤
F.令牌过滤
G.资源访问触发事件过滤
Servlet过滤器接口的构成:
所有的Servlet过滤器类都必须实现javax.servlet.Filter接口。这个接口含有3个过滤器类必须实现的方法:
方法 说明
init(FilterConfig cfg) 这是Servlet过滤器的初始化方法,性质等同与servlet的init方法。
doFilter(ServletRequest,ServletResponse,FilterChain) 完成实际的过滤操作,当请求访问过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain参数用于访问后续过滤器
destroy() Servlet容器在销毁过滤器实例前调用该方法,这个方法中可以释放Servlet过滤器占用的资源。,性质等同与servlet的destory()方法。
Servlet过滤器的创建步骤:
A.实现javax.servlet.Filter接口的servlet类
B.实现init方法,读取过滤器的初始化函数
C.实现doFilter方法,完成对请求或过滤的响应
D.调用FilterChain接口对象的doFilter方法,向后续的过滤器传递请求或响应
F.在web.xml中配置Filter
2.使用过滤器处理中文问题
   当用用户登陆页面输入帐号时,如果输入是中文,后台servlet再次输出这个内容时,可能就会是乱码,这是因为serlvet中默认是以ISO-8859-1格式编码的,如果后台有多个Servlet,多个参数,这样就不合适,这个问题,我们可以通过一个过滤器统一解决,使后台的输出输出都支持中文!将ISO-8859-1转码为GBK的那段代码!
3.使用过滤器认证用户:
每个过滤器也可以配置初始化参数,可以将不需要过滤的地址配置到这个Filter的配置参数中,过滤时,如果请求地址在配置参数中,则放行,这样就避免了在程序中硬编码。每个Filter中初始化时,都可以得到配置对象,在Filter中配置二个不需要过滤的地址,一个是登陆页面,一个是执行登陆认证的servlet;
4.Servlet监听器
类似与Swing界面应用开发,Servlet也可以创建监听器,以对Servlet容器,或Servlet中以象的事件做出反应。Servlet监听器主要有以下几种:
ServletRequestListener ,ServletRequestAttributeListener,
HttpSessionActivationListener ,HttpSessionBindingListener ,
HttpSessionAttributeListener,HttpSessionListener,
ServletContextListener等等。
这些监听器主要用来监听session,request,application这三个对象里存取数据的变化。
分享到:
评论

相关推荐

    servlet 过滤器做的简单登陆demo

    Servlet过滤器是Java Web开发中的一个重要概念,它允许开发者在请求到达目标Servlet之前或之后对请求和响应进行处理。在这个“servlet过滤器做的简单登陆demo”中,我们将探讨如何利用过滤器实现一个基础的登录验证...

    servlet过滤器和监听器PPT课件.ppt

    servlet过滤器和监听器,servlet过滤器和监听器课件,servlet过滤器和监听器PPT

    servlet中的过滤器与监听器

    Servlet监听器 **监听器** 是一种特殊类型的Servlet组件,它可以监听特定的事件,如会话创建、销毁、请求初始化、上下文初始化等。监听器通过实现不同的接口,如`ServletContextListener`, `HttpSessionListener`,...

    第13章使用Servlet过滤器和监听器

    第13章使用Servlet过滤器和监听器,基础知识

    Servlet过滤器与监听器

    Servlet过滤器与监听器

    jsp/servlet中过滤器和监听器的区别

    - **处理时机**:过滤器在请求到达Servlet之前和离开Servlet之后进行操作,监听器则是在特定事件发生时被调用。 - **功能侧重点**:过滤器侧重于数据处理和过滤,监听器则更注重状态管理和事件响应。 - **交互...

    Servlet过滤器与监听器.doc

    Servlet监听器则用于监听客户端的请求和服务器端的特定事件,例如session的创建、销毁,以及用户的登录、注销等。监听器通过实现Servlet规范定义的接口,如`HttpSessionListener`、`ServletRequestListener`等,可以...

    servlet过滤器与监听器.pdf

    Servlet 过滤器与监听器 概述: Servlet 过滤器(Filter)和监听器(Listener)是 Java Web 应用程序中常见的两种组件,它们提供了各种扩展 Web 应用程序功能的方式。过滤器和监听器都可以通过 Java Web 应用程序...

    servlet过滤器1

    另一方面,Servlet监听器(Listener)则扮演着不同的角色。它们是对Web应用程序中特定事件的响应机制。例如,当一个新的会话创建时,会触发HttpSession监听器的`sessionCreated()`方法。监听器分为三类: 1. **...

    servlet匹配,过滤器与监听器比较

    servlet的匹配原则,过滤器的匹配和执行过程,监听器的执行

    Servlet、监听器、过滤器、MVC模式介绍.docx

    Servlet、监听器、过滤器和MVC模式是Java Web开发中的核心概念,它们各自承担着不同的职责,共同构建了一个高效、清晰的架构。 首先,MVC(Model-View-Controller)模式是一种软件设计模式,常用于创建Web应用程序...

    JAVA培训Servlet监听器.pdf

    JAVA Servlet监听器是指在Servlet容器中,用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后做一些必要的处理。监听器可以分为多种类型,每种类型都有其特定的应用场景和用途。 ...

    过滤器和监听器的使用与区别

    在Java Web开发中,过滤器(Filter)和监听器(Listener)是两种非常重要的组件,它们主要用于增强应用程序的功能和管理应用程序的状态。本篇文章将详细解释这两种技术的使用、配置及其区别。 首先,我们来了解过滤...

    Servlet的监听器小DEMO

    Servlet监听器是Java Web开发中的一个重要组件,它允许开发者在特定事件发生时执行代码,比如在Web应用程序启动或停止时,或者当用户会话开始或结束时。在本DEMO中,我们将深入探讨如何创建和使用Servlet监听器,...

    javaweb_高级_过滤器_监听器

    【JavaWeb 高级:过滤器与监听器详解】 在JavaWeb开发中,过滤器(Filter)和监听器(Listener)是两种非常重要的组件,它们能够帮助我们实现更精细的控制和管理应用程序的行为。本篇将详细介绍过滤器的原理、使用...

    Servlet,过滤器和监听器的配置和使用.docx

    Servlet、过滤器和监听器是Java Web开发中的关键组件,它们在构建动态Web应用程序中扮演着重要角色。本文将详细阐述这三者的概念、配置和使用方法。 **Servlet** Servlet是一种Java类,它扩展了服务器的功能,特别...

    监听器访问计数过滤非法字符

    在IT行业中,监听器(Listener)和过滤器(Filter)是两种非常重要的组件,它们在Web应用程序中扮演着不可或缺的角色。本文将详细讲解如何利用监听器进行访问计数以及通过过滤器来过滤非法字符,以确保系统的安全性...

    关于监听器Listener和过滤器的小demo

    在Java Web开发中,监听器(Listener)和过滤器(Filter)是两个非常重要的概念,它们主要用于增强应用程序的功能和性能。下面将详细讲解这两个概念及其应用。 ### 监听器(Listener) 监听器是实现特定接口的Java...

    servlet过滤器和监听器

    Servlets可以嵌入在不同的Java Web服务器之中,因为用来编写Servlets的Servlet API对于服务器环境和协议没有任何特殊的要求,所以Servlets具有很强的可移植性,也不像利用CGI程序等其它方式那样具有性能局限。

    关于过滤器和监听器的使用模板

    在Java Web开发中,过滤器(Filter)和监听器(Listener)是两个非常重要的组件,它们主要用于增强应用程序的功能和管理应用程序的状态。以下是关于这两个概念的详细说明。 **过滤器(Filter)** 过滤器是Servlet...

Global site tag (gtag.js) - Google Analytics