厚积薄发系列之listener
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了厚积薄发系列之listener相关的知识,希望对你有一定的参考价值。
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 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 3 <listener> 4 <listener-class>listener.ApplicationInitListener</listener-class> 5 </listener> 6 </web-app>
- 下面以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 }
- 在项目的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的主要内容,如果未能解决你的问题,请参考以下文章
解决移动端报错:Unable to preventDefault inside passive event listener due to target being treated as……(代码片段