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.建立代碼庫,寫好文檔,為以後扒代碼做準備