Listener
觀察者設(shè)計(jì)模式:
它是事件驅(qū)動(dòng)的一種體現(xiàn)形式。就好比在做什么事情的時(shí)候被人盯著。當(dāng)對(duì)應(yīng)做到某件事時(shí),觸發(fā)事件。
觀察者模式通常由以下三部分組成:
?1. 事件源:觸發(fā)事件的對(duì)象。
2.? 事件:觸發(fā)的動(dòng)作,里面封裝了事件源。
3. 監(jiān)聽器:當(dāng)事件源觸發(fā)事件時(shí),要做的事情。一般是一個(gè)接口,由使用者來實(shí)現(xiàn)。
Listener:
- Listener是監(jiān)聽器,可以對(duì),對(duì)象的創(chuàng)建、銷毀、域?qū)ο髮傩缘淖兓?huì)話進(jìn)行監(jiān)聽
- 監(jiān)聽器都是基于觀察者設(shè)計(jì)模式的,Servlet一共有八個(gè)監(jiān)聽器都是接口形式的。
監(jiān)聽對(duì)象的監(jiān)聽器:
ServletContextListener:
ServletContextListener:用于監(jiān)聽ServletContext對(duì)象的創(chuàng)建和銷毀
| void | contextInitialized(ServletContextEvent sce) | 對(duì)象創(chuàng)建時(shí)執(zhí)行該方法 |
| void | contextDestroyed(ServletContextEvent sce) | 對(duì)象銷毀時(shí)執(zhí)行該方法 |
ServletContextEvent:
代表事件對(duì)象,事件對(duì)象封裝了事件源,也就是ServletContext,真正的事件指的是創(chuàng)建或銷毀ServletContext對(duì)象的操作
HttpSessionListener:
用于監(jiān)聽HttpSession對(duì)象的創(chuàng)建和銷毀
| void | sessionCreated(HttpSessionEvent se) | 對(duì)象創(chuàng)建時(shí)執(zhí)行該方法 |
| void | sessionDestroyed(HttpSessionEvent se) 對(duì)象銷毀時(shí)執(zhí)行該方法 |
HttpSessionEvent:
代表事件對(duì)象,事件對(duì)象封裝了事件源,也就是HttpSession,真正的事件指的是創(chuàng)建或銷毀HttpSession對(duì)象的操作
ServletRequestListener:
用于監(jiān)聽ServletRequest對(duì)象的創(chuàng)建和銷毀
| void | requestInitialized (ServletRequestEvent sre) | 對(duì)象創(chuàng)建時(shí)執(zhí)行該方法 |
| void | requestDestroyed(ServletRequestEvent sre) | 對(duì)象銷毀時(shí)執(zhí)行該方法 |
ServletRequestEvent:
代表事件對(duì)象,事件對(duì)象封裝了事件源,也就是ServletRequest,真正的事件指的是創(chuàng)建或銷毀ServletRequest對(duì)象的操作
演示:
@WebListener public class ListenerDemo01 implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {System.out.println("監(jiān)聽到對(duì)象的創(chuàng)建");// 獲取對(duì)象System.out.println(sce.getServletContext());}@Overridepublic void contextDestroyed(ServletContextEvent sce) {System.out.println("監(jiān)聽到對(duì)象銷毀");} }監(jiān)聽域?qū)ο髮傩宰兓谋O(jiān)聽器:
ServletContextAttributeListener:
用于監(jiān)聽ServletContext應(yīng)用域中屬性的變化
| void | attributeAdded(ServletContextAttributeEvent scae) | 域中添加屬性時(shí)執(zhí)行該方法 |
| void | attributeRemoved(ServletContextAttributeEvent scae) | 域中移除屬性時(shí)執(zhí)行該方法 |
| void | attributeReplaced(ServletContextAttributeEvent scae) | 域中替換屬性時(shí)執(zhí)行該方法 |
ServletContextAttributeEvent:
代表事件對(duì)象,事件對(duì)象封裝了事件源,也就是ServletContext,真正的事件指的是添加、移除、替換應(yīng)用域中屬性的操作
HttpSessionAttributeListener:
用于監(jiān)聽HttpSession會(huì)話域中屬性的變化
| void | attributeAdded(HttpSessionBindingEvent se) | 域中添加屬性時(shí)執(zhí)行該方法 |
| void | attributeRemoved(HttpSessionBindingEvent se) | 域中移除屬性時(shí)執(zhí)行該方法 |
| void | attributeReplaced(HttpSessionBindingEvent se) | 域中替換屬性時(shí)執(zhí)行該方法 |
HttpSessionBindingEvent:
代表事件對(duì)象,事件對(duì)象封裝了事件源,也就是HttpSession,真正的事件指的是添加、移除、替換應(yīng)用域中屬性的操作
ServletRequestAttributeListener:
用于監(jiān)聽ServletRequest請(qǐng)求域中屬性的變化
| void | attributeAdded(ServletRequestAttributeEvent srae) | 域中添加屬性時(shí)執(zhí)行該方法 |
| void | attributeRemoved(ServletRequestAttributeEvent srae) | 域中移除屬性時(shí)執(zhí)行該方法 |
| void | attributeReplaced(ServletRequestAttributeEvent srae) | 域中替換屬性時(shí)執(zhí)行該方法 |
ServletRequestAttributeEvent:
代表事件對(duì)象,事件對(duì)象封裝了事件源,也就是ServletRequestAttribute,真正的事件指的是添加、移除、替換應(yīng)用域中屬性的操作
演示:
執(zhí)行添加、替換、移除的類
@WebListener public class ServletContextListenerDemo01 implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {System.out.println("監(jiān)聽到對(duì)象的創(chuàng)建");// 獲取對(duì)象ServletContext servletContext = sce.getServletContext();System.out.println(servletContext);// 添加屬性servletContext.setAttribute("username", "itzhuzhu");// 替換屬性servletContext.setAttribute("username", "hanxin");// 移除屬性servletContext.removeAttribute("username");}@Overridepublic void contextDestroyed(ServletContextEvent sce) {System.out.println("監(jiān)聽到對(duì)象銷毀");} }監(jiān)聽器
@WebListener public class ServletContextAttributeListenerDemo01 implements ServletContextAttributeListener {@Overridepublic void attributeAdded(ServletContextAttributeEvent event) {System.out.println("監(jiān)聽到了屬性的添加");// 獲取應(yīng)用域?qū)ο?/span>ServletContext servletContext = event.getServletContext();// 獲取屬性Object username = servletContext.getAttribute("username");System.out.println(username);}@Overridepublic void attributeReplaced(ServletContextAttributeEvent event) {System.out.println("監(jiān)聽到了屬性的替換");// 獲取應(yīng)用域?qū)ο?/span>ServletContext servletContext = event.getServletContext();// 獲取屬性Object username = servletContext.getAttribute("username");System.out.println(username);}@Overridepublic void attributeRemoved(ServletContextAttributeEvent event) {System.out.println("監(jiān)聽到了屬性的移除");// 獲取應(yīng)用域?qū)ο?/span>ServletContext servletContext = event.getServletContext();// 獲取屬性Object username = servletContext.getAttribute("username");System.out.println(username);} }配置文件形式配置監(jiān)聽器:
<listener><listener-class>com.listener.ServletContextAttributeListenerDemo01</listener-class></listener><listener><listener-class>com.listener.ServletContextListenerDemo01</listener-class></listener>監(jiān)聽會(huì)話相關(guān)的感知型監(jiān)聽器:
感知型監(jiān)聽器:當(dāng)監(jiān)聽器配置好了以后還需要用注解、xml做一些配置,但是感知性監(jiān)聽器是不需要的,定義好了以后就可以直接使用了
HttpSessionBinderListener:
用于感知對(duì)象和會(huì)話域綁定的監(jiān)聽器
| void | valueBound(HttpSessionBindingEvent event) | 數(shù)據(jù)添加到會(huì)話域中時(shí)執(zhí)行該方法 |
| void | valueUnbound(HttpSessionBindingEvent event) | 數(shù)據(jù)從會(huì)話域中移除時(shí)執(zhí)行該方法 |
HttpSessionBindingEvent:
代表事件對(duì)象,事件對(duì)象封裝了事件源,也就是HttpSession,真正的事件指的是添加、移除會(huì)話域中數(shù)據(jù)的操作
HttpSessionActivationListener:
用于感知會(huì)話域中對(duì)象鈍化和活化的監(jiān)聽器
| void | sessionWillPassivate(HttpSessionEvent se) | 會(huì)話域中數(shù)據(jù)鈍化時(shí)執(zhí)行該方法 |
| void | sessionDidActivate(HttpSessionEvent se) | 會(huì)話域中數(shù)據(jù)活化時(shí)執(zhí)行該方法 |
HttpSessionEvent:
代表事件對(duì)象,事件對(duì)象封裝了事件源,也就是HttpSession,真正的事件指的是鈍化、活化的操作
總結(jié)
- 上一篇: c语言 二维数组 文库,c语言二维数组练
- 下一篇: 计算机三级基础知识考试题,计算机等级考试