<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    空間站

    北極心空

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks

    一、 listener

           在Web項目中,我們可以使用Listener接口來監聽Container的中一些對象狀態的變化,并且根據這些對象的狀態的變化做出相應的響應。

    在Servlet 2.4和JSP 2.0 規范中一共有八個listener接口和六個event事件類。

    當一個事件發生的時候我們可以使用listener中的某個方法去對事件做出相應的響應,這些方法的參數都是java.util.EventObject的子類。

    這些Listener與其方法對應的Event參數類型如下圖:
     

    上圖詳細描述了八個listener接口和與其對應的event類

    我們大致可以把八個listener分成三類,分別為與ServletContext、HttpSession、ServletRuquest相關的listener,在上圖中已經使用不同的底色進行標注。

     

    由于listener在實際的應用中好像不如預計的廣泛,所以底下只簡單介紹接口、方法、參數和注意點(統計在線人數和在線人員名單也許是用的最多的使用listener的實現了)。

     

    好了,讓我們從與ServletContext相關的兩個接口開始吧

     

    首先ServletContext是整個Web應用的上下文,所以這個對象里存放的應該是和整個Web應用相關的東西(在線人數明顯很符合這個特點)

     

    ServletContextListener

     

    void contextInitialized(ServletContextEvent sce)

    這個方法在Container初始化整個Web應用時調用,運行在該Web應用中servlet和filter初始化之前

     

    void contextDestroyed(ServletContextEvent sce)

    這個方法在Container卸載整個Web應用時調用,運行在該Web應用中servlet和filter的destroy()方法之后

     

    ServletContextAttributeListener

     

       void attributeAdded(ServletContextAttributeEvent scab)

       這個方法在通過ServletContext的void setAttribute(String name, Object object)向ServletContext新添加一個name為名,object為值得對象之后被調用

       void attributeReplaced(ServletContextAttributeEvent scab)

       這個方法在通過ServletContext的void setAttribute(String name, Object object)替換ServletContext中name對應的值之后被調用

    void attributeRemoved(ServletContextAttributeEvent scab)

    這個方法在通過ServletContext的void removeAttribute(String name)刪除ServletContext中以name為名的鍵值對之后或者ServletContext被銷毀之前被調用。

     

    ServletContextAttributeEvent提供兩個方法:

    String getName()返回鍵值對的名也就是name。

    Object getValue()這個方法,在attributeAdded中返回新添的鍵值對的值;在attributeReplaced和中attributeRemoved返回原鍵值對的值。

     

     

    HttpSessionListener

     

           void sessionCreated(HttpSessionEvent se)

        當一個session被創建之后,容器調用此方法。

    void sessionDestroyed(HttpSessionEvent se)

     當一個session將要被銷毀時,容器調用此方法。

     

     HttpSessionEvent只有一個方法HttpSession getSession(),該方法返回對應的session。

     

     

    HttpSessionActivationListener

    這個接口一般和Servlet容器的集群有關系,它監聽的是同一個session轉移至不同的JVM的事件。

           void sessionDidActivate(HttpSessionEvent se)

           當一個session對象已經變成有效的狀態的時候,容器調用此方法

    void sessionWillPassivate(HttpSessionEvent se)

     當一個session對象將要變成無效狀態的時候,容器調用此方法

     

     

    HttpSessionAttributeListener

    這個接口和ServletContextAttributeListener方法一樣,唯一的差別即是:

    ServletContextAttributeListener針對的是ServletContext,而HttpSessionAttributeListener針對的Session。

     

       void attributeAdded(HttpSessionBindingEvent se)

       這個方法在通過HttpSession的void setAttribute(String name, Object object)向HttpSession新添加一個name為名,object為值得對象之后被調用

       void attributeReplaced(HttpSessionBindingEvent se)

       這個方法在通過HttpSession的void setAttribute(String name, Object object)替換HttpSession中name對應的值之后被調用

    void attributeRemoved(HttpSessionBindingEvent se)

    這個方法在通過HttpSession的void removeAttribute(String name)刪除HttpSession中以name為名的鍵值對或者HttpSession失效時被調用之后被調用。

     

    HttpSessionBindingEvent提供三個方法:

    String getName()返回鍵值對的名也就是name。

    Object getValue()這個方法,在attributeAdded中返回新添的鍵值對的值;在attributeReplaced和中attributeRemoved返回原鍵值對的值。

    HttpSession getSession() 返回發生此事件的HttpSession對象。

     

     

    HttpSessionBindingListener

    注意:這個listener是一個比較特殊的listener,它不需要在web.xml中進行配置。

    此listener需要存放于session中的對象實現此接口,才能被響應。

     

           void valueBound(HttpSessionBindingEvent event)

     此方法通過HttpSession的void setAttribute(String name, Object object)被調用。其中object需要實現HttpSessionBindingListener接口。

       

    void valueUnbound(HttpSessionBindingEvent event)

    此方法通過HttpSession的void removeAttribute(String name)或者HttpSession失效時被調用。其中nam對應的object需要實現HttpSessionBindingListener接口。

     

    這個接口和HttpSessionAttributeListener差別為,此接口不需要在web.xml中配置并且可以監聽單個類的對象被放入session或者從session中去掉的動作。而HttpSessionAttributeListener需要在web.xml中配置,并且是監聽所有類的對象。

     

     

    ServletRequestListener

       void requestInitialized(ServletRequestEvent sre)

           request初始化之后,容器調用此方法。

    void requestDestroyed(ServletRequestEvent sre)

    request消亡之前,容器調用此方法。

     

    ServletRequestEvent提供二個方法:

           ServletContext getServletContext()

        返回此事件request對象對應的ServletContext

    ServletRequest getServletRequest()

     返回此事件的request對象

     

    ServletRequestAttributeListener

    這個listener作用和ServletContextAttributeListener和HttpSessionAttributeListener類似,不過它監聽的是ServletRequest對象。

     

      void attributeAdded(ServletRequestAttributeEvent srae)

       這個方法在通過ServletRequest的void setAttribute(String name, Object object)向ServletRequest新添加一個name為名,object為值得對象之后被調用

       void attributeReplaced(ServletRequestAttributeEvent srae)

       這個方法在通過ServletRequest的void setAttribute(String name, Object object)替換ServletRequest中name對應的值之后被調用

    void attributeRemoved(ServletRequestAttributeEvent srae)

    這個方法在通過ServletRequest的void removeAttribute(String name)刪除ServletRequest中以name為名的鍵值對或者ServletRequest失效時被調用之后被調用。

     

     

    ServletRequestAttributeEvent除了繼承了ServletRequestEvent的ServletContext getServletContext()和ServletRequest getServletRequest()還提供了:

        String getName()返回鍵值對的名也就是name

    Object getValue()這個方法,在attributeAdded中返回新添的鍵值對的值;在attributeReplaced和中attributeRemoved返回原鍵值對的值。

     

     

    除了HttpSessionBindingListener以外,其他的listener都必須在web.xml中進行配置。

    配置的方法很簡單就是在web.xml中最后一個</filter-mapping>后,添加一個

     

     


     

     

    <listener>

         <listener-class>squall.servlet.listener.Listener</listener-class>

    </listener>

     

    其中squall.servlet.listener.Listener為某一個listener的實現類。

    文章出處:http://www.diybl.com/course/3_program/java/javashl/2008411/110050.html

    posted on 2008-10-24 09:19 蘆葦 閱讀(8948) 評論(3)  編輯  收藏 所屬分類: JAVA

    Feedback

    # re: Servlet介紹-listener 2013-10-28 14:06 uty
    dfhdfhfdhfdhjhgjhgjhgkghkghk  回復  更多評論
      

    # re: Servlet介紹-listener 2013-10-28 14:07 uty
    gdfgdfhdfhtrytrutru  回復  更多評論
      

    # re: Servlet介紹-listener 2014-06-04 10:00 admin
    沒有實際例子,我還是不知道怎么用  回復  更多評論
      

    主站蜘蛛池模板: 99在线精品免费视频九九视| 在线看片韩国免费人成视频| 免费国产成人午夜私人影视 | 国产国产人免费视频成69堂| 亚洲精品综合一二三区在线| 今天免费中文字幕视频| 亚洲AV无码久久精品狠狠爱浪潮 | 日韩视频在线免费观看| 亚洲熟妇无码AV不卡在线播放| 在线观看的免费网站| 亚洲一区二区无码偷拍| 精品免费久久久久久成人影院| 亚洲aⅴ无码专区在线观看春色| 日韩免费视频网站| 男男gvh肉在线观看免费| 亚洲乱码日产精品a级毛片久久| eeuss影院www天堂免费| 久久夜色精品国产亚洲| 99re这里有免费视频精品| 亚洲区精品久久一区二区三区| 最近最新中文字幕完整版免费高清| 亚洲youwu永久无码精品| 亚洲精品一级无码鲁丝片| 野花香高清视频在线观看免费| 精品日韩亚洲AV无码一区二区三区 | 免费一级毛片在线播放视频| 老司机亚洲精品影院| 日韩免费一区二区三区在线播放| 亚洲欧美aⅴ在线资源| 免费在线观看污网站| 中文字幕成人免费高清在线视频| 67pao强力打造67194在线午夜亚洲| 国产桃色在线成免费视频| 无套内谢孕妇毛片免费看看| 国产AV无码专区亚洲AVJULIA| 免费不卡视频一卡二卡| 黄色一级视频免费观看| 久久精品国产亚洲夜色AV网站| 国产va免费精品观看精品| 免费看黄网站在线看 | 国产在亚洲线视频观看|