色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

java中Servlet監聽器的工作原理及示例詳解

瀏覽:13日期:2022-08-29 09:25:11

監聽器就是一個實現特定接口的普通java程序,這個程序專門用于監聽另一個java對象的方法調用或屬性改變,當被監聽對象發生上述事件后,監聽器某個方法將立即被執行。

監聽器原理

監聽原理

1、存在事件源 2、提供監聽器 3、為事件源注冊監聽器 4、操作事件源,產生事件對象,將事件對象傳遞給監聽器,并且執行監聽器相應監聽方法

監聽器典型案例:監聽window窗口的事件監聽器 例如:swing開發首先制造Frame**窗體**,窗體本身也是一個顯示空間,對窗體提供監聽器,監聽窗體方法調用或者屬性改變: * 關閉窗體時,調用windowListener 的windowclosing() , 傳遞windowEvent參數,表示窗體關閉事件對象 * 事件對象操作事件源,獲得事件源狀態

自定義監聽器

以上內容可以用下圖解釋:

java中Servlet監聽器的工作原理及示例詳解

通過person.addPersonListener(new PersonListener(){})使事件源與監聽器間產生聯系。

事件源(在事件源方法中創建事件對象):

監聽器(參數是事件對象)

事件對象(通過事件對象可以獲得事件源)

測試方法

對上的匿名類補充:匿名內部類的作用是創建一個實現接口的匿名類對象,含義是創建一個繼承自PersonListener的匿名類的對象),通過new表達式返回的引用被自動向上轉型為對PersonListener的引用

Servlet監聽器

(不需要配置,但是監聽器仍需要進行注冊) 在Servlet規范中定義了多種類型的監聽器,它們用于監聽的事件源分別為 ServletContext, HttpSession 和 ServletRequest 這三個域對象。

Servlet監聽器分為三大類 1、數據域對象創建和銷毀監聽器 2、數據域對象和屬性變更監聽器 3、綁定到 HttpSession 域中的某個對象的狀態的事件監聽器

(一)數據域對象創建銷毀監聽器 — 監聽三個與對象 (三個監聽器)

1、ServletContextListener : 用來監聽ServletContext對象的創建和銷毀

監聽創建 監聽銷毀 * ServletContext對象代表全局唯一對象,每個web工程會產生一個ServletContext,服務器啟動創建,服務器關閉銷毀

編寫監聽器 步驟一:編寫類實現特定監聽器接口 步驟二:注冊監聽器,不是通過事件源,而是在web.xml 進行配置 (監聽器和Servlet、Filter不同,不需要url配置,監聽器執行不是由用戶訪問的,監聽器 是由事件源自動調用的)

servletContext域對象何時創建和銷毀:

創建:服務器啟動針對每一個web應用創建servletcontext 銷毀:服務器關閉前先關閉代表每一個web應用的servletContext

ServletContextListener主流應用: 第一個:在服務器啟動時,對一些對象進行初始化,并且將對象保存ServletContext數據范圍內(因為在監聽器內可以獲得事件源對象) — 全局數據

例如:創建數據庫連接池

第二個:對框架進行初始化 例如:Spring框架初始化通過ServletContextListener (因為監聽器代碼在服務器啟動時執行)

Spring框架(配置文件隨服務器啟動加載) org.springframework.web.context.ContextLoaderListener

第三個:實現任務調度,啟動定時程序 (Timer、TimerTask) 使一個程序,定時執行

比如說每天晚上十二點給過生日的人進行生日祝福,中國移動對賬戶進行同步,會在服務器使用較少的時間,例如凌晨之類,啟動一段程序,進行同步

java.util.Timer 一種線程設施,用于安排以后在后臺線程中執行的任務。可安排任務執行一次,或者定期重復執行。 Timer提供了啟動定時任務方法 schedule * schedule(TimerTask task, Date firstTime, long period) 用來在指定一個時間啟動定時器,定期循環執行 * schedule(TimerTask task, long delay, long period) 用來在當前時間delay多少毫秒后啟動定時器 停止定時器,timer.cancel取消任務

2、HttpSession 數據對象創建和銷毀監聽器 —? HttpSessionListener

監聽Session對象創建 監聽Session對象銷毀

Session何時創建:request.getSession() Session何時銷毀:關閉服務器,Session過期,session.invalidate *Session過期時間通過web.xml配置(tomcat配置文件中),默認時間30分鐘

配置:

HttpSession監聽器

現有如下JSP頁面:

1.jsp

2.jsp

