`
wuyixin20091001
  • 浏览: 5758 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Servlet过滤器、监听器

阅读更多
Note1:
1  在过滤器filter和监听器listener的应用中,发现在web.xml中即使把filter的配置写在前边,但发布以后,启动tomcat却发现先
是执行监听器,再执行过滤器。停止服务后,先退出过滤器,再停止监听。
  2  发布以后会先进入监听器,再进入过滤器。然后对所有的客户端和服务器端操作进行监听。并且在发布后执行监听是先destroy
,然后init(初始化).
  3  重新发布后执行过滤器退出,监听器destroy ,然后监听器init(初始化),过滤器初始化,对于已经发布好的项目在tomcat
里是直接init, 然后过滤器执行.例如重启服务器。
  4  req.getRequestURI().toString().endsWith("hongshu.jsp")可以得到输入到浏览器的地址。

Note2:
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这三个对象里存取数据的变化。


Note3:
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
分享到:
评论

相关推荐

    servlet 过滤器做的简单登陆demo

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

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

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

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

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

    Servlet过滤器与监听器

    Servlet过滤器与监听器

    Servlet过滤器与监听器.doc

    Servlet过滤器和监听器是Java Servlet技术中两个重要的组件,它们极大地增强了Web应用程序的功能和灵活性。Servlet过滤器在Servlet 2.3规范中被引入,主要用于处理通用任务,如请求预处理、响应后处理,以及诸如编码...

    servlet过滤器与监听器.pdf

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

    servlet过滤器1

    综上所述,Servlet过滤器和监听器是Java Web开发中两个关键的工具,它们扩展了服务器的功能,提高了代码的可复用性和可维护性,为复杂的Web应用提供了灵活的管理和控制手段。通过合理使用这两个特性,开发者可以实现...

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

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

    servlet中的过滤器与监听器

    在Servlet技术中,过滤器...总结,Servlet过滤器和监听器是Servlet技术中的关键组件,它们提供了强大的功能,可以增强应用程序的安全性、性能和可维护性。开发者应熟练掌握这些工具,以便在实际项目中灵活运用。

    servlet过滤器和监听器

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

    jsp中servlet过滤器和侦听器

    而过滤器(Filter)和侦听器(Listener)是Servlet规范中的两个重要概念,它们增强了应用的功能和灵活性。 **过滤器(Filter)** 过滤器在JSP中起到中介的作用,它们可以拦截HTTP请求和响应,对数据进行处理或修改...

    Servlet过滤器与侦听器.ppt

    侦听器(Listener)则是Servlet容器中的事件监听器,它们监听特定的事件,如session的创建、销毁、属性改变,或是请求初始化、销毁等。通过实现各种接口,如`HttpSessionListener`、`ServletRequestListener`等,...

    javaweb_高级_过滤器_监听器

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

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

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

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

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

    大河网servlet+jsp+jdbc的java原生小项目,包含了servlet过滤器和监听器的简单应用

    servlet原生的过滤器需要在web.xml文件中配置,需要注意的是异步请求不能直接响应重定向,应当向前端返回302的状态码并由前端重定向到login.html页面 原生的德鲁伊数据库连接池获取connection的步骤 没有mybatis的...

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

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

    servlet过滤器

    关于servlet过滤器和监听器的ppt,对于学习servlet的人来说,是必不可少的。

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

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

    JavaWeb Servlet过滤监听应用.zip

    在JavaWeb中,Servlet和Filter是两个核心组件,而监听器(Listener)则提供了更高级的功能,帮助开发者管理和监控应用状态。这个"JavaWeb Servlet过滤监听应用.zip"文件包含了关于如何在实际项目中运用这些概念的...

Global site tag (gtag.js) - Google Analytics