• Listener


        还是先把Listener的知识整理成思维导图的形式;便于记忆和整理;



    一、监听器简介:

            Listener是JavaWeb三大组件之一------------Servlet、Filter、Listener;这三大组件的共同特点就是都需要实现一个接口,并在web-xml文件中进行配置,所以这三大组件用起来还是相似的。Listener是监听器,就是进行监听的,今天老师举了一个特别形象的例子:

            监听器:       朝阳群众

            监听对象:    明星

            监听的事件: 干坏事

            调用的方法:   报警

    总结下来:监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象触发被监听的事件后,监听器某个方法立即被执行。,在JavaWeb项目中,监听器主要监听的是ServletContext,HttpSession,ServletRequest三个域对象的创建与销毁事件,同时还有这些域对象中属性改变的事件。

    二、Listener的分类

    JavaWeb中的监听器共有三种,共8个监听器
    - 生命周期监听器——监听三个生命周期对象的创建和销毁的事件。
    - 属性监听器——监听三个对象中属性的变化。
    - session对象监听器——将它session中的属性,以及session的活化和钝化。

    三、创建监听器的步骤

          1.创建一个类,并实现需要的监听器类型的接口

          2.在web-xml文件中进行配置

    1.创建类----以创建一个ServletRequestListener类型的监听器为例:

    package com.neuedu.listenner;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletRequestEvent;
    import javax.servlet.ServletRequestListener;
    
    //自定义Listener监听器,实现ServletRequestListener接口
    public class servletListener implements ServletRequestListener {
    	/*
    	 *     实现接口的函数
    	 *ServletRequsetlistener 是监听request的监听器
    	 *1.当浏览器向服务器发送请求时,会触发监听器的requestInitialized方法
    	 *2.当请求结束时,会触发监听器的requestDestroyed方法
    	 * 
    	 * */
    	
    	@Override
    	public void requestDestroyed(ServletRequestEvent arg0) {
    		System.out.println("请求走了")	;
    	}
    
    	@Override
    	public void requestInitialized(ServletRequestEvent arg0) {
    		
    		System.out.println("请求来了,我已监听到");	
    	}
    
    }
    

     2.在web-xml文件中进行配置

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
      <display-name>web-listenner</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
     <!-- 利用全类名向服务器注册一个listener -->
      <listener>
         <listener-class>com.neuedu.listenner.servletListener</listener-class>
      </listener>
    </web-app>
    

     四、生命周期监听器

    4.1ServletContextListener(监听当前项目的启动与关闭)
    - ServletContext生命周期监听器
    - void contextDestroyed(ServletContextEvent sce)
    - 该方法在ServletContext对象销毁前调用
     
    - void contextInitialized(ServletContextEvent sce)
    - 该方法在ServletContext对象创建之后调用。
     
    - ServletContextEvent 对象可以获取到ServletContext对象
    ServletContextEvent.getServletContext();
     
     

        4.2HttpSessionListener

    - HttpSession生命周期监听器
    - void sessionCreated(HttpSessionEvent se)
    - 该方法在Session创建时调用
     
    - void sessionDestroyed(HttpSessionEvent se)
    - 在session销毁时调用
     
    - HttpSessionEvent
    - 可以获取HttpSession对象

         4.3ServletRequestListener(监听浏览器请求的监听器)

    - void requestDestroyed(ServletRequestEvent sre)
    - 在request对象销毁时调用
     
    - void requestInitialized(ServletRequestEvent sre)
    - 在request对象创建时调用
     
    - ServletRequestEvent
    可以获取ServletContext对象和ServletRequest
     
     

    五、属性监听器

    属性监听器,监听三个域中的属性的变化:添加一个属性,替换一个属性,移除一个属性
     
    1. ServletContextAttributeListener(监听整个web应用的属性变化----调用setAttribute或者是removeAttribute的时候)
    - 监听ServletContext中的属性的变化
     
    void attributeAdded(ServletContextAttributeEvent scab)
    - 当向ServletContext中添加属性时调用
     
    attributeRemoved(ServletContextAttributeEvent scab)
    - 移除属性时调用
     
    attributeReplaced(ServletContextAttributeEvent scab)
    - 替换一个属性时调用
    2.HttpSessionAttributeListener(监听session的属性变化----调用setAttribute或者是removeAttribute的时候)
    void attributeAdded(HttpSessionBindingEvent se)
    void attributeRemoved(HttpSessionBindingEvent se)
    void attributeReplaced(HttpSessionBindingEvent se)
    监听器类:
    package com.neuedu.listenner;
    
    import javax.servlet.http.HttpSessionAttributeListener;
    import javax.servlet.http.HttpSessionBindingEvent;
    
    //自定义一个sessionAttributeListener
    public class sessionAttributeListener implements HttpSessionAttributeListener{
    
    	@Override
    	public void attributeAdded(HttpSessionBindingEvent arg0) {
    		System.out.println("向session中添加属性");
    	}
    	@Override
    	public void attributeRemoved(HttpSessionBindingEvent arg0) {
    		System.out.println("移除session中的属性");	
    	}
    	@Override
    	public void attributeReplaced(HttpSessionBindingEvent arg0) {
    		System.out.println("替换session中属性");
    		
    	}
    
    }
    

    servlet类,向session域中添加SetAttribute,使触发监听器

    package com.neuedu.servlet;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.neuedu.bean.Student;
    import com.neuedu.bean.Student2;
    import com.sun.org.apache.bcel.internal.generic.NEW;
    
    @WebServlet("/AServlet")
    public class AServlet extends HttpServlet {
    	
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	       request.getSession().setAttribute("username", "火车");
    	       request.getSession().removeAttribute("username");
    		System.out.println("doGet");
    	}
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doGet(request, response);
    	}
    
    }
    

     结果:

     六、session对象监听器

    1.HttpSessionBindingListener
    > > 该接口由JavaBean来实现,不需要再web.xml文件配置
    valueBound(HttpSessionBindingEvent event)
    - 当该类的实例,作为属性设置进session域中时调用
    valueUnbound(HttpSessionBindingEvent event)
    - 当该类的实例,从session域中被移除时调用
     
     
    2.HttpSessionActivationListener
    > 监听session域中的某类属性,和session一起活化和钝化的事件。
    > 该接口由JavaBean来实现,同样不需要再web.xml中配置,但是该JavaBean需要实现Serializable接口!
    void sessionDidActivate(HttpSessionEvent se)
    - 当前对象和session一起被活化到内存时调用
     
    void sessionWillPassivate(HttpSessionEvent se)
    - 当前对象和session一起钝化到硬盘时调用
     
     
  • 相关阅读:
    arcgis server 中Web墨卡托投影与WGS-84坐标的转换
    jQuery的鼠标事件总结
    Aps.net中基于bootstrapt图片上传插件的应用
    动态添加div及对应的js、css文件
    jQuery时间格式插件-moment.js的使用
    arcgis地图服务之 identify 服务
    ASP.NET导出word实例
    ArcGIS字段计算器分割字段中的字符串
    正则表达式中的特殊字符
    arcgis for js开发之路径分析
  • 原文地址:https://www.cnblogs.com/Actexpler-S/p/7376013.html
Copyright © 2020-2023  润新知