欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-29 09:14:14
...

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又回来了");
	}

}

相关标签: # javaWeb