Javaweb监听器(2)
屬性監聽器:ServletRequestAtttributeListener/HttpSeessionAttributeListener/ServletContextAttributeListener
這里可以直接拿HttpSeessionAttributeListener來示例
首先來寫一個實現他的接口類:
package comgqx.b_attr;import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent;public class MySesssionAttribute implements HttpSessionAttributeListener{//屬性添加@Overridepublic void attributeAdded(HttpSessionBindingEvent event) {// TODO Auto-generated method stub//首先要獲取sessionHttpSession session=event.getSession();//獲取添加的屬性Object object=session.getAttribute("name");System.out.println("添加的屬性是:"+object);}//屬性移除@Overridepublic void attributeRemoved(HttpSessionBindingEvent event) {// TODO Auto-generated method stubSystem.out.println("屬性移除了!");}//屬性被替換@Overridepublic void attributeReplaced(HttpSessionBindingEvent event) {// TODO Auto-generated method stub//獲取session對象HttpSession session=event.getSession();// 獲取替換之前的值Object oldObject=event.getValue();System.out.println("舊值:"+oldObject);//獲取新值Object object=session.getAttribute("name");System.out.println("新的sessiom值是:"+object);}}來寫一個jsp頁面,寫一句簡單的話
session.setAttribute("name", "gqxing");配置到服務器上去(web.xml)
<!-- 屬性監聽器Session --><listener><listener-class>comgqx.b_attr.MySesssionAttribute</listener-class></listener>訪問相關的jsp頁面可以看到如下結果:
然后我們在jsp去修改代碼如下:
session.setAttribute("name", "gqxing"); //屬性移除session.removeAttribute("name");清除緩存后,繼續去訪問,發現先關的語句被執行了。如下:
繼續去修改jsp頁面,如下,來些事替換session中的相關值
<% session.setAttribute("name", "gqxing"); //屬性移除//session.removeAttribute("name");//屬性替換session.setAttribute("name", "test");%>清除緩存,繼續訪問,就會看到替換的語句,這里要注意的是,我們不經在HttpSessionAttributeListener的實現類的attributeReplaced()方法中得到新的值,還可以通過getValue()方法得到被替換的舊值,如下:
?
?HttpSessionBindingListener:監聽對象綁定、解除綁定到session上的事件
步驟:
對象實現此接口,在把對象綁定、解除綁定帶session上就會自動觸發監聽代碼。
示例代碼:
package comgqx.b_attr;import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent;public class MySesssionAttribute implements HttpSessionAttributeListener{//屬性添加@Overridepublic void attributeAdded(HttpSessionBindingEvent event) {// TODO Auto-generated method stub//首先要獲取sessionHttpSession session=event.getSession();//獲取添加的屬性Object object=session.getAttribute("name");System.out.println("添加的屬性是:"+object);}//屬性移除@Overridepublic void attributeRemoved(HttpSessionBindingEvent event) {// TODO Auto-generated method stubSystem.out.println("屬性移除了!");}//屬性被替換@Overridepublic void attributeReplaced(HttpSessionBindingEvent event) {// TODO Auto-generated method stub//獲取session對象HttpSession session=event.getSession();// 獲取替換之前的值Object oldObject=event.getValue();System.out.println("舊值:"+oldObject);//獲取新值Object object=session.getAttribute("name");System.out.println("新的sessiom值是:"+object);}}在jsp頁面寫入如下代碼:
session.setAttribute("admin", new Admin()); session.removeAttribute("admin");然后去訪問,會看到控制臺的看到如下的結果(有時候沒有清楚緩存,在測試這個的時候會發現一些語句會重復,如若是第一次訪問是去創建Admin對象,沒有加入清除對象的語句,第二次加入清除對象的語句,再去訪問,會看到兩句“Admin對象已經從session中移除了!”的語句)
?
?應用舉例:可以作為上線提醒,比如qq,當一個好友上線的時候,系統會提示你的好友“****”上線了
HttpSessionBindingListener和前面的聲明周期屬性的監聽器的區別是:
不用再web.xml上配置,因為監聽的對象是自己創建的對象,不是服務器創建的對象。
?
轉載于:https://www.cnblogs.com/helloworldcode/p/6116881.html
總結
以上是生活随笔為你收集整理的Javaweb监听器(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mvcc摘抄
- 下一篇: Error:Execution fail