課時12 什麼叫監聽器Listener
AWT、SAX
監聽器:
一個接口,内容由使用者實作
需要注冊
監聽器中的方法,會在特殊事件發生時被調用
觀察者
事件源
事件
監聽器
課時13 監聽器概述以及生命周期監聽器
1、ServletContext
生命周期監聽 ServletContextListener
建立 contextInitialized
銷毀 contextDestroyed
ServletContextEvent
-getServletContext()
屬性監聽 ServletContextAttributeListener
添加 attributeAdded
替換 attributeReplaced
移除 attributeRemoved
ServletContextAttributeEvent
-getName()
-getValue()
2、HttpSession
生命周期監聽 HttpSessionListener
建立 sessionCreated
銷毀 sessionDestroyed
HttpSessionEvent
-getSession()
屬性監聽 HttpSessionAttributeListener
添加 attributeAdded
替換 attributeReplaced
移除 attributeRemoved
HttpSessionBindingEvent
-getSession()
-getName()
-getValue()
3、ServletRequest
生命周期監聽 ServletRequestListener
建立 requestDestroyed
銷毀 requestInitialized
ServletRequestEvent
-getServletRequest()
-getServletContext()
屬性監聽 ServletRequestAttributeListener
添加 attributeAdded
替換 attributeReplaced
移除 attributeRemoved
ServletRequestAttributeEvent
-getName()
-getValue()
編寫監聽器
繼承父類,實作方法
package com.pengshiyu.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class AListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent sce) {
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
}
配置監聽器web.xml
<listener>
<listener-class>com.pengshiyu.listener.AListener</listener-class>
</listener>
課時14 監聽器之屬性監聽器
設定屬性
package com.pengshiyu.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class AServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
getServletContext().setAttribute("key", "value");
response.getWriter().print("Hello");
}
}
監聽屬性變化
package com.pengshiyu.listener;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
public class AListener implements ServletContextAttributeListener {
@Override
public void attributeAdded(ServletContextAttributeEvent event) {
System.out.println(event.getName() + ":" + event.getValue());
}
@Override
public void attributeRemoved(ServletContextAttributeEvent event) {
System.out.println(event.getName() + ":" + event.getValue());
}
@Override
public void attributeReplaced(ServletContextAttributeEvent event) {
System.out.println(event.getName() + ":" + event.getValue() + "->" +
event.getServletContext().getAttribute(event.getName()));
}
}
課時15 感覺監聽器
都與HttpSession相關
添加到JavaBean上
不需要再web.xml中注冊
package com.pengshiyu.bean;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
public class User implements HttpSessionBindingListener {
private String name;
@Override
public void valueBound(HttpSessionBindingEvent event) {
System.out.println("session值綁定了: " + event.getName() + "=" + event.getValue());
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
System.out.println("session值解除綁定了: " + event.getName() + "=" + event.getValue());
}
}
package com.pengshiyu.servlet;
import com.pengshiyu.bean.User;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class AServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
User user = new User();
request.getSession().setAttribute("user", user);
response.getWriter().print("Hello");
}
}
課時16 session的序列化
session會在程式關閉的時候序列化到硬碟
再次啟動程式,硬碟上的session會反序列化到記憶體
課時17 session的鈍化和活化
<Context reloadable="true">
<Manager
className="org.apche.catalina.session.PersistentManager"
maxIdleSwap="1">
<Store
className="org.apche.catalina.session.FileStore"
directory="mysession">
</Store>
</Manager>
</Context>
鈍化儲存,活化重新加載
課時18 監聽器之HttpSessionActivationListener
package com.pengshiyu.bean;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;
public class User implements HttpSessionActivationListener, java.io.Serializable {
@Override
public void sessionWillPassivate(HttpSessionEvent se) {
}
@Override
public void sessionDidActivate(HttpSessionEvent se) {
}
}