『壹』 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監聽器原理
Java最新的事件處理方法是基於授權事件模型,事件源生成事件並將其發送至一個或多個監聽器,監聽器簡單地等待,直到它收到一個事件。一旦事件被接受,監聽器將處理這些事件,然後返回。
事件:在授權事件模型中,事件是一個描述事件源狀態改變的對象。 通過滑鼠、鍵盤與GUI界面直接或間接交互都會生成事件。如:按下一個按鈕、通過鍵盤輸入一個字元、選擇列表框中的一項、點擊一下滑鼠等。
事件源:事件源是一個生成事件的對象
一個事件源可能會生成不同類型的事件,事件源提供了一組方法,用於為事件注冊一個或多個監聽器。
每種事件的類型都有其自己的注冊方法。一般形式為:publicvoidadd<EventType>Listener(TypeListenere)
AWT採取的事件控制過程:監聽器對象屬於一個類的實例,這個類實現了一個特殊的介面,名為「監聽者介面」
事件源是一個對象,它可以注冊一個或多個監聽器對象,並向其發送事件對象。
事件源將在發生事件時向所有注冊的監聽器發送事件對象。
監聽器對象使用事件對象中的信息來確定它們對事件的響應
事件模型:
基於代理(授權)事件模型,事件處理是一個事件源授權到一個或者多個事件監聽器。其基本原理是:組件激發事件,事件監聽器監聽和處理事件,可以調用組件的add<EventType>Listener方法向組件注冊監聽器。把其加入到組件以後,如果組件激發了相應類型的事件,那麼定義在監聽器中的事件處理方法會被調用。
此模型主要由以三種對象為中心組成
事件源由它來激發產生事件
是產生或拋出事件的對象。
事件監聽器由它來處理事件
實現某個特定EventListener介面,此介面定義了一種或多種方法,事件源調用它們以響應該介面所處理的每一種特定事件類型。
事件具體的事件類型
事件類型封裝在以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();