1. 程式人生 > >Javaweb基礎--->監聽器listener(轉發)

Javaweb基礎--->監聽器listener(轉發)

acl location 服務 sun 步驟 刪除 gac 分鐘 mls

JavaWeb中的監聽器

1、基本概念

  JavaWeb中的監聽器是Servlet規範中定義的一種特殊類,它用於監聽web應用程序中的ServletContext, HttpSession和 ServletRequest等域對象的創建與銷毀事件,以及監聽這些域對象中的屬性發生修改的事件。

2、Servlet監聽器的分類

  在Servlet規範中定義了多種類型的監聽器,它們用於監聽的事件源分別為ServletContextHttpSessionServletRequest這三個域對象
  Servlet規範針對這三個對象上的操作,又把多種類型的監聽器劃分為三種類型:

  1. 監聽域對象自身的創建和銷毀的事件監聽器。
  2. 監聽域對象中的屬性的增加和刪除的事件監聽器。
  3. 監聽綁定到HttpSession域中的某個對象的狀態的事件監聽器。

3、監聽ServletContext域對象的創建和銷毀

  ServletContextListener接口用於監聽ServletContext對象的創建和銷毀事件。實現了ServletContextListener接口的類都可以對ServletContext對象的創建和銷毀進行監聽。

  當ServletContext對象被創建時,激發contextInitialized (ServletContextEvent sce)方法。

  當ServletContext對象被銷毀時,激發contextDestroyed(ServletContextEvent sce)方法。

  ServletContext域對象創建和銷毀時機:
    創建:服務器啟動針對每一個Web應用創建ServletContext
    銷毀:服務器關閉前先關閉代表每一個web應用的ServletContext

  範例:編寫一個MyServletContextListener類,實現ServletContextListener接口,監聽ServletContext對象的創建和銷毀

  3-1、編寫監聽器,代碼如下:

package com.hanqi.maya.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/** * @ClassName: MyServletContextListener * @Description: MyServletContextListener類實現了ServletContextListener接口, * 因此可以對ServletContext對象的創建和銷毀這兩個動作進行監聽。 * */ public class MyServletContextListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("ServletContext對象創建"); } @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("ServletContext對象銷毀"); } }

  3-2、在web.xml文件中註冊監聽器

  我們在上面的中講到,要想監聽事件源,那麽必須將監聽器註冊到事件源上才能夠實現對事件源的行為動作進行監聽,在JavaWeb中,監聽的註冊是在web.xml文件中進行配置的,如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  
  <!-- 註冊針對ServletContext對象進行監聽的監聽器 -->
  <listener>
      <description>ServletContextListener監聽器</description>
      <!--實現了ServletContextListener接口的監聽器類 -->
      <listener-class>com.hanqi.maya.listener.MyServletContextListener</listener-class>
  </listener>
  
</web-app>

經過這兩個步驟,我們就完成了監聽器的編寫和註冊,Web服務器在啟動時,就會自動把在web.xml中配置的監聽器註冊到ServletContext對象上,這樣開發好的MyServletContextListener監聽器就可以對ServletContext對象進行監聽了。

4、監聽HttpSession域對象的創建和銷毀

  HttpSessionListener 接口用於監聽HttpSession對象的創建和銷毀
  創建一個Session時,激發sessionCreated (HttpSessionEvent se) 方法
  銷毀一個Session時,激發sessionDestroyed (HttpSessionEvent se) 方法。

範例:編寫一個MyHttpSessionListener類,實現HttpSessionListener接口,監聽HttpSession對象的創建和銷毀

  4-1、編寫監聽器,代碼如下:

package com.hanqi.maya.listener;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
* @ClassName: MyHttpSessionListener
* @Description: MyHttpSessionListener類實現了HttpSessionListener接口,
*                 因此可以對HttpSession對象的創建和銷毀這兩個動作進行監聽。
*
*/ 
public class MyHttpSessionListener implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println( se.getSession() + "創建了!!");
    }

    /* HttpSession的銷毀時機需要在web.xml中進行配置,如下:
     * <session-config>
              <session-timeout>1</session-timeout>
          </session-config>
          這樣配置就表示session在1分鐘之後就被銷毀
     */
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("session銷毀了!!");
    }
}

  4-2、在web.xml文件中註冊監聽器

<!--註冊針對HttpSession對象進行監聽的監聽器-->
   <listener>
      <description>HttpSessionListener監聽器</description>
      <listener-class>com.hanqi.maya.listener.MyHttpSessionListener</listener-class>
  </listener>
  <!-- 配置HttpSession對象的銷毀時機 -->
  <session-config>
      <!--配置HttpSession對象的1分鐘之後銷毀 -->
      <session-timeout>1</session-timeout>
  </session-config>

  當我們訪問jsp頁面時,HttpSession對象就會創建,此時就可以在HttpSessionListener觀察到HttpSession對象的創建過程了,我們可以寫一個jsp頁面觀察HttpSession對象創建的過程。

5、監聽ServletRequest域對象的創建和銷毀

  ServletRequestListener接口用於監聽ServletRequest 對象的創建和銷毀
  Request對象被創建時,監聽器的requestInitialized(ServletRequestEvent sre)方法將會被調用
  Request對象被銷毀時,監聽器的requestDestroyed(ServletRequestEvent sre)方法將會被調用

  ServletRequest域對象創建和銷毀時機:
    創建:用戶每一次訪問都會創建request對象
    銷毀:當前訪問結束,request對象就會銷毀

範例:編寫一個MyServletRequestListener類,實現ServletRequestListener接口,監聽ServletRequest對象的創建和銷毀

  5-1、編寫監聽器,代碼如下:

package com.hanqi.maya.listener;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;

/**
* @ClassName: MyServletRequestListener
* @Description: MyServletRequestListener類實現了ServletRequestListener接口,
*                 因此可以對ServletRequest對象的創建和銷毀這兩個動作進行監聽。
*
*/ 
public class MyServletRequestListener implements ServletRequestListener {

    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        System.out.println(sre.getServletRequest() + "銷毀了!!");
        
    }

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        System.out.println(sre.getServletRequest() + "創建了!!");
    }
}

  5-2、在web.xml文件中註冊監聽器

  <!--註冊針對ServletRequest對象進行監聽的監聽器-->
  <listener>
      <description>ServletRequestListener監聽器</description>
      <listener-class>com.hanqi.maya.listener.MyServletRequestListener</listener-class>
   </listener>

原博主博客:http://www.cnblogs.com/xdp-gacl/p/3961929.html

Javaweb基礎--->監聽器listener(轉發)