zoukankan      html  css  js  c++  java
  • 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一起钝化到硬盘时调用
     
     
  • 相关阅读:
    121. Best Time to Buy and Sell Stock
    70. Climbing Stairs
    647. Palindromic Substrings
    609. Find Duplicate File in System
    583. Delete Operation for Two Strings
    556 Next Greater Element III
    553. Optimal Division
    539. Minimum Time Difference
    537. Complex Number Multiplication
    227. Basic Calculator II
  • 原文地址:https://www.cnblogs.com/Actexpler-S/p/7376013.html
Copyright © 2011-2022 走看看