JavaWeb的學習--Listener監聽器

1、監聽器Listener

javaEE包括13門規範 在課程中主要學習 servlet技術 和 jsp技術java

其中 servlet規範包括三個技術點:servlet  listener  filter程序員

1.什麼是監聽器?

監聽器就是監聽某個對象的的狀態變化的組件web

監聽器的相關概念:面試

事件源:被監聽的對象  ----- 三個域對象 request  session  servletContextspring

監聽器:監聽事件源對象  事件源對象的狀態的變化都會觸發監聽器 ---- 6+2數據庫

註冊監聽器:將監聽器與事件源進行綁定apache

響應行爲:監聽器監聽到事件源的狀態變化時 所涉及的功能代碼 ---- 程序員編寫代碼服務器

 

2.監聽器有哪些?

第一維度:按照被監聽的對象劃分:ServletRequest域   HttpSession域   ServletContext域session

第二維度:監聽的內容分:監聽域對象的建立與銷燬的    監聽域對象的屬性變 化的jsp


3.監聽三大域對象的建立與銷燬的監聽器

(1)監聽ServletContext域的建立與銷燬的監聽器ServletContextListener

1)Servlet域的生命週期

什麼時候建立:服務器啓動建立

什麼時候銷燬:服務器關閉銷燬

 

2)監聽器的編寫步驟(重點):

a、編寫一個監聽器類去實現監聽器接口

b、覆蓋監聽器的方法

c、須要在web.xml中進行配置---註冊

 

3)監聽的方法:

 

 

4)配置文件:


 

5)ServletContextListener監聽器的主要做用

a、初始化的工做:初始化對象 初始化數據 ---- 加載數據庫驅動  鏈接池的初始 化

b、加載一些初始化的配置文件 --- spring的配置文件

c、任務調度----定時器----Timer/TimerTask

 

任務調度:

/**
 * ServletContext域的建立與銷燬的監聽器
 * ServletContextListener
 * 主要做用:
 * 1. 初始化的工做:初始化對象 初始化對象 ---加載數據庫驅動 鏈接池的初始化
 * 2. 加載一些初始化配置---spring的配置文件
 * 3. 任務調度--定時器---Timer/TimerTask
 * @author vanguard
 *
 */
public class MyServletContextListener implements ServletContextListener {
    
    /**
     * 監聽ServletContext域對象的建立
     */
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("context建立了!!");
//        //獲取監聽的ServletContext對象
//        ServletContext servletContext = sce.getServletContext();
//        //獲取監聽的ServletContext對象
//        ServletContext source = (ServletContext) sce.getSource();
        
        //任務調度--模擬定時計息 規定時間內開始
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Date parse = null;;
        try {
            parse = format.parse("2017-8-11 12:10:00");
        } catch (ParseException e) {
            
            e.printStackTrace();
        }
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {

            @Override
            public void run() {
                System.out.println("開始計息了。。。");
            }
            
        }, parse, 1000*60*60*24);
    }
    
    /**
     * 監聽ServletContext域對象的銷燬
     */
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("context銷燬了!!");    
    }
}

 

(2)監聽Httpsession域的建立於銷燬的監聽器HttpSessionListener

1)HttpSession對象的生命週期

什麼時候建立:第一次調用request.getSession時建立

什麼時候銷燬:服務器關閉銷燬  session過時 手動銷燬

2)HttpSessionListener的方法

 

(3)監聽ServletRequest域建立與銷燬的監聽器ServletRequestListener

1)ServletRequest的生命週期

建立:每一次請求都會建立request

銷燬:請求結束

2)ServletRequestListener的方法


 

4.監聽三大域對象的屬性變化的

(1)域對象的通用的方法:

setAttribute(name,value)

 --- 觸發添加屬性的監聽器的方法  

 --- 觸發修改屬性的監聽器的方法

getAttribute(name)

removeAttribute(name) 

--- 觸發刪除屬性的監聽器的方法

(2)ServletContextAttibuteListener監聽器

/**
 * ServletContext域對象屬性變化的監聽器
 * ServletContextAttributeListener
 * @author vanguard
 *
 */
public class MyServletContextAttributeListenerServlet implements ServletContextAttributeListener {

    @Override
    public void attributeAdded(ServletContextAttributeEvent sce) {
        System.out.println("添加了屬性:" + sce.getName() + ":" + sce.getValue());
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent sce) {
        System.out.println("修改了屬性:" + sce.getName() + ":" + sce.getValue());
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent sce) {
        System.out.println("刪除了屬性:" + sce.getName() + ":" + sce.getValue());
        
    }
}

(3) HttpSessionAttributeListener監聽器(同上)

(4) ServletRequestAttributeListenr監聽器(同上)

 

5.與session中的綁定的對象相關的監聽器(對象感知監聽器)

(1)即將要被綁定到session中的對象有幾種狀態

綁定狀態:就一個對象被放到session域中

解綁狀態:就是這個對象從session域中移除了

鈍化狀態:是將session內存中的對象持久化(序列化)到磁盤

活化狀態:就是將磁盤上的對象再次恢復到session內存中

 

面試題:當用戶不少時,怎樣對服務器進行優化?

(2)綁定與解綁的監聽器HttpSessionBindingListener

@Override
    public void valueBound(HttpSessionBindingEvent event) {
        System.out.println("user被綁定到session域中了");
        System.out.println(event.getName());
    }
    @Override
    public void valueUnbound(HttpSessionBindingEvent event) {
        System.out.println("user從session域中解綁了");
        System.out.println(event.getName());
    }

 

(3)鈍化與活化的監聽器HttpSessionActivationListener

能夠經過配置文件 指定對象鈍化時間 --- 對象多長時間不用被鈍化

在META-INF下建立一個context.xml


<Context>

 <!-- maxIdleSwap:session中的對象多長時間不使用就鈍化 -->

 <!-- directory:鈍化後的對象的文件寫到磁盤的哪一個目錄下  配置鈍化的對象文件在work/catalina/localhost/鈍化文件 -->

 <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">

  <Store className="org.apache.catalina.session.FileStore" directory="itcast205" />

 </Manager>

</Context>
    @Override
    public void sessionWillPassivate(HttpSessionEvent event) {
        System.out.println("person被鈍化了");
    }
    
    @Override
    public void sessionDidActivate(HttpSessionEvent event) {
        System.out.println("person被激活了");
    }

 

被鈍化到work/catalina/localhost/的文件

相關文章
相關標籤/搜索