导航:首页 > 编程语言 > java全局监听

java全局监听

发布时间:2024-06-24 04:32:55

‘壹’ java中的事件监听是怎样实现随时监听的,是通过线程吗

java中的事件监听不是通过线程实现的,它是通过一种注册--通知机制实现的。在java的设计模式中,有一种模式叫:观察者模式,和这个类似。

‘贰’ java如何实现:一个一直在运行的监听程序,每当监听到数据,就把数据发给jsp页面

方法1:可以利用ServletContext类的对象application解决,这个属于整个web应用都公用的内部对象。例如在监听器中
public class GetConnListener implements ServletContextListener {
//例如这个是要传的数据
String data="0";

//当此web应用被访问后启用该方法

public void contextInitialized(ServletContextEvent sce) {

//创建application
ServletContext application=sce.getServletContext();

//将数据存入application的属性中
application.setAttribute("Data",data);}
然后再JSP页面,的JSP脚本中写入
String data=(String)sapplication.getAttribute("Data");
out.print(data);
就能狗获取和输出这个数据了。
方法二便是直接在JAVA中把数据存入数据库,JSP从数据库中读出数据。

‘叁’ java监听器原理



  1. 一个事件源可能会生成不同类型的事件,事件源提供了一组方法,用于为事件注册一个或多个监听器。

  2. 每种事件的类型都有其自己的注册方法。一般形式为:publicvoidadd<EventType>Listener(TypeListenere)

  3. AWT采取的事件控制过程:监听器对象属于一个类的实例,这个类实现了一个特殊的接口,名为“监听者接口”

  4. 事件源是一个对象,它可以注册一个或多个监听器对象,并向其发送事件对象。

  5. 事件源将在发生事件时向所有注册的监听器发送事件对象。

  6. 监听器对象使用事件对象中的信息来确定它们对事件的响应


  1. 基于代理(授权)事件模型,事件处理是一个事件源授权到一个或者多个事件监听器。其基本原理是:组件激发事件,事件监听器监听和处理事件,可以调用组件的add<EventType>Listener方法向组件注册监听器。把其加入到组件以后,如果组件激发了相应类型的事件,那么定义在监听器中的事件处理方法会被调用。


  1. 事件源由它来激发产生事件

  2. 是产生或抛出事件的对象。

  3. 事件监听器由它来处理事件

  4. 实现某个特定EventListener接口,此接口定义了一种或多种方法,事件源调用它们以响应该接口所处理的每一种特定事件类型。

  5. 事件具体的事件类型

