`
super_robin
  • 浏览: 54116 次
  • 性别: Icon_minigender_1
  • 来自: 河南郑州
社区版块
存档分类
最新评论

J2EE常用Listener

    博客分类:
  • J2EE
阅读更多
ServletContextAttributeListener

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

ServletContextListener

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

HttpSessionListener

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


HttpSessionBindingListener

valueBound---被设置到session中(setAttribute)
valueUnbound---从session中解除(removeAttribute)

HttpSessionBindingListener和HttpSessionListener之间的最大区别: HttpSessionListener只需要设置到web.xml中就可以监听整个应用中的所有session。 HttpSessionBindingListener必须实例化后放入某一个session中,才可以进行监听。

从监听范围上比较,HttpSessionListener设置一次就可以监听所有session,HttpSessionBindingListener通常都是一对一的。

HttpSessionBindingListener 需要存储在session 里 ,比如
session.setAttribute("ListenerName", new ImplBindingListener(username));

正是这种区别成就了HttpSessionBindingListener的优势,我们可以让每个listener对应一个username,这样就不需要每次再去session中读取username,进一步可以将所有操作在线列表的代码都移入listener,更容易维护。

这里可以直接使用listener的username操作在线列表,不必再去担心session中是否存在username。

valueUnbound的触发条件是以下三种情况:

执行session.invalidate()时。

session超时,自动销毁时。

执行session.setAttribute("ListenerName", "其他对象");或session.removeAttribute("ListenerName");将listener从session中删除时。

因此,只要不将listener从session中删除,就可以监听到session的销毁


HttpSessionAttributeListener

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


HttpSessionActivationListener
使代码可以支持分布式环境
为了负载均衡或者fail-over,web容器可以迁移一个session到其他的jvm.
session的passivation是指非活动的session被写入持久设备(比如硬盘)。
activate自然就是相反的过程。在分布式环境中切换的属性必须实现serializable接口

一般情况下他和HttpSessionBindingListener一起使用
public class Fun implements HttpSessionBindingListener,HttpSessionActivationListener{
    //HttpSessionActivationListener
    public   void   sessionDidActivate(HttpSessionEvent   event){         
       logout("sessionDidActivate("+event.getSession().getId()+")");//激活
    } 
    public   void   sessionWillPassivate(HttpSessionEvent   event){
       //被传送到别的jvm或 写到硬盘
        logout("sessionWillPassivate("+event.getSession().getId()+")");
    }
    //HttpSessionBindingListener
    public   void   valueBound(HttpSessionBindingEvent   event){ 
       //被设置到session中(setAttribute)
        logout("valueBound("+event.getSession().getId()+event.getValue()+")");
    } 
    public   void   valueUnbound(HttpSessionBindingEvent   event){ 
       //从session中解除(removeAttribute)
        logout("valueUnbound("+event.getSession().getId()+event.getValue()+")");
    }
}


关于session超时配置
<session-config>   
 <session-timeout>1</session-timeout>  <!-- 零或负数将永不超时-->  
</session-config>



ServletRequestListener

requestDestroyed  request 响应后// 当发出请求,服务器响应后执行此方法


当请求的页面中包含了链接的css文件或js脚本文件等,都会相应增加触RequestListener方法的次数。
比如你在请求的页面中使用<link>元素引入了一个css文件,则请求该页面时会触发两次requestInitialized方法,也就是说浏览器会发送两次请求。
而HttpSessionListener不会发生这种情况。
会引起这种情况的元素有:
<link href="">
<script src="">
<jsp:include >

如果同时配置了ServletContextListener,HttpSessionListener,ServletRequestListener,容器启动时
会先调用ServletContextListener的contextInitialized方法。
然后当客户端有请求到来,会先调用ServletRequestListener的requestInitialized方法,然后再调用HttpSessionListener的sessionCreated方法,
如果发生上面所说的页面链接了其它文件的情况,则会再次触发ServletRequestListener的requestInitialized方法



ServletRequestAttributeListener
分享到:
评论

相关推荐

    j2ee 笔记 j2ee 笔记 j2ee 笔记

    ### J2EE 笔记概览 #### 一、J2EE基础知识介绍 J2EE(Java 2 Platform, Enterprise Edition)是Sun Microsystems为简化企业级...以上内容涵盖了J2EE基础知识及常用技术的概述,对于初学者来说是非常好的入门资料。

    J2EE编程技术期末复习题

    J2EE 编程技术期末复习题 J2EE 编程技术是 Java Enterprise Edition 的简称,是 Java 语言在企业级应用程序开发中的实现。J2EE technology framework 可分为三部分:组件技术、服务技术、通信技术。 一、填空题 1...

    j2ee及java面试题

    10. **轻量级框架**:虽然J2EE提供了很多服务,但在实际开发中,Spring、Struts、MyBatis等轻量级框架更为常用。面试中可能会问到这些框架的核心概念、应用场景和优势。 了解并掌握以上知识点,对于准备Java和Java ...

    j2EE 经典面试题

    - **请求与响应**:了解HttpServletRequest和HttpServletResponse对象的常用方法。 - **会话管理**:HTTP无状态特性及如何通过session进行会话跟踪。 - **过滤器与监听器**:理解Filter和Listener的作用,如字符...

    J2EE蓝图摘要及方法

    在J2EE开发过程中,常用的开发方法包括MVC(Model-View-Controller)设计模式,它将业务逻辑、视图呈现和用户交互分离,提高代码的可读性和可维护性。另外,DAO(Data Access Object)模式用于封装数据库操作,而...

    J2EE中关于web.xml文件的配置

    7. `&lt;listener&gt;`:Listener 元素,用于声明事件监听程序类,用于监听 Servlet 环境中的事件。 8. `&lt;servlet&gt;`:Servlet 元素,用于命名 Servlet 或 JSP 页面,并指定初始化参数或定制 URL。 9. `&lt;servlet-mapping&gt;`...

    j2ee mvc面试题下载

    - **Web层(Web Tier)**:处理HTTP请求,常用技术有Servlet、JSP、Filter、Listener等。 - **业务逻辑层(Business Tier)**:包含核心业务逻辑,常用EJB(Enterprise JavaBeans)和JavaBeans组件实现。 - **企业...

    j2ee web端知识及案例

    Model-View-Controller(MVC)模式是Web应用设计的常用架构,分离了业务逻辑、数据模型和用户界面。JSF是一种基于MVC的Java Web组件框架,提供了丰富的UI组件库和事件处理机制,简化了开发过程。JSF与EL(Expression...

    J2ee学习轨迹.txt

    - **ORM框架**:熟悉Hibernate、JDO、TopLink等常用的ORM框架。 - **DAO模式与ORM原理**:理解DAO(Data Access Object)模式的应用场景及ORM(Object-Relational Mapping)的基本原理。 #### Java Web与J2EE平台 ...

    Java实训教程 Java软件开发实战 web开发技术 第6章 listener 共21页.pptx

    在J2EE标准中,定义了几种常用的监听器类型,分别对应不同的事件处理需求。 ##### 1. `ServletContext`监听器 - **事件类型**: - **生命周期事件**:创建或者销毁事件。 - **属性变化事件**:`ServletContext`...

    J2EE企业级项目开发-1期 03 搭建SSH2开发框架技巧总结.doc

    在J2EE企业级项目开发中,SSH2框架是一个常用的选择,它由Struts2、Spring和Hibernate三个组件构成,提供了强大的MVC架构支持和持久层解决方案。本篇将总结SSH2开发框架的搭建技巧。 首先,理解SSH2框架的核心组件...

    oracle常用端口号

    - **3001** 至 **3301**:这些端口分别对应Oracle 9i AS Containers for J2EE的不同组件,包括AJP、RMI、JMS和HTTP Listener等服务。 - **4000** 至 **4002**:这些端口用于Oracle 9i AS Web Cache服务的各种管理...

    JavaWeb开发实战1200例源代码

    8. **过滤器(Filter)与监听器(Listener)**:在Java Web中,过滤器用于在请求被Servlet处理之前或之后进行预处理和后处理,如权限检查、字符编码转换等。监听器则用于监听特定事件,如会话创建、销毁、请求和响应...

    JUNIT快速上手手册

    JUnit 是 Java 开发者常用的单元测试框架,尤其对于 J2EE 开发者而言,掌握 JUnit 的使用至关重要。本文将详细介绍 JUnit 的基本知识、安装、单元测试的编写与执行,以及 JUnit 的断言方法。 首先,JUnit 是一个...

    Java Servlet应用程序接口查询Java.Servlet.API和SWT 应用程序接口查询SWT_API.rar

    Servlet API提供了诸如Servlet、Filter、Listener等关键组件,它们在J2EE(Java 2 Platform, Enterprise Edition)环境中扮演着重要角色。 Servlet是Java实现的服务器端小程序,它运行在Web服务器上,扩展了服务器...

    IT面试宝典

    7. **Java Web**:讨论Servlet、JSP、Filter、Listener等Web开发核心组件,以及MVC架构的理解。 8. **J2EE相关**:涵盖EJB、JMS、JNDI、JTA等企业级Java技术,以及Spring、Hibernate、MyBatis等主流框架的原理和...

    关于Java的基本知识,以及Java的发展

    消息和事件机制在Spring中用于不同组件间的通信,如使用ApplicationEvent和ApplicationListener实现事件驱动的编程模式。 3. **用Javascript评估用户输入密码的强度**:JavaScript是网页开发中常用的脚本语言,可以...

Global site tag (gtag.js) - Google Analytics