Listener学习笔记-- day01 监听器的使用

来源:互联网 发布:皇室战争数据 编辑:程序博客网 时间:2024/05/22 01:40

一、监听器

1、作用

Web可以通过监听器监听域对象的创建和销毁 ServletContext,Session,Request, 属性变更,javabean对象在session中的状态变更(绑定,解绑)

2、意义

观察服务器性能,粗略估计网站的当前的访问人数,网站并发量...

二、第一类监听器的使用

1、什么是第一类监听器

监听域对象的创建和销毁,这种监听器有实际应用意义

2、web.xml中配置监听器

  <listener>    <listener-class>cn.itcast.testListener.MyListener001</listener-class>  </listener>

3、监听 servletContext 的生命周期

package cn.itcast.testListener;import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;//测试ServletContext的创建和销毁//Servletcontext服务器启动就创建//Servletcontext服务器停止就销毁public class MyListener001 implements ServletContextListener {    public MyListener001() {        System.out.println("构造函数");    }    /**     * 初始化时执行的方法     */public void contextInitialized(ServletContextEvent sce) {System.out.println("ServletContext被创建了");ServletContext servletContext = sce.getServletContext();System.out.println(servletContext.hashCode());//此处的代码在服务器启动必须执行,类似于javaSe main函数所在类中的static代码段//监听ServletContext的应用场景://当我们自己定义设置了配置文件之后,希望在项目启动就将配置文件中的信息读取到,可以将读取配置文件的代码放置在此处//servletContext.setAttribute("", "");}/** * 销毁时执行的方法 */public void contextDestroyed(ServletContextEvent sce) {System.out.println("ServletContext被销毁了");ServletContext servletContext = sce.getServletContext();System.out.println(servletContext.hashCode());}}

4、监听 Session 的创建销毁

package cn.itcast.testListener;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;// request.getSession();//session何时被创建?  服务端首次碰到request.getSession();//session何时被销毁?  1_超时  2_session.invalidate();  3_非正常停止服务器public class MyListener002 implements HttpSessionListener {    public MyListener002() {    }    public void sessionCreated(HttpSessionEvent se)  {     System.out.println("sessin被创建");    System.out.println(se.getSession());    }    public void sessionDestroyed(HttpSessionEvent se)  {    System.out.println("sessin被销毁");    se.getSession();    }}

5、监听 Request 的创建销毁

package cn.itcast.testListener;import javax.servlet.ServletRequest;import javax.servlet.ServletRequestEvent;import javax.servlet.ServletRequestListener;import javax.servlet.http.HttpServletRequest;//request何时创建? 只要对服务端发起请求(serlvet/jsp/html/css/js/png),request就会被创建public class MyListener003 implements ServletRequestListener {public MyListener003() {}public void requestDestroyed(ServletRequestEvent sre) {System.out.println("request销毁");}public void requestInitialized(ServletRequestEvent sre) {System.out.println("request创建");ServletRequest servletRequest = sre.getServletRequest();HttpServletRequest req = (HttpServletRequest) servletRequest;// day41/BuyServletreq.getRequestURL();}}

三、第二类监听器的使用

1、什么是第二类监听器

监听域对象中属性的变更,没有实际应用 意义,看懂即可

2、监听 servletContext 中域对象属性的变更

package cn.itcast.testListener;import javax.servlet.ServletContextAttributeEvent;import javax.servlet.ServletContextAttributeListener;/** *  * @Description: 监听servletContext中域对象属性的变更 * @author wingzhe * @date 2017年7月14日 上午10:35:40 * @version V1.0 */public class MyListener004 implements ServletContextAttributeListener {public MyListener004() {}/* * 添加属性 */public void attributeAdded(ServletContextAttributeEvent scab) {System.out.println("servletcontext中被添加了属性");}public void attributeReplaced(ServletContextAttributeEvent scab) {System.out.println("servletcontext中的属性被替换了");}public void attributeRemoved(ServletContextAttributeEvent scab) {System.out.println("servletcontext中的属性被移除了");}}

3、监听 Session 中属性的变更

package cn.itcast.testListener;import javax.servlet.http.HttpSessionAttributeListener;import javax.servlet.http.HttpSessionBindingEvent;/** *  * @Description: 监听session中属性的变更 * @author wingzhe * @date 2017年7月14日 上午10:41:00 * @version V1.0 */public class MyListener005 implements HttpSessionAttributeListener {public MyListener005() {}public void attributeRemoved(HttpSessionBindingEvent se) {System.out.println("session中的属性被移除了");}public void attributeAdded(HttpSessionBindingEvent se) {System.out.println("session中的属性被增加了");}public void attributeReplaced(HttpSessionBindingEvent se) {System.out.println("session中的属性被替换了");}}

4、监听 request 中属性的变更

package cn.itcast.testListener;import javax.servlet.ServletRequestAttributeEvent;import javax.servlet.ServletRequestAttributeListener;/** *  * @Description: 监听request中属性的变更 * @author wingzhe * @date 2017年7月14日 上午10:41:36 * @version V1.0 */public class MyListener006 implements ServletRequestAttributeListener {public MyListener006() {}public void attributeAdded(ServletRequestAttributeEvent srae) {System.out.println("request中的属性被添加了");}public void attributeRemoved(ServletRequestAttributeEvent srae) {System.out.println("request中的属性被移除了");}public void attributeReplaced(ServletRequestAttributeEvent srae) {System.out.println("request中的属性被替换了");}}

四、第三类监听器

1、作用

监听 JavaBean 对象在 session 中状态的变更,包括绑定和解绑

2、应用

package cn.itcast.testListener;import javax.servlet.http.HttpSessionBindingEvent;import javax.servlet.http.HttpSessionBindingListener;/** * * @Description: 监听javaBean在session中状态变更* @author wingzhe  * @date 2017年7月14日 上午10:57:32 * @version V1.0 */public class MyListener007 implements HttpSessionBindingListener {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public MyListener007() {}public void valueUnbound(HttpSessionBindingEvent event) {System.out.println("bean对象被解绑了");}public void valueBound(HttpSessionBindingEvent event) {System.out.println("bean对象被绑定了");}}

<%  MyListener007  ml=new MyListener007();  ml.setName("jack");//将JAVABEAN对象绑定在session中  session.setAttribute("demo", ml);  //将JAVABEAN对象从session移除  session.removeAttribute("demo");  %>

3、测试JavaBean 对象的钝化活化

package cn.itcast.testListener;import java.io.Serializable;import javax.servlet.http.HttpSessionActivationListener;import javax.servlet.http.HttpSessionEvent;//测试JAVABean对象的钝化和活化//钝化:当session被保存到硬盘上的时候,session中关联的JAVABean对象也应该被保存到硬盘上,这个过程钝化//活化:当session从硬盘上加载到内存中的时候,session中关联的JAVABean对象也应该被加载到内存,,这个过程活化//如果想让某个JAVABEAN对象被持久化,这个JAVABEAND对象必须实现序列化接口public class MyListener008 implements HttpSessionActivationListener, Serializable {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public MyListener008() {}public void sessionDidActivate(HttpSessionEvent se) {System.out.println("javaBean对象被活化了");}public void sessionWillPassivate(HttpSessionEvent se) {System.out.println("javaBean对象被钝化了");}}

<%  MyListener008  ml=new MyListener008();  ml.setName("jack");//将JAVABEAN对象绑定在session中  session.setAttribute("user", ml);    %>


原创粉丝点击