跟我学J2EE Web监听器组件——Web监听器组件技术及应用实例

跟我学J2EE Web监听器组件——Web监听器组件技术及应用实例
跟我学J2EE Web监听器组件——Web监听器组件技术及应用实例

1.1Web监听器组件技术及应用实例

1.1.1Web监听器组件技术概述

1、Web监听技术

(1)Web监听器组件技术

在Web应用中,可以部署一些特殊的Servlet类,通过它们从而实现对Web应用中的上下文信息、会话信息等的监听,最终实现在后台自动地完成某些特定的应用功能

(2)为什么要提供Web监听器

通过对这些信息的监听,从而可以在服务器的后台自动启动某些程序,完成一些特殊的应用。

2、Web应用的生命周期事件

(1)Web应用程序生命周期事件

当Servlet Contexts和Sessions被初始化或释放时,以及当向Servlet Contexts或Session 上添加或删除属性的时候,容器都将自动地通知对这些进行监听的“listener”对象。

Servlet生命周期事件与Java GUI中Swing的事件机制类似。

(2)生命周期事件的监听器接口的具体应用

1)如果希望让应用系统的程序监听Web应用的启动和停止事件,则需要实现

ServletContextListener接口;

2)如果希望让应用系统的程序去监听Session的创建和失效事件,则需要实现

HttpSessionListener接口

3、与Web应用的生命周期事件有关的两个接口

(1)ServletContextListener接口中的方法

(2)ServletContextAttributesListener接口中的方法

4、ServletContextListener接口中的方法

(1)void contextInitialized(ServletContextEvent e)方法

该方法在Web应用程序第一次准备处理Requests请求的时候(例如:Web Server启动并且ServletContext被加载和重新加载时)被执行。本方法返回之前不能够处理Http Requests

请求

(2)void contextDestroyed(ServletContextEvent e)

该方法在Web应用程序要被关闭的时候(例如:当Web Server关闭或当一个ServletContext 被移去或重新加载的时候) 被执行。本方法调用时Request请求处理已经停止

5、ServletContextAttributesListener接口中的方法

(1)void attributeAdded(ServletContextAttributeEvent e)

当属性被加到ServletContext上时调用

(2)void attributeRemoved(ServletContextAttributeEvent e)

当属性被从ServletContext上移走时调用

(3)void attributeReplaced(ServletContextAttributeEvent e)

当ServletContext上的属性被另一个属性所代替的时候调用

6、与会话有关的接口

(1)HttpSessionListener接口

(2)HttpSessionAttributesListener接口

7、HttpSessionListener接口

(1)void sessionCreated(HttpSessionEvent e)

当Session创建时被调用

(2)void sessionDestroyed(HttpSessionEvent e)

当Session被释放时或无效时被调用

8、HttpSessionAttributesListener接口

(1)void attributeAdded(HttpSessionBindingEvent e)

当属性被加到Session上时调用

(2)void attributeRemoved(HttpSessionBindingEvent e)

当属性被从Session上移去时调用

(3)void attributeReplaced(HttpSessionBindingEvent e)

当Session上的属性被另一个属性所代替的时候调用

9、生命周期事件的应用编程实现的步骤

(1)编程对应的生命周期事件类的程序代码

(2)并根据应用的需要将该类实现某一生命周期事件的监听器接口,并在该类中重写相应的生命周期事件处理的方法

