1.如何擷取RequestDispatcher
可以通過request或者web context擷取RequestDispatcher對象,不過兩個方法稍有不同。一個request可以採用相對的路徑
(也就是不以"/"開頭)作為參數,而web context需要的是絕對路徑。
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/banner");
if (dispatcher != null)
dispatcher.include(request, response);
2.Forward(dispatcher.forward(request, response)或<jsp:forward>)發生後,如何取得之前的url的相關部分
當一個請求被forward到另一個請求後,原始的URI和其組成部分被儲存為請求屬性:
javax.servlet.forward.[request-uri|context-path|servlet-path|path-info|query-string]
3.Include(dispatcher.include(request, response)或<jsp:include>)發生後,如何擷取被包含的頁面的資訊
當一個頁面被包含到另個一頁面中後,可以通過request.getRequestURL()擷取原來的父URL,而對於被包含的頁面的資訊,可以通
過擷取request中的下列屬性擷取:
javax.servlet.include.[request-uri|context-path|servlet-path|path-info|query-string]
4.session.invalidate和session.reomveAttribute區別:
removeAttribute就是從session刪除指定名稱的綁定對象,也就是說調用此方法後再調用getAttribute(Stringname)時,不能擷取
指定名稱的綁定對象,調用getAttribute方法時傳回值是null,但是session還存在。invalidate就是廢止此 session對象,解除與
此session對象綁定的所有對象,這個時候調用getAttribute方法會拋出“Session already invlidated!”異常。
註:Session的銷毀有兩種情況:逾時和手動銷毀,(1)tomcat可以通過在web.xml中添加如下的配置設定逾時的時間
<session-config><session-timeout>30</session-timeout></session-config>;(2)手動銷毀是指直接調用其invalidate方
法,此方法實際上是調用expire方法來手動將其設定為逾時invalidate是使此session對象失效,調用request.getSession(false)
返回的是null;
5.HttpServletRequest.encodeURL在session跟蹤中的應用
encodeURL(url)方法主要用於通過url重寫的機制來實現session跟蹤,它實現的邏輯如下:
(1)先判斷當前的 Web 元件是否啟用 Session,如果沒有啟用 Session,直接返回參數 url。
(2)再判斷用戶端瀏覽器是否支援 Cookie,如果支援 Cookie,直接返回參數 url;如果不支援 Cookie,就在參數 url 中加入
Session ID 資訊,然後返回修改後的 url。
對於健壯的session跟蹤,servlet中派發的所有的url都應該經過這個方法,否則的話,url重寫機制對不支援cookie的瀏覽器將不能
使用;例:
如果瀏覽器的cookie禁用,encoded url類似:http://localhost:8080/bookstore1/cashier;jsessionid=c0o7fszeb1
如果瀏覽器的cookie啟用,encoded url類似:http://localhost:8080/bookstore1/cashier
6.終止Servlet(TBD)
http://download.oracle.com/javaee/5/tutorial/doc/bnags.html
http://hi.baidu.com/clisdena/blog/item/0350621fb20df0cda786698e.html