天天看點

第十七天:聽課筆記

1.Servlet監聽器

J2SE中的事件監聽

f.addWindowListener(new WindowListener()        // WindowAdapter

{

 XXX(Event event){

  f = event.getSource();

  f.YYY                           //具體的動作,這些是事件源調用的

 }

});

事件源調用監聽器中XXX方法,将事件封裝成對象傳入這個方法中

事件監聽器是由事件源暴露的接口

2.對三個域監聽

ServletContext

HttpSession

ServletRequest

3.Servlet監聽器的注冊由web容器完成

4.ServletContext域對象建立和銷毀

ServletContextListener

<listener>

 <listener-class>包.類名</listener-class>

</listener>

ServletContext:

在Tomcat啟動時,有多少個web應用就建立多少個ServletContext

伺服器關閉前,先關閉代表每個web應用的ServletContext

Sprint容器,ServletContext

5.HttpSession:

Session是通過Cookie來實作的,我給你打一個id,通過Cookie傳遞過去,

你再來的時候就通過Cookie把id帶過來,我就知道你是誰了

禁用Cookie URL重寫 ---> 

浏覽器通路伺服器 伺服器建立一個id , 浏覽器通路伺服器肯定是要通路一個頁面

伺服器就在頁面的超連結<a href="XXX?jssessionid=..." target="_blank" rel="external nofollow" >新聞</a>

response.encodeRedirectURL

response.encodeURL

如果Cookie禁用了,别人通路你,每通路頁面就建立一個session,對伺服器的壓力大

是以要URL重寫

巴巴運動網:

它是通過Cookie,而不是Session,Session耗伺服器資源

要是Cookie禁用,用URL重寫

JSP 禁用Session

JSP Session内置對象,一打開JSP就建立了Session對象,

Session失效,XXX時間内使用者沒有使用

Servlet的話 要request.getSession才會建立Session對象

6.ServletRequest域:

建立:使用者每一次通路,都會建立一個request

銷毀:目前通路結束

7.案例:統計目前線上人數清單

計數器思想,将計數器放入到ServletContext

有event-->getSession--->getServletContext

計數器加一:判斷是否有,有則加一,無則建立為零

定時器

java.util.Timer

schedule(TimerTask, long, long)

任務,延時多久,每多久

TimerTask run() abstract 自己寫的類繼承它,run 方法中寫具體的代碼

new TimeTask 的時候傳入List<HttpSession>

伺服器一啟動就建立定時器

8.網站背景 無人化  通過定時器

9.監聽三個域對象屬性變化

ServletContextAttributeListener

HttpSessionAttributeListener

ServletRequestAttributeListener

增加 删除   替換

add  remove replace

列印一句話,和Head First remove不一樣,敲、想

HttpSessionBindingEvent getName getValue

10.感覺Session綁定的事件監聽器

綁定到

解除綁定

随Session對象持久化到一個儲存設備

随Session對象從一個儲存設備中恢複

我不想監聽在Session中的所有對象

我隻想監聽特定的某個對象,我想監聽誰,誰就實作那個接口

HttpSessionBindingListener:    

valueBound

valueUnbound

不用在web.xml中注冊

它加到Session相當于注冊了

監聽對象自己儲存到Session中,或從 Session中移出

11.Session長久沒活動

伺服器為了緩解壓力,它就讓它失效,把它儲存到硬碟中

HttpSessionActivationListener

鈍化:記憶體---->硬碟

活化:硬碟---->記憶體

XXX     web應用

WebRoot web應用的根目錄

   META-INF  -->  context.xml 配置開關

對象持久化:這個對象要實作Serializable

12.案例:顯示線上使用者清單,踢人

13.回顧:Servlet

Servlet

 request 用request對象封裝請求資訊

   要想得到用戶端傳遞過來的資訊,通過request

  如:上傳檔案,session, 參數

  多數是get方法, set()域

  亂碼:亂碼的原因 form 檢視編碼 ---> ISO8859-1 --->編碼 解碼

        request.setCharacterEncoidng 隻對消息頭 post

 response 用response對象封裝響應資訊

  輸出資料

  亂碼:這兩句都要寫

        response.setCharacterEncoding  //通過UTF-8寫出去

        response.setContentType      //告訴浏覽器以UTF-8方式打開

     ServletConfig

 ServletContext

  getRealPath

  三種方式:

   a.FileOutputStream 絕對路徑

  b.放到web應用 getRealPath

  c.放到classes 反射

 HttpSession

  session是如何設計,以至于它能做到位一個使用者的多次請求服務(被一個使用者的多次請求所共享)Cookie

 Cookie          

 檔案上傳

  DiskFileFactory ServletFileUpload FileItem 上傳檔案的處理技巧:(儲存安全,打散,唯一)

Filter

 用戶端找伺服器要一個檔案,在伺服器找檔案的過程中攔截

 案例:亂碼,權限,HTML,包裝,壓縮

 if(request.getHead("accpect-encoding")).contains("gzip"))

Listener

 三種類型的監聽:對象的建立和銷毀,對象屬性的增加和删除,綁定到域對象時的對象監聽器

14.建立代碼庫,寫好文檔,為以後扒代碼做準備

繼續閱讀