  6. 事件类型封装在以java.util.EventObject为根的类层次中。当事件发生时,事件记录发生的一切事件,并从事件源传播到监听器对象

‘肆’ 如何用java实现自动监听处理jsp页面的

一、监听域对象中属性的变更的监听器

域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器。

这三个监听器接口分别是, HttpSessionAttributeListener 和,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换的事件,同一个事件在这三个接口中对应的方法名称完全相同,只是接受的参数类型不同。

1.1、attributeAdded 方法

当向被监听对象中增加一个属性时,web容器就调用事件监听器的attributeAdded方法进行响应,这个方法接收一个事件类型的参数,监听器可以通过这个参数来获得正在增加属性的域对象和被保存到域中的属性对象
各个域属性监听器中的完整语法定义为:

public void attributeAdded(ServletContextAttributeEvent scae)
public void attributeReplaced(HttpSessionBindingEvent hsbe)
public void attributeRmoved(ServletRequestAttributeEvent srae)

1.2、attributeRemoved 方法

当删除被监听对象中的一个属性时,web容器调用事件监听器的attributeRemoved方法进行响应
各个域属性监听器中的完整语法定义为:

public void attributeRemoved(ServletContextAttributeEvent scae)
public void attributeRemoved (HttpSessionBindingEvent hsbe)
public void attributeRemoved (ServletRequestAttributeEvent srae)

1.3、attributeReplaced 方法

当监听器的域对象中的某个属性被替换时,web容器调用事件监听器的attributeReplaced方法进行响应
各个域属性监听器中的完整语法定义为:

public void attributeReplaced(ServletContextAttributeEvent scae)
public void attributeReplaced (HttpSessionBindingEvent hsbe)
public void attributeReplaced (ServletRequestAttributeEvent srae)

1.4、监听器范例:

编写监听器监听ServletContext域对象的属性值变化情况,代码如下:

package me.gacl.web.listener;

import java.text.MessageFormat;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.;

/**
* @ClassName: My
* @Description: ServletContext域对象中属性的变更的事件监听器
* @author: 孤傲苍狼
* @date: 2014-9-11 下午10:53:04
*
*/
public class My implements
{

@Override
public void attributeAdded(ServletContextAttributeEvent scab) {
String str =MessageFormat.format(
"ServletContext域对象中添加了属性:{0},属性值是:{1}"
,scab.getName()
,scab.getValue());
System.out.println(str);
}

@Override
public void attributeRemoved(ServletContextAttributeEvent scab) {
String str =MessageFormat.format(
"ServletContext域对象中删除属性:{0},属性值是:{1}"
,scab.getName()
,scab.getValue());
System.out.println(str);
}

@Override
public void attributeReplaced(ServletContextAttributeEvent scab) {
String str =MessageFormat.format(
"ServletContext域对象中替换了属性:{0}的值"
,scab.getName());
System.out.println(str);
}
}

在web.xml文件中注册监听器

<listener>
<description>My监听器</description>
<listener-class>me.gacl.web.listener.My</listener-class>
</listener>

编写Test.jsp测试页面

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
<title>监听器测试</title>
</head>

<body>
<%
//往application域对象中添加属性
application.setAttribute("name", "孤傲苍狼");
//替换application域对象中name属性的值
application.setAttribute("name", "gacl");
//移除application域对象中name属性
application.removeAttribute("name");
%>
</body>
</html>

运行结果如下:

从运行结果中可以看到,ServletContextListener监听器成功监听到了ServletContext域对象(application)中的属性值的变化情况。

‘伍’ java涓涓轰粈涔堣佽剧疆鐩戝惉鍣锛屾湁浠涔堢敤锛

鐚鍝ヨВ绛旓细
1銆乸rivate JButton jb=new JButton("鎸夐挳");杩椤彞璇濆0鏄庝简涓涓鎸夐挳锛屽悕瀛楀彨jb銆
2銆乯b.addActionListener(this);杩欓噷缁檍b闾d釜鎸夐挳璁剧疆浜嗙洃钖锛岄粯璁や负镣瑰嚮瑙﹀彂锛屽綋铹朵綘鍐欑殑杩欎釜鐩戝惉链夌偣镐寮倊
3銆佺偣鍑绘寜阍甹b瑙﹀彂鐩戝惉澶勭悊鏂规硶actionPerformed锛屽湪杩欓噷鍙浠ュ仛浣犳兂瑕佺殑镎崭綔锛屼綘浠g爜瀹炵幇镄勬槸鏀瑰彉lab杩欎釜label镙囩剧殑鍐呭广
4銆佽呖浜巎ava涓涓轰粈涔堣佺敤鐩戝惉锛岃繖灏卞儚阈惰岃呯洃鎺т竴镙凤纴鐩戣嗕綘镄勪竴涓句竴锷锛岄摱琛岃呯洃鎺ф槸涓轰简鎹曟崏姣忎釜杩涢摱琛岀殑浜虹殑锷ㄤ綔锛岄勯槻鍗遍橹镄勫彂鐢熴
java涓锅氱洃钖钖屾牱鏄涓轰简鐩戣嗘煇涓瀹㈡埛绔锷ㄤ綔鐢ㄧ殑锛屼竾涓浣犵粰鎴戞闷镰村潖镐庝箞锷烇纸鐩戝惉镄勪綔鐢ㄨ繙涓嶆㈠傛わ级锛屽綋铹朵篃镀忓钩镞剁敓娲讳腑涓嶆槸镓链夌殑鍦版柟閮借佹斁鐩戞带锛岃佷笉灏辨病娉曡繃浜嗭纴java涓涔熶笉鏄镓链夌殑鍦版柟閮借佹斁鐩戝惉锛屽叿浣揿摢閲岃佹斁鐩戝惉锛屼笉璇ユ槸鍦ㄨ炬湰閲屽︾殑锛屽簲璇ユ牴鎹瀹为檯宸ュ巶銆佸叕鍙哥殑闇姹傛潵瀹氥

‘陆’ java濡备綍鍏ㄥ眬鐩戝惉阌鐩树簨浠

java鎻愪緵浜嗕袱涓浜嬩欢渚﹀惉鎺ュ彛鐢ㄦ潵绠$悊榧犳爣绉诲姩鍜岄敭鐩桦姩浣滐纴鍒嗗埆鏄疢ouseMotionListener鍜孠eyListener锛屽彲浠ョ敤瀹冧滑𨱒ユ崟鎹夐紶镙囧拰阌鐩桡纴杩欎袱涓渚﹀惉鍣ㄩ兘链夊緢澶х殑闄愬埗锛氶紶镙囩洃钖鍙链夊湪榧犳爣浣崭簬Java绋嫔簭镓鍦ㄧ殑绐楀彛锣冨洿涔嫔唴镓嶈兘链夋晥锛岃岄敭鐩樼洃钖闄愬埗镟翠弗镙硷纴浠呭綋Java绋嫔簭鎴愪负褰揿墠镄勬椿锷ㄧ獥鍙f椂镓嶆湁鏁堛傚緢鏄剧劧锛屽崟绾鐢↗ava𨱒ュ疄鐜板叏灞忓箷銆佹墍链夌▼搴忛紶镙囧拰阌鐩樼殑璇濆姩鏄涓嶈岀殑銆

‘柒’ 鍏充簬java镄勭洃钖鍣

1銆乸ublic void addWindowListener(WindowListener l)娣诲姞鎸囧畾镄勭獥鍙d睛钖鍣锛屼互浠庢ょ獥鍙f帴鏀剁獥鍙d簨浠躲傚傛灉 l 涓 null锛屽垯涓嶆姏鍑轰换浣曞纾甯革纴涓斾笉镓ц屼换浣曟搷浣溿

杩欎釜鏄疉PI涓镄勬柟娉曞畾涔夛纴姝ゆ柟娉曞弬鏁颁负鎺ュ彛WindowListener锛屼换浣曞疄鐜拌ユ帴鍙g殑绫婚兘鍙浠ヤ綔涓哄弬鏁般

2銆乸ublic abstract class WindowAdapterimplements WindowListener, WindowStateListener, WindowFocusListener

鎺ユ敹绐楀彛浜嬩欢镄勬娊璞¢傞厤鍣ㄧ被銆傛ょ被涓镄勬柟娉曚负绌恒傛ょ被瀛桦湪镄勭洰镄勬槸鏂逛究鍒涘缓渚﹀惉鍣ㄥ硅薄銆

镓╁𪾢姝ょ被鍙鍒涘缓 WindowEvent 渚﹀惉鍣ㄥ苟涓烘墍闇浜嬩欢閲嶅啓璇ユ柟娉曘傦纸濡傛灉瑕佸疄鐜
WindowListener 鎺ュ彛锛屽垯蹇呴’瀹氢箟璇ユ帴鍙e唴镄勬墍链夋柟娉曘傛ゆ娊璞$被灏嗘墍链夋柟娉曢兘瀹氢箟涓
null锛屾墍浠ュ彧闇阍埚瑰叧蹇幂殑浜嬩欢瀹氢箟鏂规硶銆傦级

浣跨敤镓╁𪾢镄勭被鍙浠ュ垱寤轰睛钖鍣ㄥ硅薄锛岀劧钖庝娇鐢ㄧ獥鍙g殑 addWindowListener
鏂规硶钖戣ョ獥鍙f敞鍐屼睛钖鍣ㄣ傚綋阃氲繃镓揿紑銆佸叧闂銆佹縺娲绘垨锅灭敤銆佸浘镙囧寲鎴栧彇娑埚浘镙囧寲钥屾敼鍙树简绐楀彛鐘舵佹椂锛屽皢璋幂敤璇ヤ睛钖鍣ㄥ硅薄涓镄勭浉鍏虫柟娉曪纴骞跺皢
WindowEvent 浼犻掔粰璇ユ柟娉曘

3銆佸傛灉鎴戞兂鍦ㄤ唬镰佷腑涓娆℃т娇鐢ㄦ煇涓绫伙纸鎶借薄绫绘垨鍏蜂綋绫伙级鎴栨帴鍙o纴鍙浠ヤ娇鐢ㄥ尶钖岖被镄勬柟寮忥纴杩欐牱涓嶉渶镊宸卞畾涔変竴涓狭y***绫伙纴铹跺悗鍐崭娇鐢锛屾瘆杈冩柟渚裤傜敤娉曞氨鏄鐩存帴鍦╪ew WindowAdapter()钖庨溃锷犲叆绫诲畾涔夛纴鍦ㄥ叾涓瀹炵幇鎴栬嗙洊鏂规硶灏卞彲浠ヤ简銆

鍖垮悕绫讳笉鏄杩斿洖鍊硷纴钥屾槸鐩稿綋浜峦ew String(钬渉ello钬)杩欑岖殑镓╁𪾢褰㈠纺銆傛垜瑙夊缑鍖垮悕绫荤殑链澶氱敤澶勫氨鏄锷犵洃钖鍣ㄦ椂銆

闄勪笂WindowAdapter婧愪唬镰侊细


implementsWindowListener,WindowStateListener,WindowFocusListener
{
publicvoidwindowOpened(WindowEvente){}

publicvoidwindowClosing(WindowEvente){}

publicvoidwindowClosed(WindowEvente){}

publicvoidwindowIconified(WindowEvente){}

publicvoidwindowDeiconified(WindowEvente){}

publicvoidwindowActivated(WindowEvente){}

publicvoidwindowDeactivated(WindowEvente){}

publicvoidwindowStateChanged(WindowEvente){}

publicvoidwindowGainedFocus(WindowEvente){}

publicvoidwindowLostFocus(WindowEvente){}
}

‘捌’ 什么是java侦听器

1、监听器也叫Listener,是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。当增加一个HttpSession时,就激发sessionCreated(HttpSessionEvent se)方法,这样
就可以给在线人数加1。
2、常用的监听接口有以下几个:
1)监听对ServletContext属性的操作,比如增加、删除、修改属性。
2)、ServletContextListener监听ServletContext。当创建ServletContext时,激发contextInitialized(ServletContextEvent sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEvent sce)方法。
HttpSessionListener监听HttpSession的操作。当创建一个Session时,激发session Created(HttpSessionEvent se)方法;当销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se)方法。
4)HttpSessionAttributeListener监听HttpSession中的属性的操作。当在Session增加一个属性时,激发attributeAdded(HttpSessionBindingEvent se) 方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent se)方法;当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se) 方法。
3、参考样例example:随服务器启动
<web-app>
<listener>
<listener-class>com.tb.listener.CountStartListener</listener-class>
</listener>

