厚積薄發系列之listener
阿新 • • 發佈:2017-11-11
servlet void eve getname 時間 port 寫入 磁盤 none
1.listener的重要概念
- 作用: 監聽web中的域對象 ServletContext ServletRequest HttpSession
- 監聽內容
- 監聽三個對象的創建和銷毀
-
ServletContextListener 監聽ServletContext的創建和銷毀
- ServletRequestListener 監聽ServletRequest的創建和銷毀
- HttpSessionListener 監聽HttpSession的創建和銷毀
-
- 監聽三個對象的屬性的變化
- ServletContextAttributeListener 監聽ServeltContext域對象中 添加 刪除 替換 的操作
- ServletContextAttributeListener 監聽ServletContext域對象中 添加 刪除 替換 的操作
- HttpSessionAttributeListener 監聽HttpSession域對象中 添加 刪除 替換 的操作
- 監聽session中javabean的狀態
- HttpSessionActivationListener(鈍化和活化) 監聽是否將javaBean寫入磁盤中(鈍化)或者將javaBean從磁盤中活化到Session中
- HttpSessionBindingListener(綁定和解綁) 監聽javaBean是否綁定到Session域中
- 監聽三個對象的創建和銷毀
2.使用步驟
- 監聽三個web域對象的創建和銷毀 && 監聽三個對象的屬性的變化
- 編寫一個java類
- 實現ServletContextListener || ServletRequestListener || HttpSessionListener || ServletContextAttributeListener || ServletContextAttributeListener ||HttpSessionAttributeListener接口的其中一個,在web.xml中配置listener
1 <?xml version="1.0" encoding="UTF-8"?> 2
- 下面以ServletContextListener接口演示
-
1 package listener; 2 3 import javax.servlet.ServletContextEvent; 4 import javax.servlet.ServletContextListener; 5 6 public class ContextListener implements ServletContextListener { 7 8 @Override 9 public void contextDestroyed(ServletContextEvent arg0) { 10 // TODO Auto-generated method stub 11 System.out.println("ServletContext域對象銷毀了"); 12 } 13 14 @Override 15 public void contextInitialized(ServletContextEvent arg0) { 16 // TODO Auto-generated method stub 17 System.out.println("ServletContext域對像創建了"); 18 } 19 20 }
- 監聽session中javabean的狀態
- HttpSessionActivationListener(鈍化和活化)
- 解釋:在javaBean上實現HttpSessionActivationListener接口可以監聽到javaBean的鈍化或者活化操作
- 鈍化:Session中的實現了HttpSessionActivationListener接口的JavaBean在指定時間沒有活動就會被寫入磁盤中;
- 活化:當用戶在Session沒有過期的時間內再次響應操作,那麽就會從已經鈍化的磁盤中將此javaBean活化到內存中;
- 使用步驟
- 在javaBean中實現HttpSessionActivationListener接口
-
1 package domain; 2 3 import javax.servlet.http.HttpSessionActivationListener; 4 import javax.servlet.http.HttpSessionBindingEvent; 5 import javax.servlet.http.HttpSessionEvent; 6 7 public class User implements HttpSessionActivationListener { 8 private String username; 9 private String password; 10 11 public String getUsername() { 12 return username; 13 } 14 15 public void setUsername(String username) { 16 this.username = username; 17 } 18 19 public String getPassword() { 20 return password; 21 } 22 23 public void setPassword(String password) { 24 this.password = password; 25 } 26 27 public static void main(String[] args) { 28 System.out.println(User.class.getName()); 29 } 30 31 @Override 32 public void sessionDidActivate(HttpSessionEvent arg0) { 33 // TODO Auto-generated method stub 34 System.out.println("很久沒有使用了,寫入磁盤了"); 35 } 36 37 @Override 38 public void sessionWillPassivate(HttpSessionEvent arg0) { 39 // TODO Auto-generated method stub 40 System.out.println("用戶使用了,我又回到內存了"); 41 } 42 43 }
View Code - 在項目的META-INF目錄下新建Context.xml
- 文件內容如下
-
<?xml version="1.0" encoding="UTF-8"?> <Context> <!-- maxIdleSwap :1分鐘 如果session不使用就會序列化到硬盤. directory :itheima 序列化到硬盤的文件存放的位置. --> <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1"> <Store className="org.apache.catalina.session.FileStore" directory="itheima" /> </Manager> </Context>
- HttpSessionBindingListener(綁定和解綁)
- 解釋:在javaBean上使其實現HttpSessionBindingListener接口,當此javaBean被添加到HttpSession域對象中的時候或者從HttpSession域中移除的時候都會觸發javaBean接口實現的方法,不需要配置web.xml
-
1 package domain; 2 3 import javax.servlet.http.HttpSessionBindingEvent; 4 import javax.servlet.http.HttpSessionBindingListener; 5 6 public class User implements HttpSessionBindingListener { 7 private String username; 8 private String password; 9 10 public String getUsername() { 11 return username; 12 } 13 14 public void setUsername(String username) { 15 this.username = username; 16 } 17 18 public String getPassword() { 19 return password; 20 } 21 22 public void setPassword(String password) { 23 this.password = password; 24 } 25 26 public static void main(String[] args) { 27 System.out.println(User.class.getName()); 28 } 29 30 @Override 31 public void valueBound(HttpSessionBindingEvent arg0) { 32 // TODO Auto-generated method stub 33 System.out.println("我被添加到Session中啦~~~~~~~"); 34 } 35 36 @Override 37 public void valueUnbound(HttpSessionBindingEvent arg0) { 38 // TODO Auto-generated method stub 39 System.out.println("我從Session中被移除了~~~~~~~"); 40 } 41 42 }
- HttpSessionActivationListener(鈍化和活化)
厚積薄發系列之listener