(3)在web.xml中部署该事件类程序(

注意:由于监听是针对整个Web应用程序而言的,因此不需要象Filter组件那样设置标签。

(4)启动本Web应用系统

当Web应用的状态满足某一事件的触发条件时,容器将自动地触发对生命周期事件处理的方法调用。

1.1.2体验Web应用及会话的生命周期事件

1、在项目中添加一个监听器类——了解ServletContext有关的接口

(1)类名称为OnLineCounterListener,包名称为com.px1987.webcrm.listener 实现javax.servlet.ServletContextListener和javax.servlet.ServletContextListener接口

(2)编程该监听器类中对应的事件方法

package com.px1987.webcrm.listener;

import javax.servlet.ServletContextAttributeEvent;

import javax.servlet.ServletContextAttributeListener;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

public class OnLineCounterListener implements ServletContextAttributeListener,

ServletContextListener {

public OnLineCounterListener() {

}

@Override

public void attributeAdded(ServletContextAttributeEvent event) {

String parameterName=event.getName();

String parameterValue=event.getValue().toString();

System.out.println("attributeAdded方法被执行,并且parameterName="+parameterName+

",parameterValue="+parameterValue);

}

@Override

public void attributeRemoved(ServletContextAttributeEvent event) {

String parameterName=event.getName();

String parameterValue=event.getValue().toString();

System.out.println("attributeRemoved方法被执行,并且parameterName="+parameterName+

",parameterValue="+parameterValue);

}

@Override

public void attributeReplaced(ServletContextAttributeEvent event) {

String parameterName=event.getName();

String parameterValue=event.getValue().toString();

System.out.println("attributeReplaced方法被执行,并且parameterName="+parameterName+

",parameterValue="+parameterValue);

}

@Override

public void contextDestroyed(ServletContextEvent event) {

System.out.println("Web应用系统正在关闭!");

}

@Override

public void contextInitialized(ServletContextEvent arg0) {

System.out.println("Web应用系统正在启动!");

}

}

(3)部署该监听器

com.px1987.webcrm.listener.OnLineCounterListener

2、了解contextDestroyed和contextInitialized执行的时机

——了解ServletContextListener接口(1)部署本示例、并启动服务器

(2)再关闭服务器

3、了解ServletContextAttributeListener接口中的各个事件方法的执行时机(1)在某个测试页面添加下面的脚本代码

<%@ page pageEncoding="GB18030"%>

测试用的页面

<%

String parameter="测试用的字符串";

String newParameter="被修改后的字符串";

application.setAttribute("testString",parameter);

application.setAttribute("testString",newParameter);

application.removeAttribute("testString");

%>

(2)再部署和执行该测试页面http://127.0.0.1:8080/webcrm/testPageCache.jsp

1.1.3体验Web应用及会话的生命周期事件

1、HttpSession接口的应用实例

package com.px1987.webcrm.listener;

import javax.servlet.http.HttpSessionBindingEvent;

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

import javax.servlet.http.HttpSessionAttributeListener;

public class OnLineCounterListener implements HttpSessionListener,

HttpSessionAttributeListener {

@Override

public void attributeAdded(HttpSessionBindingEvent event) {

String parameterName=event.getName();

String parameterValue=event.getValue().toString();

System.out.println("attributeAdded方法被执行,并且parameterName="+parameterName+

",parameterValue="+parameterValue);

}

@Override

public void attributeRemoved(HttpSessionBindingEvent event) {

String parameterName=event.getName();

String parameterValue=event.getValue().toString();

System.out.println("attributeRemoved方法被执行,并且parameterName="+parameterName+

",parameterValue="+parameterValue);

}

@Override

public void attributeReplaced(HttpSessionBindingEvent event) {

String parameterName=event.getName();

String parameterValue=event.getValue().toString();

System.out.println("attributeReplaced方法被执行,并且parameterName="+parameterName+

",parameterValue="+parameterValue);

}

@Override

public void sessionCreated(HttpSessionEvent arg0) {

System.out.println("某个用户正在访问(下线)本系统!");

}

@Override

public void sessionDestroyed(HttpSessionEvent arg0) {

System.out.println("某个用户正在离开(下线)本系统!");

}

public OnLineCounterListener() {

}

}

2、部署本系统并启动浏览器访问任意的页面http://127.0.0.1:8080/webcrm/index.jsp

3、结束会话——关闭浏览器、超时、session.invalide() (1)以“关闭浏览器”的方式结束会话

注意:关闭浏览器时sessionDestroyed方法被执行两次!(2)以“会话超时”的方式结束会话

(3)利用代码结束会话http://127.0.0.1:8080/webcrm/testPageCache.jsp <%@ page pageEncoding="GB18030"%>

测试用的页面

<%

session.invalidate();

%>

注意:该方式能够产生“实时效果”!

4、了解HttpSessionAttributeListener接口中的各个事件方法的执行时机(1)在某个测试页面中添加下面脚本代码

<%@ page pageEncoding="GB18030"%>

测试用的页面

<%

String parameter="测试用的字符串";

String newParameter="被修改后的字符串";

session.setAttribute("testString",parameter);

session.setAttribute("testString",newParameter);

session.removeAttribute("testString");

%>

(2)执行该测试页面

5、体验监听器的可拔插性

在web.xml文件中将部署监听器的标签除掉,此时监听器将不再起作用。

Activiti 监听器的配置使用

Activiti 监听器的配置使用 一)流程监听器的配置 此监听器的作用是记录流程的启动和结束事件日志,详细参考类 cn.bc.workflow.activiti.delegate.ProcessLogListener 用Activiti Designer打开流程图,点击空白处,在Properties的Listeners中如下配置流程的start和end两个事件: 二)任务监听器的配置 此监听器的作用是记录任务的创建、分派和完成的事件日志,详细参考类 cn.bc.workflow.activiti.delegate.TaskLogListener 用Activiti Designer打开流程图,点击要配置的任务节点,在Properties的Listeners中如下配置任务的事件监听:

如下是自动将任务分配到岗位或岗位内用户的任务监听器的配置: 详见类cn.bc.workflow.activiti.delegate.Assign2GroupUserListener,监听器在流程图中需要配置为"java class"类型,Fields参数中有两种配置方式:1)岗位名称+保存组织ID的流程变量名(全局变量),2)岗位编码。 监听器会根据配置方式先获取岗位,然后自动获取岗位内的用户信息,如果岗位内只有一个用户,就直接将任务分配给此用户,否则分配给岗位。

三)流向或网关监听器的配置 此监听器的作用是记录流向的执行事件日志,在平台中是可选的,视具体情况按需配置,详细参考类cn.bc.workflow.activiti.delegate.FlowLogListener 用Activiti Designer打开流程图,点击要配置的流向或网关,在Properties的Listeners 中类似任务监听器的方式进行配置即可:

