Listener教你快速入门(小白必看!!)

JavaWeb中的监听器:

事件源:有三大域

  • ServletContext
    - 生死监听:ServletContextListener它有两个方法,一个在出生时调用,一个在死亡时调用;
    - 属性监听:ServletContextAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个是在移除属性时调用。

  • HttpSession
    - 生死监听:HttpSessionListener它有两个方法,一个在出生时调用,一个在死亡时调用;
    - void sessionCreated():创建session时执行
    - void sessionDestoryed():销毁session时执行
    - 属性监听:HttpSessiontAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个是在移除属性时调用。

  • ServletRequest
    - 生死监听:ServletRequestListener它有两个方法,一个在出生时调用,一个在死亡时调用;
    - void requestInitialized():创建request时
    - void requestDestored():销毁request时
    - 属性监听:ServletRequesttAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个是在移除属性时调用。

编写监听器:

  • 写一个监听器类,必须实现某个监听器接口
  • 在web.xml中配置来完成注册
public class AListener implements ServletContextListener {
	@Override
	public void contextInitialized(ServletContextEvent sce) {
        System.out.println("哇,我来也!");
	}
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("哇,我要挂也!");
	}

}

配置:

<listener>
   <listener-class>net.xyz.web.listener.AListener</listener-class>
  </listener>

ServletContextAttributeListener的相关方法:

@WebListener
public class BListener implements ServletContextAttributeListener {

    /**
     * Default constructor. 
     */
    public BListener() {
        // TODO Auto-generated constructor stub
    }

	/**
     * @see ServletContextAttributeListener#attributeAdded(ServletContextAttributeEvent)
     */
    public void attributeAdded(ServletContextAttributeEvent scae)  { 
        System.out.println("您向ServletContext添加了一个名为"+scae.getName()+"值为:"+scae.getValue()+"的属性");
    }

	/**
     * @see ServletContextAttributeListener#attributeRemoved(ServletContextAttributeEvent)
     */
    public void attributeRemoved(ServletContextAttributeEvent scae)  { 
       System.out.println(scae.getName()+"="+scae.getValue());//最后一次相见
    }

	/**
     * @see ServletContextAttributeListener#attributeReplaced(ServletContextAttributeEvent)
     */
    public void attributeReplaced(ServletContextAttributeEvent scae)  { 
        System.out.println("修改前的属性名称:"+scae.getName()+"修改前的属性的值:"+scae.getValue());
        System.out.println("修改前的属性名称:"+scae.getName()+"修改后的属性值:"+scae.getServletContext().getAttribute(scae.getName()));
    }
	
}

感知监听器(都与HttpSession相关)

  • 它用来添加到JavaBean上,而不是添加到三大域上。用来监听JavaBean是否在Session中
  • 这两个监听器都不需要在web,xml中注册
    例:
public class User implements HttpSessionBindingListener{ 
	private String name;
	private String password;
	public User() {
		
	}
	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}
	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * @return the password
	 */
	public String getPassword() {
		return password;
	}
	@Override
	public void valueBound(HttpSessionBindingEvent event) {
		System.out.println("啊我被session添加了");
	}
	@Override
	public void valueUnbound(HttpSessionBindingEvent event) {
		System.out.println("啊我被session无情的抛弃了");
	}
	/**
	 * @param password the password to set
	 */
	public void setPassword(String password) {
		this.password = password;
	}
	public User(String name, String password) {
		super();
		this.name = name;
		this.password = password;
	}
	

}

  • Session的序列化:在服务器关闭后,session的数据还存在,等待服务器开启后,session还会复活。
  • Seesion 的活化与钝化:钝化:长时间不用的session服务器会把它保存到硬盘上,可以自己设置存储时间,活化:硬盘中的Session返回到内存。

HttpSessionActivationListener监听器,检测JavaBean是否被序列化

public class Person implements HttpSessionActivationListener {

	@Override
	public void sessionWillPassivate(HttpSessionEvent se) {
		// TODO Auto-generatListener.super.sessionWillPassivate(se);
		System.out.println("我和session一起被序列化了");
	}

	@Override
	public void sessionDidActivate(HttpSessionEvent se) {
		System.out.println("我和session又回来了");
	}

}

猜你喜欢

转载自blog.csdn.net/qq_44867340/article/details/105920850
今日推荐