zoukankan      html  css  js  c++  java
  • JavaWeb学习之监听器Listener

    JavaEE主要学习Servlet和JSP技术,其中servlet技术主要包括servlet、listener、filter

    一、监听器Listener概述

    监听器就是监听某个对象的状态变化的组件

    监听器的使用步骤:

    1、事件源:被监听的对象    -----》 三个域对象request   session   servletContext

    2、监听器:监听事件源对象   事件源对象的状态的变化都会触发监听器    ----》共有8个

    3、注册监听器:将监听器与事件源进行绑定

    4、响应行为:监听器监听到事件源状态变化时,所涉及的功能代码  -----》程序员编写的代码

     二、监听器有哪些

    第一维度:按照被监听的对象划分:ServletRequest域、HttpSession域、ServletContext域

    第二维度:监听的内容划分:监听域对象的创建与销毁、监听域对象的属性变化

    三、监听三大域对象的创建于销毁的监听器

    1、监听ServletContext域的创建与销毁的监听器ServletContextListener

           1)servlet域的生命周期:

           何时创建:服务器启动创建

           何时销毁:服务器关闭销毁

           2)监听器的使用步骤:

            a、编写一个监听器类去实现监听器接口

            b、重写监听器的方法

            c、需要在web.xml中进行配置---注册

            3)监听的方法

             4)配置文件

            5)ServletContextListener监听器的主要作用

                a、初始化的工作:初始化对象、初始化数据 ---加载数据库驱动、连接池的初始化

                b、加载一些初始化的配置文件---spring的配置文件

                c、任务调度---定时器---Timer/TimerTask

                任务调度:

    package com.oracle.demo;
    
    import java.util.Date;
    import java.util.Timer;
    import java.util.TimerTask;
    
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    
    public class MyServletContextListener implements ServletContextListener {
    
    	@Override
    	// 监听servletContext域何时被创建
    	public void contextInitialized(ServletContextEvent sce) {
    		// TODO Auto-generated method stub
    		// 可以获取域名称
    		// sce.getServletContext();
    		System.out.println("servletContext创建了.........");
    		Timer timer = new Timer();
    		// task代表要执行的任务
    		// firstTime代表初始时间
    		// period要隔多长时间去执行任务
    		timer.scheduleAtFixedRate(new TimerTask() {
    
    			@Override
    			public void run() {
    				// TODO Auto-generated method stub
    				System.out.println("涨钱了。。。");
    			}
    		}, new Date(), 5000);
    	}
    
    	@Override
    	// 监听servletContext域何时被销毁
    	public void contextDestroyed(ServletContextEvent sce) {
    		// TODO Auto-generated method stub
    		System.out.println("servletContext销毁了.........");
    	}
    
    }
    

    2、监听HttpSession域的创建与销毁的监听器HeepSessionListener

         1)HttpSession对象的生命周期

              何时创建:第一次调用request.getSession时创建

              何时销毁:服务器关闭销毁、session过期、手动销毁

          2)HttpSessionListener的方法

    3、监听ServletRequest域创建与销毁的监听器ServletRequestListener

         1)ServletRequest的生命周期

              何时创建:每一次请求都会创建request

              何时销毁:请求结束

          2)ServletRequestListener的方法

    四、监听三大域对象的属性变化

       1)域对象的通用的方法

             setAttribute(name,value)---触发添加属性的监听器的方法、当有该类型时再次添加会将其覆盖

              getAttribute(name)

              removeAttribute(name)---触发删除属性的监听器的方法

        2)ServletContextAttributeListener监听器

        配置文件

        

         3)HttpSessionAttributeListener监听器(同上)

         4)ServletRequestAttributeListener监听器(同上)

    五、与session中的绑定的对象相关的监听器(对象感知监听器)

         1)即将要被绑定到session中的对象的几种状态

               绑定状态:就一个对象被放到session域中

               解绑状态:就是这个对象从session域中移除了

               钝化状态:将session内存中的对象持久化(序列化)到磁盘

               活化状态:就是将磁盘上的对象再次恢复到session内存中

    package com.oracle.demo;
    
    import java.io.IOException;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import com.oracle.demo1.Car;
    import com.oracle.demo1.Person;
    
    public class TestServlet extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// ServletContext sc = this.getServletContext();
    		// sc.setAttribute("name", "houzi");
    		// sc.setAttribute("name", "bajie");
    		// sc.removeAttribute("name");
    		// 测试对象绑定与解绑
    		// HttpSession session = request.getSession();
    		// Person p = new Person();
    		// p.setId("1");
    		// p.setName("bajie");
    		// session.setAttribute("Person", p);
    		// session.removeAttribute("Person");
    		// 测试对象的钝化与活化
    		HttpSession session = request.getSession();
    		Car c = new Car();
    		c.setColor("红色");
    		c.setWheel(4);
    		session.setAttribute("Car", c);
    		System.out.println("Car被放到session域中了");
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doGet(request, response);
    	}
    }

       2)绑定与解绑的监听器HttpSessionBindingListener

    package com.oracle.demo1;
    
    import javax.servlet.http.HttpSessionBindingEvent;
    import javax.servlet.http.HttpSessionBindingListener;
    
    public class Person implements HttpSessionBindingListener {
    	String id;
    	String name;
    
    	public String getId() {
    		return id;
    	}
    
    	public void setId(String id) {
    		this.id = id;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	@Override
    	// 监听该对象放到session域中
    	public void valueBound(HttpSessionBindingEvent event) {
    		// TODO Auto-generated method stub
    		System.out.println("对象放到session域中");
    	}
    
    	@Override
    	// 监听该对象从session域中的移除
    	public void valueUnbound(HttpSessionBindingEvent event) {
    		// TODO Auto-generated method stub
    		System.out.println("对象从session域中移除了");
    	}
    
    }
    

     3)钝化与活化的监听器HttpSessionActivationListener

             可以通过配置文件 指定对象钝化时间 --- 对象多长时间不用被钝化

    <Context>
     <!-- maxIdleSwap:session中的对象多长时间不使用就钝化 -->
     <!-- directory:钝化后的对象的文件写到磁盘的哪个目录下  配置钝化的对象文件在												work/catalina/localhost/钝化文件 -->
     <Manager className="org.apache.catalina.session.PersistentManager" 																				maxIdleSwap="1">
      <Store className="org.apache.catalina.session.FileStore" directory="demo" />
     </Manager>
    </Context>

    被钝化到work/catalina/localhost/的文件

    package com.oracle.demo1;
    
    import java.io.Serializable;
    
    import javax.servlet.http.HttpSessionActivationListener;
    import javax.servlet.http.HttpSessionEvent;
    
    public class Car implements HttpSessionActivationListener, Serializable {
    	private String color;
    	private int wheel;
    
    	public String getColor() {
    		return color;
    	}
    
    	public void setColor(String color) {
    		this.color = color;
    	}
    
    	public int getWheel() {
    		return wheel;
    	}
    
    	public void setWheel(int wheel) {
    		this.wheel = wheel;
    	}
    
    	@Override
    	public void sessionWillPassivate(HttpSessionEvent se) {
    		// TODO Auto-generated method stub
    		System.out.println("car被钝化了");
    	}
    
    	@Override
    	public void sessionDidActivate(HttpSessionEvent se) {
    		// TODO Auto-generated method stub
    		System.out.println("car被活化了");
    	}
    
    }
    

      

  • 相关阅读:
    vue--常用指令
    vue--npm的使用
    DRF--认证和权限
    DRF--路由组件和版本控制
    nginx--代理和负载均衡
    DRF--重写views
    DRF--ModelSerializer和时间格式化
    DRF--验证器
    DRF--序列化
    DRF--介绍和安装
  • 原文地址:https://www.cnblogs.com/Java-125/p/9060191.html
Copyright © 2011-2022 走看看