Java+Swing+常用事件和监听器接口

Swing 常用事件和监听器接口 AncestorEvent AncestorListener ancestorAdded(AncestorEvent e) ancestorMoved(AncestorEvent e) ancestorRemoved(AncestorEvent e) CaretEvent 通知感兴趣的参与者事件 源中的文本插入符已经发 生更改 CaretListener caretUpdate(CareEvente) ChangeEvent 通知感兴趣的参与者事件 源中的状态已经发生更改 ChangeListener stateChanged(ChangeEvent e) HyperlinkEvent 通知感兴趣的参与者发生 了与超文本链接有关的事 情 HyperlinkListener hyperlinkUpdate(HyperlinkEvent e) InternalFrameEvent 以事件源的形式添加对J InternalFrame对象的支持的 A WTEvent InternalFrameListener internalFrameActivated(InternalFrameEvent e) internalFrameClosed(InternalFrameEvent e) internalFrameClosing(InternalFrameEvent e) internalFrameDeactived(InternalFrameEvent e) internalFrameDeiconified(InternalFrameEvent e) internalFrameIconified(InternalFrameEvent e) internalFrameOpened(InternalFrameEvent e) ListDataEvent 定义一个列表更改的事件ListDataListener contentsChanged(ListDataEvent e) intervalAdded(ListDataEvent e) intervalRemoved(ListDataEvent e)

监听器与过滤器

监听器与过滤器 监听器简介 什么是监听器 1.能监听某个对象的状态变化的组件 2.监听域对象的变化 监听器相关的概念 1.事件源:被监听的对象- request、session、servletContext 2.监听器:监听事件源的对象- 8个监听器 3.注册监听器:监听器与事件源相绑定 4.响应行为:监听到事件源变化时,去做什么事情 监听器划分 1.三个监听域对象的创建与销毁ServletContextListener HttpSessionListener ServletRequestListener 2.三个监听域对象当中属性变化ServletContextAttributeListener HttpSessionAttributeListener ServletRequestAttributeListener

域监听器 ServletContext域监听器监听ServletContext域的创建与销毁的监听器ServletContextListenerServletContext域生命周期:服务器启动创建、服务器关闭销毁监听器的编写步骤: 1.编写一个监听器类去实现监听器接口 2.覆盖监听器的方法 3.需要在web.xml中进行配置 作用 1.初始化的工作:初始化对象、初始化数据、加载数据库驱动、连接池的初始化 2.加载一些初始化的配置文件 3.任务调度

HttpSessionListener 监听HttpSession域的创建与销毁的监听器HttpSessionListener HttpSession的生命周期:第一次调用request.getSession时创建、服务器关闭session 过期或手动销毁 应用场景:记录访问人数 过滤器介绍 什么是过滤器 1.filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行 2.可以对目标资源访问前后进行逻辑处理 过滤器编写步骤 1.编写一个过滤器的类实现Filter接口 2.实现接口中尚未实现的方法(主要是DoFilter方法)

第八讲 AWT和事件监听