訪問1.jsp時會執行監聽器原因:因為如果觀察jsp的源碼,封閉式英語培訓jsp會被預處理成.java代碼(在tomcat中work文件夾下,參見http://blog.csdn.net/megustas_jjc/article/details/53462025),我們打開這個.java代碼的源碼:

java中Servlet監聽器的工作原理及示例詳解

其中的getSession的實現實際就是request.getSession()

3、HttpServletRequest對象的創建和銷毀監聽器 —- ServletRequestListener

—-監聽request對象創建 監聽request對象銷毀

Request何時創建:請求發起時創建 Request何時銷毀:響應結束時銷毀

例如:每次刷新界面都會創建銷毀一次

注意(創建銷毀次數由請求次數決定): 使用forward —- request創建銷毀幾次 —? 一次 使用sendRedirect —- request創建銷毀兩次 (兩次請求)

(二)ServletContext/HttpSession/ServletRequest中保存數據 創建、修改、移除監聽器

ServletContextAttributeListener 監聽ServletContext中屬性變化 HttpSessionAttributeListener 監聽HttpSession中屬性變化 ServletRequestAttributeListener 監聽ServletRequest中屬性變化

attributeAdded 監聽屬性添加 —- 當數據范圍對象沒有該屬性,第一次添加時調用執行 attributeRemoved 監聽屬性移除 —- 從一個數據范圍對象刪除一個已經存在屬性執行 attributeReplaced 監聽屬性替換 —? 當一個數據范圍已經存在一個屬性,向數據范圍添加相同名稱屬性觸發替換方法

例如,此處我們用HttpSessionAttributeListener舉例(ServletContextListener與ServletRequestListener同理):

JSP頁面

監聽器

注冊

注意:獲得返回值通過session.getAttribute(se.getName())

(三)被綁定Session對象,自我狀態感知監聽器

保存在 Session 域中的對象可以有多種狀態:綁定到 Session 中;從 Session 域中解除綁定;隨 Session 對象持久化到一個存儲設備中(鈍化);隨 Session 對象從一個存儲設備中恢復(活化)

被存放Session的Java對象,感知自我四種狀態變化 1、被綁定 2、被解除綁定 3、被鈍化 —? 數據從內存序列化硬盤 4、被活化 —- 數據從硬盤重新加載回內存

HttpSessionBindingListener實現接口的java對象,感知自己被綁定到Session或者從Session中解除綁定 HttpSessionActivationListener實現接口的java對象,感知從內存被鈍化硬盤上,雅思托福的區別從硬盤活化到內存中 實現這兩個接口的類不需要 web.xml 文件中進行注冊,都是由Session自主完成的,例如在存儲對象的時候會自動調用綁定

HttpSessionBindingListener

* 綁定對象方法 —- * 解除綁定方法 —?、當Session對象銷毀時,當中所有綁定對象解除綁定

JSP頁面:

HttpSessionActivationListener

* 感知對象被活化 * 感知對象被鈍化 使用場景:Session保存數據,很長一段時間沒用,但是不能銷毀Session對象,不想占用服務器內存資源 —? 鈍化(將服務器內存中數據序列化硬盤上)

JSP界面

讀取數據

注意

鈍化和活化應該由tomcat服務器 自動進行 —- 配置tomcat

配置context有幾個位置? 1、tomcat/conf/context.xml 對所有虛擬主機 所有web工程生效 2、tomcat/conf/Catalina/localhost/context.xml 對當前虛擬主機所有web工程生效 3、當前工程/META-INF/context.xml 對當前工程有效

鈍化后 it315目錄在哪里?在“tomcat/work/Catalina/localhost/項目名”目錄中

java對象如果想實現序列化,需要實現Serializable接口(因此上述Bean2實現Serializable接口,才可以被鈍化,并之后進行活化并讀取)

到此這篇關于java中Servlet監聽器的工作原理及示例詳解的文章就介紹到這了,更多相關java Servlet監聽器內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 国产亚洲欧美成人久久片 | 黄色三级欧美 | 成人 欧美| 91欧美亚洲| 成年人午夜影院 | 草草影院免费 | 91精品国产91久久久久久青草 | 日本高清在线中文字幕网 | 一区二区视频在线 | 久久综合日韩亚洲精品色 | 久久精品国产国产精品四凭 | 久久久久女人精品毛片九一 | 老人毛片 | 国产爽的冒白浆的视频高清 | 欧美精品久久天天躁 | 国产亚洲精品美女一区二区 | 欧美国产综合日韩一区二区 | 欧美成年黄网站色高清视频 | 国产午夜精品久久久久小说 | 成年女人免费毛片视频永久 | 99精品国产在现线免费 | japanese日本舒服丰满 | 久久精品爱国产免费久久 | 日产一区两区三区四区 | 暖暖免费高清日本一区二区三区 | 久草精品在线 | 免费人成网站免费看视频 | 欧美极品在线视频 | 99视频国产热精品视频 | 三级黄色片在线免费观看 | 久久精品视频日本 | 国产亚洲精品精品国产亚洲综合 | 一区二区三区视频免费 | 特级毛片www欧美 | 亚洲成人国产精品 | 日本免费不卡在线一区二区三区 | 高清一区在线 | 91久久精品一区二区三区 | 国产成人高清亚洲一区久久 | 毛片视频免费观看 | 和老外3p爽粗大免费视频 |