JavaWeb學習——監聽

JavaWeb學習——監聽

監聽三個作用域的生命週期

監聽三個作用域創建和銷燬

application --- ServletContext request ---httpServletRequest session ---httpSession

ServletContext的生命週期監聽

servletcontext創建:啓動服務器的時候 servletContext銷燬:關閉服務器. 從服務器移除項目

實際用途:

1、在服務啓動時,將數據庫中的數據加載進內存,並將其賦值給一個屬性名,其它的 Servlet 就可以通過 getAttribute 進行屬性值的訪問。

2、啓動線程

1、創建ServletContextListener的實現類
public class MyservletContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println(" context inited");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println(" context destroy");
    }
}

2、在web.xml中進行註冊
  
<listener>
  <listener-class>testContent.MyservletContextListener</listener-class>
</listener>
  

httpServletRequest的生命週期監聽

request創建:訪問服務器上的任意資源都會有請求出現。 訪問 html: 會 訪問 jsp: 會 訪問 servlet : 會 request銷燬:服務器已經對這次請求作出了響應。

1、創建ServletRequestListener的實現類
public class MyRequestListener implements ServletRequestListener {
    @Override
    public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
        System.out.println("init ---------111111111");
    }

    @Override
    public void requestInitialized(ServletRequestEvent servletRequestEvent) {
        System.out.println("destroy ---------2222222222");
    }
}


2、在web.xml中進行註冊
<listener>
  <listener-class>testContent.MyRequestListener</listener-class>
</listener>

HttpSessionListenert的生命週期監聽

session的創建:只要調用getSession

訪問html: 不會 ​ jsp: 會 getSession(); ​ servlet: 會

session的銷燬:超時 30分鐘

非正常關閉 銷燬 ​ 正常關閉服務器(序列化)

實際用途:

1、統計在線人數

1、創建HttpSessionListener的實現類
public class MySessionListener implements HttpSessionListener {

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

  @Override
  public void sessionDestroyed(HttpSessionEvent se) {
    System.out.println("銷燬session了");
  }
}

2、在web.xml中進行註冊
<listener>
  <listener-class>testContent.MySessionListener</listener-class>
</listener>

監聽三個作用域屬性狀態變更

ServletContext中屬性的變更監聽

1、設置servletcontext
public class MyHttpAttrListener implements HttpSessionAttributeListener {
    @Override
    public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("add------11111");
    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("remove------11111");
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("replace------11111");
    }
}

2、在web.xml中進行註冊
<listener>
  <listener-class>testContent.MyHttpAttrListener</listener-class>
</listener>
  
3、jsp中屬性變更
    <%
        session.setAttribute("name","123");
        session.setAttribute("name","456");
        session.removeAttribute("name");
    %>
    

httpSession狀態變更監聽

1、實現一個session的綁定監聽接口,監聽對象與session綁定和解綁定的動作
public class TestBean implements HttpSessionBindingListener {

    public  String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("valueBound");
    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("valueUnbound");
    }
}

2、在jsp中爲session賦值
<%
  TestBean testBean = new TestBean();
	testBean.setName("123");
	session.setAttribute("bean",testBean);
%>

HttpSessionActivationListener序列化與反序列化的監聽

Session的序列化,反序列化作用:把session的值可以存儲到硬盤上,等下一次在使用的時候,在從硬盤上提取出來。

1、對於實現了序列化接口的對象,在存儲時會被進行序列化存儲。
public class TestBean2 implements HttpSessionActivationListener , Serializable {
    public  String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void sessionWillPassivate(HttpSessionEvent httpSessionEvent) {

    }

    @Override
    public void sessionDidActivate(HttpSessionEvent httpSessionEvent) {

    }
}

2、通過實現HttpSessionActivationListener 進行監聽序列化
public class MyHttpSessionActivation implements HttpSessionActivationListener {
    @Override
    public void sessionWillPassivate(HttpSessionEvent httpSessionEvent) {
        System.out.println("init ---------111111111");
    }

    @Override
    public void sessionDidActivate(HttpSessionEvent httpSessionEvent) {
        System.out.println("destroy ---------2222222222");
    }
}

序列化存儲地址配置:

  1. 在tomcat裏面 conf/context.xml 裏面配置

    對所有的運行在這個服務器的項目生效

  2. 在conf/Catalina/localhost/context.xml 配置

    對 localhost生效。 localhost:8080

  3. 在自己的web工程項目中的 META-INF/context.xml

<Context>
  <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
    <Store className="org.apache.catalina.session.FileStore" directory="itheima"/>
  </Manager>
</Context>

// maxIdleSwap : 1分鐘不用就鈍化
// directory :  鈍化後的那個文件存放的目錄位置:	D:\tomcat\apache-tomcat-7.0.52\work\Catalina\localhost\TestDemo\itheima

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章