1. 程式人生 > >JavaWeb 之 17.JDBC分頁和監聽器

JavaWeb 之 17.JDBC分頁和監聽器

## 分頁(重點)和 監聽器 ##


**分頁的簡介**
    
    1.為什麼使用分頁。
    2.好處:使用者體檢的非常好。查詢的速度非常快。缺點資料庫的互動比較多。
    3.分頁的技術
        
    4.MySQL的關鍵字    limit MySQL資料庫方言    (使用它就行分頁)
        * mySQL    直接使用limit操作
        * 使用關鍵字top,巢狀的查詢
        * Oracle    巢狀查詢
    
    5.limit關鍵字
        * select * from t_customer limit a,b;    
        * a引數:從哪條記錄開始
        * b引數:查詢多少條記錄
        例: select * from t_customer limit 0,10;
        -- 一共顯示10條記錄 1-10  11-20  21-30
        -- 查詢第三頁的資料 0-10  10-10  20-10   (當前頁-1)*每頁顯示的資料10

**分頁的分析的過程**
    
    1.pageCode    當前頁            -- 從頁面獲取
    2.totalPage    總頁數            -- 計算出來
    3.totalCount    總記錄數            -- 查詢資料庫
    4.pageSize    每頁顯示的記錄數    -- 使用者規定的(10)
    5.beanList    顯示的資料            -- 查詢資料庫的
    
    6.把上述這些變數封裝到JavaBean中,PageBean。在各層之間傳遞PageBean
    
    
**分頁遇到問題**

    
**頁面列表**

    1.頁碼列表顯示10個                -- 一共10個。
    2.當前頁在第6個位置,發生變化。    -- 當前頁是pageCode
    
    [5][6][7][8][9][10][11][12][13][14]
    
    
    * 能知道開始是位置是1  ,結束的位置10.
    * 定義變數開始位置begin     結束位置end
    
        * 通過pageCode來計算begin和end
            * 如果totalPage <= 10       begin =1     end = totalPage     [1][2][3][4][5][6][7][8][9][10]
            * 如果totalPage > 10    begin = pageCode - 5  end = pageCode + 4
                * 頭溢位    當begin < 1       begin = 1  end = 10
                * 尾溢位    當end > totalPage  end = totalPage  begin = end - 9
            

**帶條件的分頁查詢**


## WEB監聽器 ##

**監聽器的概述**
    
    1.概述:監聽器是一個Java的類,作用是用來監聽另一個Java類的狀態的改變。
    2.概念:(場景:電動車上安裝了一個報警器)
        * 事件源:被監聽的物件    (電動車)
        * 監聽器:監聽的物件    (報警器)
        * 繫結事件源:在事件源上繫結監聽器。(在電動車上安裝報警器)
        * 事件:一旦事件源的狀態發生了變化,建立一個事件物件,把事件物件傳遞給監聽器,監聽器中一個方法就會執行了。(我的電動車被人踢了一腳,報警器就說話了:主人,我被人給踢了!!)
        
        * 事件物件:產生的,在監聽器中可以使用事件物件獲取事件源物件。
        
    3.模擬的一個例子


**開發步驟**

    1.編寫一個Java的類,實現監聽器的介面,重寫方法。
    2.在web.xml中進行配置。
        <listener>
            <listener-class>cn.itcast.listener1.MyServletContextListener</listener-class>
        </listener>
        
    
**第一類:域物件的建立和銷燬的監聽器**

    1.ServletContextListener  -- 監聽ServletContext物件的建立和銷燬。
        * 方法:
            * contextInitialized(ServletContextEvent sce)             -- ServletContext一被建立就執行
            * contextDestroyed(ServletContextEvent sce)             -- ServletContext一被銷燬就執行

        * ServletContext什麼建立和什麼時候銷燬?與天地同壽
            * 伺服器一啟動的時候,ServletContext建立了,一次。
            * ServletContext伺服器關閉的時候,或者專案移除了。銷燬了。
    
    
    2.HttpSessionListener  -- 監聽HttpSeesion物件的建立和銷燬
        * 方法
            * sessionCreated(HttpSessionEvent se)         -- session一建立該方法就執行
            * sessionDestroyed(HttpSessionEvent se)     -- session一銷燬該方法就執行
            
        * session什麼時候建立呢?啥時候銷燬呀?
            * 第一次呼叫該request.getSession()方法,
            * session什麼時候銷燬
                * 預設的銷燬時間 30分鐘
                * 非正常原因關閉伺服器
                * 呼叫invalidate()方法銷燬
        
        * 訪問JSP會建立session嗎 (會)? 訪問Servlet會建立呢(不一定)?訪問HTML會不會(不會)?


    3.ServletRequestListener -- 監聽ServlertRequest物件的建立和銷燬
        * 方法:
            * requestInitialized(ServletRequestEvent sre) 
            * requestDestroyed(ServletRequestEvent sre) 
        
        * request什麼是建立和銷燬?    
            * 有一次請求就建立request物件,做出響應,就銷燬了。
        
        * 訪問JSP會建立session嗎 (會)? 訪問Servlet會建立呢(會)?訪問HTML會不會(會)?
        

**統計現在線上的人數**
    
    1.第一步:編寫一個ServeltContext的監聽器,在ServletContext物件中初始化一個變數(count 0)    
    2.第二步:編寫一個HttpSession的監聽器(countListener),你只要一訪問demo1.jsp,為你建立一個session,countListener中sessionCreated方法就會執行一次。 從ServletContext中獲取count值。count++,再儲存到ServletContext.
    
    3.如果session銷燬了,sessionDestroyed預設執行,ServletContext獲取count,這回count--。
    

**第二類:域物件屬性的狀態改變的監聽器**

    1.ServletContextAttributeListener    --  監聽ServletContext域物件中的屬性的狀態改變(增強、替換、刪除)
        * attributeAdded(ServletContextAttributeEvent scab)     -- 新增屬性
        * attributeRemoved(ServletContextAttributeEvent scab)     -- 刪除屬性
        * attributeReplaced(ServletContextAttributeEvent scab)     -- 替換
    
    2.HttpSessionAttributeListener    -- 監聽HttpSession域物件的屬性的狀態改變
        * attributeAdded(HttpSessionBindingEvent se) 
        * attributeRemoved(HttpSessionBindingEvent se) 
        * attributeReplaced(HttpSessionBindingEvent se) 
        
    3.ServletRequestAttributeListener    -- 監聽ServletRequest域物件的屬性的狀態改變
        * attributeAdded(ServletRequestAttributeEvent srae) 
        * attributeRemoved(ServletRequestAttributeEvent srae) 
        * attributeReplaced(ServletRequestAttributeEvent srae) 
    
    
**第三類:session域物件中的JavaBean的監聽器**

    1.HttpSessionBindingListener        -- 監聽Session中的JavaBean物件的繫結(存入session中)和解除繫結(從session中移除)
        * 方法:
            * valueBound(HttpSessionBindingEvent event)         -- 繫結
            * valueUnbound(HttpSessionBindingEvent event)         -- 解除繫結
            
    2.HttpSessionActivationListener    -- 監聽session的中JavaBean鈍化(和session一起序列化磁碟上)和活化(從磁碟上反序列化)
        * 方法:
            * sessionDidActivate(HttpSessionEvent se)             -- 活化
            * sessionWillPassivate(HttpSessionEvent se)         -- 鈍化
    
    
    * 總結:對session機制的優化。通過鈍化的操作,如果一段時間沒有操作,可以把session鈍化(序列化磁碟上)。你要操作的時候,活化過來,session中東西還有。