javaWeb三大组件之监听器

javaWeb三大组件:

Servlet
Listener
Filter

本篇博客主要讲Listener监听器。
监听器:

  • 监听器是一个接口,其具体内容根据自己的需求自己实现。
  • 监听器中的方法会在特殊事件发生时被调用
  • 它他需要注册

javaWeb中的监听器简介

在JavaWeb被监听的事件源为:ServletContext、HttpSession、ServletRequest,即三大域对象。
监听域对象“创建”与“销毁”的监听器;
监听域对象“操作域属性”的监听器;
监听HttpSession的监听器。

  • ServletContext

    • 声明周期监听:ServletContextListener,其有两个方法,一个在出生时调用,一个在死亡是调用。

      void contextInitizlized9(ServletContextEvent sce):创建ServletContext时调用
      void ContextDestoryed(ServletContextEvent sce):销毁Servletcontext时调用

    • 属性监听:ServletContextAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个在移除属性时调用

      void attrivuteAdded(ServletContextAttributeEvent event) :添加属性时调用
      void attributeReplaced(ServletContextAttributeEvent event):替换属性时调用
      void attributeRemoved(ServletContextAttributeEvent event):移除属性时调用

  • HttpSession

    • 生命周期监听:HttpSessionListener,它有两个方法,一个在出生时调用,一个在死亡时调用

      void sessionCreated(HttpSessionEvent se):创建session时调用
      void sessionDestoryed(HttpSessionEvent se):销毁session时调用

    • 属性监听:HttpSessionAttributeListener,三个方法,分别是添加属性、删除属性、替换属性时调用

      void attributeAdded(HttpSessionBindingEvent event):添加属性时调用
      void attributeReplaced(HttpSessionBindingEvent event):替换属性时调用
      void attributeRemoved(HttpSessionBindingEvent event):移除属性

  • ServletRequest

    • 生命周期:ServletRequestListener,具有两个方法,一个是出生时调用,一个是死亡时调用;

    void requestInitialized(ServletRequestEvent sre):创建request时
    void requestDestroyed(ServletRequestEvent sre):销毁request时

    • 属性监听

    void attributeAdded(ServletRequestAttributeEvent srae):添加属性时
    void attributeReplaced(ServletRequestAttributeEvent srae):替换属性时
    void attributeRemoved(ServletRequestAttributeEvent srae):移除属性时

javaWeb中完成编写监听器

① 写一个监听器类:要求是必须实现某个监听接口
② 在web.xml中配置来完成注册

事件对象的介绍

ServletContextEvent: ServletContext getServletContext()
HttpSessionEvent: HttpSession getSession()
ServletRequest:
①: ServletContext getServletContext()
②: ServletReques getServletRequest()

ServletContextAttributeEvent:
》String getName():获取当前操作的属性名;
》Object getValue():获取当前操作的属性值;
》ServletContext getServletContext():获取ServletContext对象。

HttpSessionBindingEvent
》String getName():获取当前操作的属性名;
》Object getValue():获取当前操作的属性值;
》HttpSession getSession():获取当前操作的session对象。

ServletRequestAttributeEvent
》Object getValue():获取当前操作的属性值;
》ServletContext getServletContext():获取ServletContext对象;
》ServletRequest getServletRequest():获取当前操作的ServletRequest对象。

public class MyServletContextListener implements ServletContextListener {
	public void contextDestroyed(ServletContextEvent evt) {
		System.out.println("销毁ServletContext对象");
	}

	public void contextInitialized(ServletContextEvent evt) {
		System.out.println("创建ServletContext对象");
	}
}
public class MyHttpSessionListener implements HttpSessionListener {
	public void sessionCreated(HttpSessionEvent evt) {
		System.out.println("创建session对象");
	}

	public void sessionDestroyed(HttpSessionEvent evt) {
		System.out.println("销毁session对象");
	}
}
public class MyServletRequestListener implements ServletRequestListener {
	public void requestDestroyed(ServletRequestEvent evt) {
		System.out.println("销毁request对象");
	}

	public void requestInitialized(ServletRequestEvent evt) {
		System.out.println("创建request对象");
	}
}

web.xml中的配置

<listener>
<listener-class>MyServletContextListener监听器的全类名</listener-class>
</listener>
<listener>
<listener-class>MyHttpSessionListener监听器的全类名</listener-class>
</listener>
<listener>
<listener-class>MyServletRequestListener监听器的全类名</listener-class>
</listener>
<session-config>
<!--为了看出session销毁的过程,把session过期时间设置为1秒-->
 <session-timeout>1</session-timeout>
</session-config>

属性监听示例:创建一个类,同时实现ServletContextAttributeListener,ServletRequestAttributeListener,HttpSessionAttributeListener接口

public class MyListener implements ServletContextAttributeListener,
		ServletRequestAttributeListener, HttpSessionAttributeListener {
	public void attributeAdded(HttpSessionBindingEvent evt) {
		System.out.println("向session中添加属性:" + evt.getName() + "=" + evt.getValue());
	}

	public void attributeRemoved(HttpSessionBindingEvent evt) {
		System.out.println("从session中移除属性:" + evt.getName() + "=" + evt.getValue());
	}

	public void attributeReplaced(HttpSessionBindingEvent evt) {
		System.out.println("修改session中的属性:" + evt.getName() + "=" + evt.getValue());
	}

	public void attributeAdded(ServletRequestAttributeEvent evt) {
		System.out.println("向request中添加属性:" + evt.getName() + "=" + evt.getValue());
	}

	public void attributeRemoved(ServletRequestAttributeEvent evt) {
		System.out.println("从request中移除属性:" + evt.getName() + "=" + evt.getValue());
	}

	public void attributeReplaced(ServletRequestAttributeEvent evt) {
		System.out.println("修改request中的属性:" + evt.getName() + "=" + evt.getValue());
	}

	public void attributeAdded(ServletContextAttributeEvent evt) {
		System.out.println("向context中添加属性:" + evt.getName() + "=" + evt.getValue());
	}

	public void attributeRemoved(ServletContextAttributeEvent evt) {
		System.out.println("从context中移除属性:" + evt.getName() + "=" + evt.getValue());
	}

	public void attributeReplaced(ServletContextAttributeEvent evt) {
		System.out.println("修改context中的属性:" + evt.getName() + "=" + evt.getValue());
	}
}

web.xml中的配置与上面配置事件监听时一样,唯一变化的是全类名变为MyListener的全类名

上一篇:GUI学习之n——自定义信号


下一篇:原生js实现在表格用鼠标框选并有反选功能