package com.tb.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpServlet;
import com.tb.timertask.DoCountTask;
public class CountStartListener extends HttpServlet implements ServletContextListener
{
private static final long serialVersionUID = 1824920962239905170L;
public CountStartListener()
{
// TODO Auto-generated constructor stub
}
public void contextDestroyed(ServletContextEvent arg0)
{
// TODO Auto-generated method stub
}
public void contextInitialized(ServletContextEvent arg0)
{
DoCountTask.dotask();

阅读全文

与java全局监听相关的资料

热点内容
阿里云服务器登录密码忘了怎么办 浏览:495
linuxwwwdata 浏览:992
用苹果终端java编译 浏览:364
安卓怎么拼接截屏 浏览:17
如何从安卓手机上修改wifi密码 浏览:226
安卓12一加如何升级 浏览:86
冒险小虎队pdf下载 浏览:542
程序员黑话今晚加班 浏览:930
androidgetmethod 浏览:798
编程输出1112 浏览:792
加密货币矿怎么样 浏览:212
信息流优化师和程序员 浏览:101
pythonkivy框架 浏览:734
xshell怎样返回上一条命令 浏览:489
python函数内存机制 浏览:829
手机国际网络服务器地址 浏览:398
安卓系统投影仪怎么连接外接设备 浏览:816
阴线向下接进20日均线选股源码 浏览:433
穴位图pdf 浏览:46
高频量化算法 浏览:909