javaweb中的监听器
来源:互联网 发布:文华财经编程教程 编辑:程序博客网 时间:2024/06/03 23:41
监听器:javaweb中监听器比较常用, 将它与事件源头绑定在一起就可以通过事件对象在事件源和监听器之间传递信息了。监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行。
javaweb中的有三种不同的监听类,分别对应三个不同的域:
下面三个接口是各个域创建销毁的时候将调用其对应的方法
ServletContext域:ServletContextListener接口
ServletRequet域:ServletRequestListener接口
session域: httpSessionListener接口
当三个域中的属性发生变化时,可以实现下面三个接口监听:
ServletContextAttributeListener接口
ServletRerquestAttributeListener接口
HttpSessionAttributeListener接口
只需要根据需求实现上述不同接口,让后在web.xml文件中配置监听器就可以是实现不同的监听器了
另外,对于session域有点不同,它还有 HttpSessionActivationListener 和 HttpSessionBindingListener 接口
这两个接口也叫session感知型接口,
HttpSessionBindingListener 接口:任何类实现了此接口,不仅可以感知自己本身是否被加入了session域中,还可以感知自己在session中的状态(是否被置换,是否被移除).
httpSessionActivaction 接口: 此接口是当被活化和钝化的时候被执行(活化:从硬盘加载到内存中,钝化:从内存移到硬盘中)。
看实例:
import javax.servlet.ServletContextAttributeEvent;import javax.servlet.ServletContextAttributeListener;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;/* * 编写ServletContext域的监听器需要实现ServletContextListener接口 * */public class MyServletContextListener implements ServletContextListener,ServletContextAttributeListener{ //当servletcontext对象被清除的时候,此方法会被执行 @Override public void contextDestroyed(ServletContextEvent arg0) { System.out.println("监听初始化事件:"+arg0); System.out.println("ServletContext对象被销毁了"); } //当servletContext对象被服务器创建的时候,此方法会被执行 @Override public void contextInitialized(ServletContextEvent arg0) { System.out.println("监听初始化事件:"+arg0); System.out.println("ServletContext对象被创建了"); }/* * * 实现ServletContextAttributeListener接口,可以监听当ServletContext对象中的属性改变时引起相应方法的调用 * */ @Override public void attributeAdded(ServletContextAttributeEvent arg0) { System.out.println("添加属性:"+arg0.getName()+",值:"+arg0.getValue()); } @Override public void attributeRemoved(ServletContextAttributeEvent arg0) { System.out.println("去除属性:"+arg0.getName()+",值:"+arg0.getValue()); } @Override public void attributeReplaced(ServletContextAttributeEvent arg0) { System.out.println("置换属性:"+arg0.getName()+",值:"+arg0.getValue()); }}
import javax.servlet.ServletContextAttributeEvent;import javax.servlet.ServletContextAttributeListener;import javax.servlet.ServletRequestEvent;import javax.servlet.ServletRequestListener;/* * * 每当一个请求发送到服务器的时候,都会调用requestinitialized()方法 * * */public class MyRequestLisntener implements ServletRequestListener,ServletContextAttributeListener{ @Override public void requestDestroyed(ServletRequestEvent arg0) { System.out.println("servletRequest 被销毁了"); } @Override public void requestInitialized(ServletRequestEvent arg0) { System.out.println("servletReqsuest :"+arg0.getServletRequest().getRemoteAddr()); } /* * 当ServletRequest对象中的属性值发生变化的时候,相应的方法将会被调用 * */ @Override public void attributeAdded(ServletContextAttributeEvent arg0) { System.out.println("在servletrequest中添加属性:"+arg0.getName()+"值:"+arg0.getValue()); } @Override public void attributeRemoved(ServletContextAttributeEvent arg0) { System.out.println("在servletrequest中去除属性:"+arg0.getName()+"值:"+arg0.getValue()); } @Override public void attributeReplaced(ServletContextAttributeEvent arg0) { System.out.println("在servletrequest中置换属性:"+arg0.getName()+"值:"+arg0.getValue()); }}
import javax.servlet.http.HttpSessionAttributeListener;import javax.servlet.http.HttpSessionBindingEvent;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;import org.apache.catalina.SessionEvent;import org.apache.catalina.SessionListener;public class MySessionLisntener implements HttpSessionListener,HttpSessionAttributeListener{ //每当服务器有一个新的连接的时候都会让创建一个新的session,此方法会被执行 @Override public void sessionCreated(HttpSessionEvent session) { // TODO Auto-generated method stub System.out.println("session:"+session.getSession().getId()+"被创建了"); } @Override public void sessionDestroyed(HttpSessionEvent session) { // TODO Auto-generated method stub System.out.println("session:"+session.getSession().getId()+"被销毁了"); } /* * 当session对象的属性发生变化时,相应的方法将会被调用 * @see javax.servlet.http.HttpSessionAttributeListener#attributeAdded(javax.servlet.http.HttpSessionBindingEvent) */ @Override public void attributeAdded(HttpSessionBindingEvent arg0) { System.out.println("在session中添加属性:"+arg0.getName()+"值:"+arg0.getValue()); } @Override public void attributeRemoved(HttpSessionBindingEvent arg0) { System.out.println("在servletrequest中去掉属性:"+arg0.getName()+"值:"+arg0.getValue()); } @Override public void attributeReplaced(HttpSessionBindingEvent arg0) { System.out.println("在servletrequest中置换属性:"+arg0.getName()+"值:"+arg0.getValue()); }}
感知型接口:
import javax.servlet.http.HttpSessionBindingEvent;import javax.servlet.http.HttpSessionBindingListener;public class User implements HttpSessionBindingListener{ private String name; private String phone; public User(String _name,String _phone) { this.name=_name; this.phone=_phone; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } /* * *实现了httpSeeionBindingListener接口的类 可以感知到自己在是否加入到了session中以及在session中的状态 *不需要在web.xml文件中配置 */ //被添加到session中 @Override public void valueBound(HttpSessionBindingEvent arg0) { System.out.println(arg0.getName()+"被添加到session中"); } //从session中被去除 @Override public void valueUnbound(HttpSessionBindingEvent arg0) { System.out.println(arg0.getName()+"从session中被清除"); }}
import java.io.Serializable;import javax.servlet.http.HttpSessionActivationListener;import javax.servlet.http.HttpSessionEvent;public class Customer implements HttpSessionActivationListener,Serializable { private static final long serialVersionUID = 1L; private String name; public Customer(String name) { this.name=name; } public void SetName(String name) { this.name=name; } public String GetName() { return name; } /* * * * 实现了HttpSessiontivaction接口的类可以随着session被活化或者钝化 * 活化:放到内存中 * 钝化:放到了硬盘中 * * * 这个需要在META-INF目录下创建context.xml文件 * * 文件内容为: * * 1 <Context>2 <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">3 <Store className="org.apache.catalina.session.FileStore" directory="gacl"/>4 </Manager>5 </Context> * * * 实现httpSessionActactionListener 和 httpSessionBindingListenr这个不需要在web.xml文件中配置 * * @see javax.servlet.http.HttpSessionActivationListener#sessionDidActivate(javax.servlet.http.HttpSessionEvent) */ @Override public void sessionDidActivate(HttpSessionEvent arg0) { System.out.println(name+"session:"+arg0.getSession().getId()+"被活化到硬盘中了"); } @Override public void sessionWillPassivate(HttpSessionEvent arg0) { System.out.println(name+"session:"+arg0.getSession().getId()+"被钝化到硬盘中了"); }}
至此,javaweb中的监听器就这些内容了,需要重点掌握,在整合三大框架的时候就需要用到。
- JavaWeb中的监听器
- JavaWeb中的监听器
- Javaweb中的监听器
- JavaWeb中的监听器
- JavaWeb中的监听器
- javaweb中的Listener监听器
- javaweb中的监听器
- JavaWeb中的监听器
- JavaWeb-监听器、Servlet规范中的监听器
- JavaWeb中的监听器和过滤器
- JavaWeb 监听器
- JavaWeb 监听器
- javaweb监听器
- JavaWeb监听器
- Javaweb监听器
- JavaWeb监听器
- javaweb监听器
- JavaWeb监听器
- 网络共享介绍
- python爬虫-下载图片到本地目录
- Android 动画详解之Tween动画
- JVM内存模型
- 解决Android拍照保存在系统相册不显示的问题
- javaweb中的监听器
- SpringMVC详解(三)------基于注解的入门实例
- Unity处女作学习总结--第二、三天
- Android 基于ImageSwitcher实现的左右切换图片
- 怎么使用乐鑫云端服务器软件
- 20170822
- hdu4372(第一类斯特林数) Count the Buildings
- 阅读《thinking in Java》 一切都是对象
- java中的String类常量池详解