第八讲AWT和事件监听打印本页 1 基本概念 下面几讲,我们就来学习AWT的各种容器和组件,并重点学习AWT的事件监听和处理方法。由于学习事件需要用到一些简单的构件,我们先学习几个简单的构件。现在,我们先来介绍AWT里面几个重要的概念:构件,容器,布局管理器和事件监听(AWT P4)。 1.1构件是图形用户界面的最小单位之一,它里面不再包含其他的成分. 构件的作用是完成与用户的一次交互,包括接受用户的一个命令,接受用户的一个文本输入,向用户显示一段文本或一个图形等。常用的构件有: 按钮构件 项目选择构件:复选框(Checkbox)列表(List或Choice) 文本构件:文本框文本区 对话框构件:对话框文件对话框提示框帮助 菜单构件:弹出式菜单复选框菜单 1.2容器 容器是用来组织构件的单元。常用的容器有:面板、窗口。 1.3布局管理器: 布局管理器用来布置容器和容器中的各个构件,比如他们的大小、位置等。AWT提供了几种标准的布局管理器。 1.4事件监听 要使点击鼠标、敲打键盘等实现特定的动作,我们需要捕捉事件并且加以实现。AWT里典型的事件有:鼠标事件、鼠标移动事件、键盘事件、窗口事件等。 我们通过学习最基本的构件和容器(标签、按钮和面板)来粗略理解这些概念。标签和按钮是显示标签的简单构件;而面板是AWT提供的最基本的容器。 2 几个简单的构件和容器 标签(https://www.360docs.net/doc/589222457.html,bel) 标签用来显示文本。 演示(StarterApplet) 面板(java.awt.Panel) 面板是一个通用的容器,在上面可以放置各种构件。 我们经常用的Applet类,其实就是面板的一个子类 按钮(java.awt.Button) 按钮具有三维外型,当它们被激活时触发按钮事件,用户可以根据按钮事件,做出适当的反应,比如执行一系列操作等。 演示 3 事件 AWT有两种事件处理模型:一种是基于继承的模型,它在AWT1.1或以前的版本中使用,现在已经逐渐被淘汰;另一种是基于授权的事件模型。我们主要学习给予授权的事件模型。 授权事件模型的原理很简单:事件源激发事件、事件监听器监听事件,最后执行事件。可以通过调用addXYZListener(XYZListner)方法向构件注册监听器。把监听器加到构件中以后,如果构件激发相应类型的事件,

键盘监听器与鼠标监听器

键盘监听器 键盘监听器KeyListener用来监听键盘事件。键盘事件有三种:KEY_PRESSED键按下了,KE Y_RELEASED键松开了,KEY_TYPED键按过了。每个键都有一个键码,普通键的键码就是ASC II码。键码可通过int getKeyCode()方法获得。Java设置了一种“虚拟键码”(Virtual K ey Code),用“VK_”作为前缀,例如VK_G。下面是某些特殊键的虚拟键码。 VK_LEFT/VK_RIGHT 左右方向键VK_CONTROL Ctrl键 VK_KP_UP 小键盘向上VK_ATL Alt键 VK_PAUSE 暂停键VK_SHIFT Shift键 VK_NUMBER0 小键盘数字0 VK_F1 功能键F1 VK_0 数字键0 VK_B 字母键B 虚拟键码对应的是键位,不区分大小写。要想知道大小写还必须查看修饰键(modifier key)。这由输入事件InputEvent的getModifere()方法得到,把返回值与常量SHIFT_MASK, CONT ROL_MASK, ALT_MASK比较,用以判定哪个修饰键处于“同时按下”状态。 监听器KeyListener有三个方法keyPressed(KeyEvent evt),keyReleased(KeyEvent evt), keyTyped(KeyEvent evt),分别用于相应事件发生后的处理。下面的例程中给自己的键盘监听器建立了showKeyEventMsg方法来显示按键信息。 除了getKeyCode()方法得到键码外,还可用getKeyChar()方法得到输入的字符,用getKey Text(code)方法得到输入的字符串。用isShiftDown()判断shift键是否被按下等。当按下Control键时getKeyText返回的是“ctrl",Alt和Shift也类似。 下面的例子演示得到键码和字符的方法,在命令行上显示结果。 例15 本例程演示键盘监听器后键码的用法。 /// // KeyEvt.java

JSP中的Filter拦截器和Listener监听器

JSP中的Filter过滤器和Listener监听器 1. JSP中的过滤器 1.1 什么是过滤器 过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet 或JSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择: (1)以常规的方式调用资源(即,调用servlet或JSP页面)。 (2)利用修改过的请求信息调用资源。 (3)调用资源,但在发送响应到客户机前对其进行修改。 (4)阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。 1.2 过滤器的基本原理 过滤器可以对客户的请求进行处理,处理完成后,它会交给下一个过滤器处理。这样,客户的请求在“过滤器链”里逐个处理,直到请求发送到目标为止。例如,某网站里有提交“修改业务数据”的网页,当用户填写完修改信息并提交后,服务器在进行处理时需要做两项工作:判断客户端的会话查看该用户是否有修改权限;对提交的数据进行统一编码。这两项工作可以在由两个过滤器组成的过滤链里进行处理。当过滤器处理成功后,把提交的数据发送到最终目标;如果过滤器处理不成功,将把视图派发到指定的错误页面。 1.3 过滤器的使用 开发Servlet过滤器的步骤如下:(1)编写实现Filter接口的类;(2)在web.xml中配置Filter。 1.3.1 实现Filter接口类 Filter接口定义了以下方法: 成员描述 destory() 由Web容器调用,初始化此Filter。 init(FilterConfig filterConfig) 由Web容器调用,初始化此Filter。 doFilter(ServletRequest request, 具体过滤处理代码,其中FilterChain参数非常重要,允许通ServletResponse response,FilterChain chain) 过当前过滤器时须要调用FilterChain.doFilter() 下面示例实现一个权限过滤器,若用户尚未登录(Session中没有保存用户信息),将回到登录页面;若已经登录则继续该请求。 public class SecurityFilter implements Filter {

事件监听器

不同的事件源可以产生不同类别的事件。例如,按钮可以发送一个ActionEvent 对象,而窗口可以发送WindowEvent对象。 AWT时间处理机制的概要: 1.监听器对象是一个实现了特定监听器接口(listener interface)的类的实例。 2.事件源是一个能够注册监听器对象并发送事件对象的对象。 3.当事件发生时,事件源将事件对象传递给所有注册的监听器。 4.监听器对象将利用事件对象中的信息决定如何对事件做出响应。 下面是监听器的一个示例: ActionListener listener = ...; JButton button = new JButton("OK"); button.addActionListener(listener); 现在,只要按钮产生了一个“动作事件”,listener对象就会得到通告。对于按钮来说,正像我们想到的,动作事件就是点击按钮。 为了实现ActionListener接口,监听器类必须有一个被称为actionPerformed 的方法,该方法接收一个ActionEvent对象参数。 class MyListener implements ActionListener { ...; public void actionPerformed(ActionEvent event) { //reaction to button click goes here } } 只要用户点击了按钮,JButton对象就会创建一个ActionEvent对象,然后调用listener.actionPerformed(event)传递事件对象。可以将多个监听器对象添加到一个像按钮这样的事件源中。这样一来,只要用户点击按钮,按钮就会调用所有监听器的actionPerformed方法。 实例:处理按钮点击事件 为了加深对事件委托模型的理解,下面以一个响应按钮点击事件的简单示例来说明所需要知道的细节。在这个示例中,想要在一个面板中放置三个按钮,添加三个监听器对象用来作为按钮的动作监听器。 在这个情况下,只要用户点击面板上的任何一个按钮,相关的监听器对象就会接收到一个ActionEvent对象,它表示有个按钮被点击了。在示例程序中,监听器对象将改变面板的背景颜色。 在演示如何监听按钮点击事件之前,首先需要讲解一下如何创建按钮以及如何将他们添加到面板中。 可以通过在按钮构造器中指定一个标签字符串、一个图标或两项都指定来创建一个按钮。下面是两个示例: JButton yellowButton = new JButton("Yellow"); JButton blueButton = new JButton(new ImageIcon("blue-ball.gif")); 将按钮添加到面板中需要调用add方法:

黑马程序员安卓教程:案例-短信监听器

黑马程序员安卓教程:案例-短信监听器 一、需求 系统接收到短信时会将该事件以有序广播(部分自定义的ROM可能已经修改了这个策略,比如:小米的MIUI系统)的形式发送出去,因此我们只需要自定义一个BroadCastReceiver监听该广播(android.provider.Telephony.SMS_RECEIVED)即可监听到短信的到来。由于该广播是有序的,因此如果将我们自定义的BroadCastReceiver配置了较高的优先级,那么我们就能先于系统短信app接收到该广播,然后终止该广播,从而就实现了短信拦截功能。 通过该案例我们可以学到: 1、什么是有序广播? 2、如 何终止有序广播3、如何从 广播中获取短信4、广播的 优先级概念 在该案例中我们要做一个类似短信黑名单的应用,主界面提供一个EditText和一个Button,让用户输入一个“黑名单” ,点击保存之后,如果该号码发短信过来,那么我们的应用就将其拦截。 布局界面很简单,如【文件1-6】所示。 【文件1-6】activity_main.xml 1. 9

5. 6. 11. 17. 18. 三、代码 在该工程中总共用到了两个类,一个是主界面对应的MainActivity,另外一个是广播接收者SmsListenerReceiver。 【文件1-7】MainActivity.java 1. package com.itheima.smslistener; 2. 3.import android.os.Bundle; 4.import android.text.TextUtils; 5.import android.view.View; 6.import android.widget.EditText; 7.import android.widget.Toast; 8.import android.app.Activity; 9.import android.content.SharedPreferences; 10./** 11.* 让用户输入要拦截的号码 12.* 13.* @author wzy2015-11-19 14.* 15.*/ 16.public class MainActivity extends Activity{ 17. 18.private EditText et_num; 19.private SharedPreferences sp; 20. 21.@Override 22.protected void onCreate(Bundle savedInstanceState){

弄懂事件源、事件对象和监听接口

事件源:组件,例如Button 事件对象:event,例如MouseEvent类的对象 事件监听接口:EventListener,例如MouseListener EventListener 接口是处理事件的主要方法。用户实现EventListener 接口,并使用AddEventListener 方法在EventTarget 上注册其侦听器。用户还应该在使用完侦听器后从其EventTarget 移除EventListener。 MouseListener用于接收组件上“感兴趣”的鼠标事件(按下、释放、单击、进入或离开)的侦听器接口。(要跟踪鼠标移动和鼠标拖动,请使用MouseMotionListener。) 旨在处理鼠标事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类MouseAdapter(仅重写所需的方法)。 然后使用组件的addMouseListener 方法将从该类所创建的侦听器对象向该组件注册。当按下、释放或单击(按下并释放)鼠标时会生成鼠标事件。鼠标光标进入或离开组件时也会生成鼠标事件。发生鼠标事件时,将调用该侦听器对象中的相应方法,并将MouseEvent 传递给该方法。 每个事件类型都有相对应的监听者接口。想要接受WindowEvent吗?那就实现WindowListener接口。 一般会用到事件监听接口中的某一种或几种方法,所以应该一般会用扩展抽象类MouseAdapter的方法。那是怎么个扩展法呢??? 虽然鼠标事情只有MouseEvent一种事件对象,却有不同的事件方法来表示不同类型的鼠标事件。 很重要的一句话:"实现监听接口让按钮有一个回头调用程序的方法。Interface正是声明调用(call-back)方法的地方" 下面用button、ActionEvent和ActionListener来说明事件源、事件对象和事件监听接口之间的关系: 1.先来看button怎样来添加一个监听接口 addActionListener(ActionListener l) ActionListener:继承AWTEvent,指示发生了组件定义的动作的语义事件。当特定于组件的动作(比如被按下)发生时,由组件(比如Button)生成此高级别事件。事件被传递给每一个ActionListener 对象,这些对象是使用组件的addActionListener 方法注册的,用以接收这类事件。 因为ActionListener是个接口,所以要用类来继承它,然后实现它的actionPerformed方法。actionPerformed方法定义如下: void actionPerformed(ActionEvent e)

Android事件监听器

第一种:匿名内部类作为事件监听器类 大部分时候,事件处理器都没有什么利用价值(可利用代码通常都被抽象成了业务逻辑方法),因此大部分事件监听器只是临时使用一次,所以使用匿名内部类形式的事件监听器更合适,实际上,这种形式是目前是最广泛的事件监听器形式。上面的程序代码就是匿名内部类来创建事件监听器的!!! 对于使用匿名内部类作为监听器的形式来说,唯一的缺点就是匿名内部类的语法有点不易掌握,如果读者java基础扎实,匿名内部类的语法掌握较好,通常建议使用匿名内部类作为监听器。 第二种:内部类作为监听器 将事件监听器类定义成当前类的内部类。1、使用内部类可以在当前类中复用监听器类,因为监听器类是外部类的内部类,2、所以可以自由访问外部类的所有界面组件。这也是内部类的两个优势。上面代码就是内部类的形式!! 第三种:Activity本身作为事件监听器

这种形式使用activity本身作为监听器类,可以直接在activity类中定义事件处理器方法,这种形式非常简洁。但这种做法有两个缺点:(1)这种形式可能造成程序结构混乱。Activity 的主要职责应该是完成界面初始化;但此时还需包含事件处理器方法,从而引起混乱。(2)如果activity界面类需要实现监听器接口,让人感觉比较怪异。 上面的程序让Activity类实现了OnClickListener事件监听接口,从而可以在该Activity类中直接定义事件处理器方法:onClick(view v),当为某个组件添加该事件监听器对象时,直接使用this作为事件监听器对象即可。 第四种:外部类作为监听器 ButtonTest类 当用户单击button按钮时,程序将会触发MyButtonListener监听器 外部MyButtonListener类 使用顶级类定义事件监听器类的形式比较少见,主要因为如下两个原因: 1、事件监听器通常属于特定的gui界面,定义成外部类不篮球提高程序的内聚性。 2、外部类形式的事件监听器不能自由访问创建gui界面的类中的组件,编程不够简洁。 但如果某个事件监听器确实需要被多个gui界面所共享,而且主要是完成某种业务逻辑的实现,则可以考虑使用外部类的形式来定义事件监听器类。 第五种:直接绑定到标签 Android还有一种更简单的绑定事件监听器的的方式,直接在界面布局文件中为指定标签绑定事件处理方法。 对于很多Android标签而言,它们都支持如onClick、onLongClick等属性,这种属性的属性值就是一个形如xxx (View source) 的方法的方法名。在布局文件中为button添加属性,如一代码:

java_listener监听器教程及实例

一.基础知识 JSP/Servlet 中的事件处理写过AWT或Swing程序的人一定对桌面程序的事件处理机制印象深刻:通过实现Listener接口的类可以在特定事件(Event)发生时,呼叫特定的方法来对事件进行响应。 其实我们在编写JSP/Servle程序时,也有类似的事件处理机制,所不同的是在JSP/Servlet 中是在web.xml中注册Listener,由Container在特定事件发生时呼叫特定的实现Listener 的类。 1. Servlet中的Listener和Event: 在JSP 2.0/Servlet 2.4中,共有八个Listener接口,六个Event类别。ServletContextListener接口 [接口方法] contextInitialized()与 contextDestroyed() [接收事件] ServletContextEvent [触发场景] 在Container加载Web应用程序时(例如启动 Container之后),会呼叫contextInitialized(),而当容器移除Web应用程序时,会呼叫contextDestroyed ()方法。ServletContextAttributeListener [接口方法] attributeAdded()、 attributeReplaced()、attributeRemoved() [接收事件] ServletContextAttributeEvent [触发场景] 若有对象加入为application(ServletContext)对象的属性,则会呼叫attributeAdded(),同理在置换属性与移除属性时,会分别呼叫attributeReplaced()、attributeRemoved()。 HttpSessionListener [接口方法] sessionCreated()与sessionDestroyed () [接收事件] HttpSessionEvent [触发场景] 在session (HttpSession)对象建立或被消灭时,会分别呼叫这两个方法。

Java事件处理机制- 事件监听器的四种实现方式

Java事件处理机制- 事件监听器的四种实现方式 自身类作为事件监听器 外部类作为事件监听器 匿名内部类作为事件监听器 内部类作为事件监听器 自身类作为事件监听器: Java代码复制代码收藏代码 import javax.swing.*; import java.awt.*; import java.awt.event.*; /** *Java事件处理机制:自身类作为事件监听器 *@author Winty(wintys@https://www.360docs.net/doc/589222457.html,) *@version 2008-12-3 */ class ThisClassEvent extends JFrame implements ActionListener{ JButton btn; public ThisClassEvent(){ super("Java事件监听机制"); setLayout(new FlowLayout()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); btn=new JButton("点击"); btn.addActionListener(this); getContentPane().add(btn); setBounds(200,200,300,160); setVisible(true); } /**************************************/ public void actionPerformed (ActionEvent e){ Container c=getContentPane(); c.setBackground(Color.red); } /**************************************/ public static void main(String args[]){

java事件监听机制

java事件监听机制 java中的事件机制的参与者有3种角色: 1.event object:就是事件产生时具体的“事件”,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中 2.event source:具体的接受事件的实体,比如说,你点击一个button,那么button就是event source,这样你必须使button对某些事件进行相应,你就需要注册特定的listener,比如说MouseEvent之中的MouseClicked方法,这是他就必须有了add方法 3.event listener:具体的对监听的事件类,当有其对应的event object产生的时候,它就调用相应的方法,进行处理。在windows程序设计里边这种相应使用callback机制来实现的 先看看jdk提供的event包:public interface EventListener:所有事件侦听器接口必须扩展的标记接口。public class EventObject extends Object implements Serializable所有事件状态对象都将从其派生的根类。所有Event 在构造时都引用了对象"source",在逻辑上认为该对象是最初发生有关Event 的对象。 在Java2处理事件时,没有采用dispatchEvent()-postEvent()-handleEvent()方式,采用了监听器类,每个事件类都有相关联的监听器接口。事件从事件源到监听者的传递是通过对目标监听者对象的Java方法调用进行的。 对每个明确的事件的发生,都相应地定义一个明确的Java方法。这些方法都集中定义在事件监听者(EventListener)接口中,这个接口要继承java.util.EventListener。实现了事件监听者接口中一些或全部方法的类就是事件监听者。 伴随着事件的发生,相应的状态通常都封装在事件状态对象中,该对象必须继承自java.util.EventObject。事件状态对象作为单参传递给应响应该事件的监听者方法中。发出某种特定事件的事件源的标识是:遵从规定的设计格式为事件监听者定义注册方法,并接受对指定事件监听者接口实例的引用。 开始之前首先问个问题:您熟悉java.util.EventObject 和java.util.EventListener两个类以及他们已有的子类吗? 如果你已经能够熟练使用jdk为我们提供的事件监听器,并且很熟悉MouseEvent, KeyEvent, WindowEvent等等这些jdk为我们准备好的事件,那么想必你对java的事件机制已经有所理解。但是也许你还是觉得虽然用起来没什么问题,但是原理还是有些糊涂,那么下面我们再进一步自己实现这些事件和监听器,我们把这个取名为自定义事件。 其实自定义事件在java中很有用处,我们有的时候想让自己的程序产生一个事件,但有不希望(或者不可能)用鼠标,键盘之类的输入设备进行操作,比如你写一个应用程序,在这个程序中一旦收到邮件就对邮件进行相关处理,对于“收到邮件”这个事件,jdk中就没有

servlet监听器

Servlet监听器: 1,什么是监听器? 其主要的功能就是监听Web的各种操作,当相关的操作触发后将产生的事件,并对此事件进行处理; 2,对application监听! 对application监听,实际上就是对ServletContext(Servlet上下文)监听,主要使用ServletContextListener和ServletContextAttributeListener 两个接口; ServletContext状态监听:ServletContextListener接口; 对Servlet上下文状态监听可以使用javax.servlet.ServletContextListener 接口,此接口的方法如下: No 方法类 型 描述 1 public void contextInitialized(ServletContextEvent sce) 普 通 容器启动时 触发 2 public void contextDestoryed(ServletContextEvent sce) 普 通 容器销毁时 触发 在ServletContext监听操作中,一旦触发了ServletContextListener接口中定义的事件后,可以通过ServletContextEvent进行事件的处理,此事件定义的方法如下: No 方法类 型 描述 1 public ServletContext getServletContext() 普 通 取得ServletContext对 象 可以通过getServletContext()方法取得一个ServletContext对象的实例,一个简单的ServletContextListenerDemo: Java代码 1.package com.keith.listener; 2. 3.import javax.servlet.ServletContextEvent; 4.import javax.servlet.ServletContextListener;

servlet的八大监听器

JSP/Servlet 中的事件处理写过AWT或Swing程序的人一定对桌面程序的事件处理机制印象深刻:通过实现Listener接口的类可以在特定事件(Event)发生时,呼叫特定的方法来对事件进行响应。 其实我们在编写JSP/Servle程序时,也有类似的事件处理机制,所不同的是在JSP/Servlet中是在web.xml中注册Listener,由Container在特定事件发生时呼叫特定的实现Listener的类。 1. Servlet中的Listener和Event: 在JSP 2.0/Servlet 2.4中,共有八个Listener接口,六个Event类别。ServletContextListener接口 [接口方法] contextInitialized()与 contextDestroyed() [接收事件] ServletContextEvent [触发场景] 在Container加载Web应用程序时(例如启动 Container之后),会呼叫contextInitialized(),而当容器移除Web应用程序时,会呼叫contextDestroyed ()方法。 ServletContextAttributeListener [接口方法] attributeAdded()、 attributeReplaced()、attributeRemoved() [接收事件] ServletContextAttributeEvent [触发场景] 若有对象加入为application(ServletContext)对象的属性,则 会呼叫attributeAdded(),同理在置换属性与移除属性时,会分别呼叫attributeReplaced()、attributeRemoved()。 HttpSessionListener [接口方法] sessionCreated()与sessionDestroyed () [接收事件] HttpSessionEvent [触发场景] 在session (HttpSession)对象建立或被消灭时,会分别呼叫这 两个方法。 HttpSessionAttributeListener [接口方法] attributeAdded()、 attributeReplaced()、attributeRemoved() [接收事件] HttpSessionBindingEvent [触发场景] 若有对象加入为session(HttpSession)对象的属性,则会呼叫attributeAdded(),同理在置换属性与移除属性时,会分别呼叫attributeReplaced()、 attributeRemoved()。 HttpSessionActivationListener [接口方法] sessionDidActivate()与 sessionWillPassivate() [接收事件] HttpSessionEvent [触发场景] Activate与Passivate是用于置换对象的动作,当session对象为了资源利用或负载平衡等原因而必须暂时储存至硬盘或其它储存器时(透过对象序列化),所作的动作称之为Passivate,而硬盘或储存器上的session对象

课题_JAVA事件监听器之Button类中的addActionListener(ActionListener l)方法

JAVA:事件监听器之Button类中的addActionListener(ActionListener l)方法 addActionListener public void addActionListener(ActionListener l) 添加指定的动作侦听器,以接收发自此按钮的动作事件。当用户在此按钮上按下或释放鼠标时,发生动作事件。如果 l 为 nu ll,则不抛出任何异常,也不执行任何动作。 java.awt.event 接口 ActionListener ——摘自:JDK6API 例子:使按钮具有关闭窗口的功能 1import javax.swing.*; 2import java.awt.*; 3import java.awt.event.*; 4public class FrameDemo 5{ 6//定义该图形中所需的组件的引用 7private Frame f; 8private Button bt; 9 10//方法 11FrameDemo()//构造方法 12{ 13madeFrame(); 14} 15 16public void madeFrame() 17{ 18 f = new Frame("My Frame"); 19 20//对Frame进行基本设置。 21 f.setBounds(300,100,600,500);//对框架的位置和大小进行设置 22 f.setLayout(new FlowLayout(FlowLayout.CENTER,5,5));//设计布局 23 24bt = new Button("My Button"); 25 26//将组件添加到Frame中 27 f.add(bt); 28 29//加载一下窗体上的事件 30myEvent(); 31 32//显示窗体 33 f.setVisible(true); 34} 35 36private void myEvent() 37{ 38 f.addWindowListener(new WindowAdapter()//窗口监听

Servlet事件监听器

序 一、概念 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。 二、Servle监听器 1、编写 Servlet监听器 (1)和编写其它事件监听器一样,编写servlet监听器也需要实现一个特定的接口,并针对相应动作覆盖接口中的相应方法。(2)和其它事件监听器略有不同的是,servlet监听器的注册不是直接注册在事件源上,而是由WEB容器负责注册,开发人员只需在web.xml文件中使用标签配置好监听器,web容器就会自动把监听器注册到事件源中。 (3)一个 web.xml文件中可以配置多个 Servlet 事件监听器,web服务器按照它们在web.xml 文件中的注册顺序来加载和注册这些 Serlvet事件监听器。 2、在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为ServletContext, HttpSession和ServletRequest这三个域对象。 (1)监听servletContext域对象创建和销毁 ①ServletContextListener接口用于监听 ServletContext 对象的创建和销毁事件。 ⅰ当 ServletContext对象被创建时,激发contextInitialized (ServletContextEvent sce)方法 ⅱ当 ServletContext对象被销毁时,激发contextDestroyed(ServletContextEvent sce)方法。 ②servletContext域对象何时创建和销毁: ⅰ创建:服务器启动针对每一个web应用创建servletcontext ⅱ销毁:服务器关闭前先关闭代表每一个web应用的servletContext (2)监听HttpSession域对象创建和销毁 ①HttpSessionListener接口用于监听HttpSession创建和销毁 ⅰ创建一个Session时,sessionCreated(HttpSessionEventse)方法将会被调用。 ⅱ销毁一个Session时,sessionDestroyed (HttpSessionEventse)方法将被调用。 ②Session域对象创建和销毁的时机创建:用户每一次访问时,服务器创建session 销毁:如果用户的session 30分钟没有使用,服务器就会销毁session,我们在web.xml里面也可以配置session失效时间 (3)监听HttpRequest域对象创建和销毁 ①ServletRequestListener接口用于监听ServletRequest 对象的创建和销毁。 ⅰRequest对象被创建时,监听器的requestInitialized方法将会被调用。 ⅱRequest对象被销毁时,监听器的requestDestroyed方法将会被调用。 ②servletRequest域对象创建和销毁的时机: ⅰ创建:用户每一次访问,都会创建一个reqeust ⅱ销毁:当前访问结束,request对象就会销毁 3、Servlet规范针对这三个对象上的操作,又把这多种类型的监听器划分为三种类型。 (1)监听三个域对象创建和销毁的事件监听器

相关主题
相关文档
最新文档