一、监听三个域对象创建和销毁的事件监听器
1. ServletContextListener接口
创建类MyServletContextListener实现ServletContextListener
view plain
public class MyServletContextListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println(arg0.getServletContext() + "被创建了");
}
public void contextInitialized(ServletContextEvent arg0) {
System.out.println(arg0.getServletContext() + "被销毁了");
}
}
在web.xml文件中配置
view plain
<listener> <listener-class>cn.class3g.web.listener.MyServletContextListener
</listener-class>
</listener>
执行结果为:启动服务器时打印”被创建了“停止服务器时打印“被销毁了”;
2.HttpSessionListener接口
创建类HttpSessionListener实现HttpSessionListener
view plain
public class MyHttpSessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent arg0) {
System.out.println(arg0.getSource() + "被销毁了");
}
public void sessionDestroyed(HttpSessionEvent arg0) {
System.out.println(arg0.getSource() + "被创建了");
}
}
在web.xml文件中配置
view plain
<listener>
<listener-class>cn.csdn.web.listener.MyHttpSessionListener</listener-class>
</listener>
执行结果为:访问index.jsp时被创建了而且访问index.html不会被访问,因为如jsp页面中的page命令中有session="true"如果设置为"false"时就不会被创建了;
当刷新jsp页面时会再次创建再次打印;关闭浏览器时不会销毁,因为session默认存在30分钟;
HttpSessionListener的作用:统计在线人数
3. ServletRequestListener接口
创建类MyServletRequestListener实现ServletRequestListener
view plain
public class MyServletRequestListener implements ServletRequestListener {
public void requestDestroyed(ServletRequestEvent arg0) {
System.out.println("请求对象"+arg0.getSource() + "被销毁了");
}
public void requestInitialized(ServletRequestEvent arg0) {
System.out.println("请求对象"+arg0.getSource() + "被创建了");
}
}
在web.xml文件中配置
view plain
<listener>
<listener-class>cn.csdn.web.listener.MyServletRequestListener</listener-class>
</listener>
执行结果为:当访问idex.jsp时被创建随后被销毁了;
ServletRequestListener的实际用途:统计网站的请求数量,可以计算网站性能(实际应用不多)
二、监听三个域对象属性变化
1. ServletContextAttributeListener接口
创建类MyServletContextAttributeListener实现ServletContextAttributeListener
view plain
public class MyServletContextAttributeListener implements
ServletContextAttributeListener {
public void attributeAdded(ServletContextAttributeEvent arg0) {
ServletContext context = arg0.getServletContext();
Object data = arg0.getValue();
System.out.println(context + "中加入了"+data);
}
public void attributeRemoved(ServletContextAttributeEvent arg0) {
ServletContext context = arg0.getServletContext();
Object data = arg0.getValue();
System.out.println(context + "中删除了"+data);
}
public void attributeReplaced(ServletContextAttributeEvent arg0) {
ServletContext context = arg0.getServletContext();
Object data = arg0.getValue();
System.out.println(context + "中更新了"+data);
}
}
在web.xml文件中配置
view plain
<listener>
<listener-class>cn.csdn.web.listener.MyservletContextAttributeListener</listener-class>
</listener>
index.jsp中写到:
view plain
<%
application.setAttribute("param","xxx");
application.setAttribute("param","yyy");
application.removeAttribute("param");
%>
执行结果:
2. HttpSessionAttributeListener接口和ServletRequestAttributeListener接口
创建MyHttpSessionAndRequestAttributeListener类分别实现上面两个接口
view plain
public class MyHttpSessionAndRequestAttributeListener implements
HttpSessionAttributeListener, ServletRequestAttributeListener {
public void attributeAdded(HttpSessionBindingEvent se) {
System.out.println("session中增加了属性");
}
public void attributeRemoved(HttpSessionBindingEvent se) {
System.out.println("session中删除了属性");
}
public void attributeReplaced(HttpSessionBindingEvent se) {
System.out.println("session中属性被替换了");
}
public void attributeAdded(ServletRequestAttributeEvent srae) {
System.out.println("request中增加了属性");
}
public void attributeRemoved(ServletRequestAttributeEvent srae) {
System.out.println("request中删除了属性");
}
public void attributeReplaced(ServletRequestAttributeEvent srae) {
System.out.println("request中属性被替换了");
}
}
web配置:
view plain
<listener>
<listener-class>cn.csdn.web.listener.MyHttpSessionAndRequestAttributeListener</listener-class>
</listener>
index.jsp 写到:
view plain
<%
session.setAttribute("param","aaa");
session.setAttribute("param","bbb");
session.removeAttribute("param");
request.setAttribute("param","aaa");
request.setAttribute("param","bbb");
request.removeAttribute("param");
%>
执行结果:
request中增加了属性
session中增加了属性
session中属性被替换了
session中删除了属性
request中增加了属性
request中属性被替换了
request中删除了属性
三、感知 Session 绑定的事件监听器
1. HttpSessionBindingListener接口
实现了HttpSessionBindingListener接口的 JavaBean 对象可以感知自己被绑定到 Session 中和从 Session 中删除的事件
创建user实现HttpSessionBindingListener
view plain
public class User implements HttpSessionBindingListener{
private String name;
public void valueBound(HttpSessionBindingEvent event) {
System.out.println("到session中去");
}
public void valueUnbound(HttpSessionBindingEvent event) {
System.out.println("从session中移除");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
index.jsp中写:
view plain
<%
session.setAttribute("user",new User());
session.removeAttribute("param");
%>
不用配置web文件
执行结果:一访问网页
到session中去
从session中移除
实际用途:
统计网站在线用户(和在线人数不同),当前网站在线用户(作业)
2. HttpSessionActivationListener接口
实现了HttpSessionActivationListener接口的 JavaBean 对象可以感知自己被活化和钝化的事件
创建person类实现HttpSessionActivationListener接口
view plain
public class Person implements HttpSessionActivationListener, Serializable {
public void sessionDidActivate(HttpSessionEvent arg0) {
System.out.println("session从硬盘读入内存了");
}
public void sessionWillPassivate(HttpSessionEvent arg0) {
System.out.println("session被存到硬盘中去了");
}
}
index.jsp写入:
view plain
<%
session.setAttribute("person",new Person());
%>
启动服务访问index.jsp页面,等待一分钟,控制台打印了“session被存到硬盘中去了”然后再次刷新页面,控制台会打印“session从硬盘读入内存”再过一分钟控制台又会打印出“session被存到硬盘中去了”再次刷新会再打印“session从硬盘读入内存”
到服务器对应目录中查看钝化后的session文件
C:\apache-tomcat-7.0.22\work\Catalina\localhost\2011-11-24\class3g\AE40CDFE5F5018FAED45AACE025E4EC2.session
分享到:
相关推荐
Java监听器的实现和原理详解 Java监听器是一种非常重要的设计模式,在Java中广泛应用于事件驱动编程。监听器模式的主要思想是将事件源和事件处理器分离,使得事件源可以独立于事件处理器,提高了系统的灵活性和可...
监听器模式是Java设计模式中的一种行为型模式,主要用于监听某些事件的发生,并在事件发生时自动执行预定义的操作。在实际开发中,监听器模式可以用于多种场景,如UI事件处理、事件广播、异步通知等。 在监听器模式...
Oracle监听器是Oracle数据库系统的重要组成部分,它负责管理和控制数据库实例与客户端应用程序之间的网络通信。在Oracle数据库环境中,监听器是运行在服务器端的一个后台进程,它的主要职责是监听来自客户端的连接...
在Java Swing中,有多种类型的监听器,例如动作监听器(ActionListener)、鼠标监听器(MouseListener)、键盘监听器(KeyListener)和窗口监听器(WindowListener)等。例如,如果我们想要在用户点击按钮时执行某些...
在Android开发中,事件监听器(Event Listeners)是实现用户交互和响应各种事件的关键机制。标题提到的“android 外部类作为事件监听器类”是指将一个非匿名类(外部类)作为事件处理的对象,这在某些情况下可能是...
### Java监听器添加:四种监听器(内部、外部、内部匿名、自身) #### 一、引言 在Java中,监听器(Listener)是事件处理机制的重要组成部分,它主要用于响应用户或其他组件产生的事件。根据实现方式的不同,可以...
在IT行业中,监听器(Listener)和过滤器(Filter)是两种非常重要的组件,它们在Web应用程序中扮演着不可或缺的角色。本文将详细讲解如何利用监听器进行访问计数以及通过过滤器来过滤非法字符,以确保系统的安全性...
在Android开发中,除了`OnClickListener`外,还有许多其他监听器,如`OnLongClickListener`(长按监听器)、`OnCheckedChangeListener`(复选框或单选按钮的选中状态监听器)等,都可以通过匿名内部类的方式实现。...
### 基于RBAC与监听器机制设计作业管理软件 #### 一、项目背景与目标 本项目旨在设计一款适用于教育场景中的作业管理系统,利用角色基础的访问控制(Role-Based Access Control,简称RBAC)及监听器机制来实现安全...
1. **创建监听器类**:你需要创建一个类,并实现相关事件监听器接口。例如,如果你要处理鼠标事件,可以创建一个类实现MouseListener接口。 ```java public class MyMouseListener implements MouseListener { @...
### 如何配置Oracle监听器 在Oracle数据库管理与维护中,正确配置监听器是确保数据库服务正常运行的关键步骤之一。监听器的主要职责是接收客户端连接请求,并将其分发到相应的数据库实例。如果监听器配置不当,则会...
在Java GUI编程中,AWT和Swing提供了多种类型的监听器,如动作监听器(ActionListener)、鼠标监听器(MouseListener)、键盘监听器(KeyListener)以及组件监听器(ComponentListener)等。这些监听器允许我们对...
在JavaServer Faces (JSF)框架中,监听器和转换器是两个重要的组件,它们用于增强用户界面与后台数据处理的交互。在这个项目中,我们深入探讨了如何在JSF中有效地利用这两种机制。 首先,我们要理解JSF监听器的作用...
"Oracle 监听器深入讲解" Oracle 监听器是 Oracle 数据库的核心组件之一,负责管理 Oracle 数据库和客户端之间的通讯。下面是 Oracle 监听器的详细知识点: 1. Oracle 监听器概念 Oracle 监听器是一个独立的操作...
事件监听器的实现方式有多种,本篇文章将介绍四种常见的事件监听器实现方式:自身类作为事件监听器、外部类作为事件监听器、匿名内部类作为事件监听器和内部类作为事件监听器。 1. 自身类作为事件监听器 在这个...
### Java监听器和过滤器详解 #### 监听器概念及分类 监听器在Java Web开发中扮演着非常重要的角色,主要用于监听特定容器事件的发生,比如服务器对象的创建与销毁等,并根据这些事件做出相应的处理。它的工作原理...
当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。 例如:创建一个“人”类Class Person 人拥有吃的方法public void eat(){},我们的目的是,在这个人吃之前要提醒他洗手,所以我们要...
Web监听器是Java Web应用程序中的一个重要组件,它们允许开发者在特定事件发生时执行代码,比如在Servlet上下文初始化或销毁时、用户会话创建或结束时等。在Java Web开发中,监听器通过实现特定接口并配置在`web.xml...
在Java Web开发中,监听器(Listener)是不可或缺的一部分,它们可以用来监听应用程序中的特定事件,比如用户登录、会话创建或销毁等。本项目"一个简单的监听器案例项目"旨在帮助开发者理解如何在实际应用中使用监听...
### Java监听器基础知识与实践 #### 一、Java监听器概念 在Java中,监听器是一种用于处理特定事件的对象。当某个事件发生时(如按钮点击、键盘输入等),监听器将被调用来执行相应的操作。Java中的监听器机制是基于...