linlinyu

          linlinyu
          posts - 0, comments - 4, trackbacks - 0, articles - 15

          Servlet中的八大Listener

          Posted on 2007-11-23 09:49 linlin yu 閱讀(193) 評論(0)  編輯  收藏 所屬分類: servlet

           

          1. Servlet中的Listener和Event:

          在JSP 2.0/Servlet 2.4中,共有八個Listener接口,六個Event類別。
          ServletContextListener接口
          [接口方法] contextInitialized()與 contextDestroyed()
          [接收事件] ServletContextEvent
          [觸發場景] 在Container加載Web應用程序時(例如啟動 Container之后),會呼叫contextInitialized(),而當容器移除Web應用程序時,會呼叫contextDestroyed ()方法。

          ServletContextAttributeListener
          [接口方法] attributeAdded()、 attributeReplaced()、attributeRemoved()
          [接收事件] ServletContextAttributeEvent
          [觸發場景] 若有對象加入為application(ServletContext)對象的屬性,則會呼叫attributeAdded(),同理在置換屬性與移除屬性時,會分別呼叫attributeReplaced()、attributeRemoved()。

          HttpSessionListener
          [接口方法] sessionCreated()與sessionDestroyed ()
          [接收事件] HttpSessionEvent
          [觸發場景] 在session (HttpSession)對象建立或被消滅時,會分別呼叫這兩個方法。

          HttpSessionAttributeListener
          [接口方法] attributeAdded()、 attributeReplaced()、attributeRemoved()
          [接收事件] HttpSessionBindingEvent
          [觸發場景] 若有對象加入為session(HttpSession)對象的屬性,則會呼叫attributeAdded(),同理在置換屬性與移除屬性時,會分別呼叫attributeReplaced()、 attributeRemoved()。

          HttpSessionActivationListener
          [接口方法] sessionDidActivate()與 sessionWillPassivate()
          [接收事件] HttpSessionEvent
          [觸發場景] Activate與Passivate是用于置換對象的動作,當session對象為了資源利用或負載平衡等原因而必須暫時儲存至硬盤或其它儲存器時(透過對象序列化),所作的動作稱之為Passivate,而硬盤或儲存器上的session對象重新加載JVM時所采的動作稱之為Activate,所以容易理解的,sessionDidActivate()與 sessionWillPassivate()分別于Activeate后與將Passivate前呼叫。

          ServletRequestListener
          [接口方法] requestInitialized()與 requestDestroyed()
          [接收事件] RequestEvent
          [觸發場景] 在request(HttpServletRequest)對象建立或被消滅時,會分別呼叫這兩個方法。

          ServletRequestAttributeListener
          [接口方法] attributeAdded()、 attributeReplaced()、attributeRemoved()
          [接收事件] HttpSessionBindingEvent
          [觸發場景] 若有對象加入為request(HttpServletRequest)對象的屬性,則會呼叫attributeAdded(),同理在置換屬性與移除屬性時,會分別呼叫attributeReplaced()、 attributeRemoved()。

          HttpSessionBindingListener
          [接口方法] valueBound()與valueUnbound()
          [接收事件] HttpSessionBindingEvent
          [觸發場景] 實現HttpSessionBindingListener接口的類別,其實例如果被加入至session(HttpSession)對象的屬性中,則會呼叫 valueBound(),如果被從session(HttpSession)對象的屬性中移除,則會呼叫valueUnbound(),實現HttpSessionBindingListener接口的類別不需在web.xml中設定。

          2. 如何注冊Servlet中的事件 :
          實現上面這幾個接口的類別,除了HttpSessionBindingListener外,必須在web.xml中向容器注冊,容器才會在對應的事件發生時呼叫對應的類別,如:
           < listener > 
           < listener-class > demo.servlet.listener.CustomServletContextListener  

          3. Servlet事件的應用實例
          看到這里,你也許會有疑問: 了解這些 listener和event 有什么用呢?我平時開發沒有用到這些,一樣也能完成任務啊.

          不錯,在日常的開發中很少用到這些事件處理的方面,但是在某些情況下使用事件處理機制卻可以達到事半功倍的效果,例如下面兩個例子:

          4.Java類實例
          ==========
          //偵聽啟動和關閉
          import javax.servlet.ServletContextListener;
          import javax.servlet.*;

          public class TigerListen implements ServletContextListener {
           public void contextInitialized(ServletContextEvent sce)
           {
            System.out.print("Init") ;
           }
           public void contextDestroyed(ServletContextEvent sce)
           {
            System.out.print("Destroved") ;
           }
          }

          對應的web.xml是
          ============
          <!--l version="1.0" encoding="UTF-8-->
              TigerListen
            


          ============

          主站蜘蛛池模板: 南昌县| 肃南| 乌恰县| 大理市| 墨脱县| 安龙县| 友谊县| 乌鲁木齐市| 如东县| 盐边县| 泰来县| 祁东县| 鹤庆县| 乐东| 永吉县| 郁南县| 泾川县| 佛坪县| 定襄县| 东城区| 康平县| 阜南县| 靖安县| 湘潭市| 炎陵县| 景德镇市| 衡水市| 东宁县| 汾西县| 错那县| 汶上县| 乌鲁木齐县| 内江市| 大安市| 万全县| 罗江县| 且末县| 阿城市| 盐津县| 深水埗区| 淳安县|