標籤:區別 購物車 表單提交 瀏覽器 預先處理 實現 current 登入 ini
一 Session篇
1. Session是什嗎?
Session Object Storage Service特定使用者會話所需的屬性及配置資訊;
Session一詞與網路通訊協定相關聯時,它又往往隱含了“連線導向”和/或“保持狀態”這樣兩個含義,“連線導向”指的是在通訊雙方在通訊之前要先建立一個通訊的渠道;
在web伺服器蓬勃發展的時代,session在web開發語境下的語義又有了新的擴充,它的含義是指一類用來在用戶端與伺服器之間保持狀態的解決方案。
2. Session的工作原理
1). 建立Session:當使用者訪問到一個伺服器,如果伺服器啟用Session,伺服器就要為該使用者建立一個SESSION,在建立這個SESSION的時候,伺服器首先檢查這個使用者發來的請求裡是否包含了一個SESSION ID,這個SESSION ID是唯一的、不重複的、不容易找到規律的字串,這個SESSION ID將被在本次響應中返回到用戶端儲存,而儲存這個SESSION ID的正是COOKIE,這樣在互動過程中瀏覽器可以自動的按照規則把這個標識發送給伺服器;
2). 使用Session:經常被使用的一種技術叫做URL重寫,就是把Session id直接附加在URL路徑的後面一種是作為URL路徑的附加資訊;另一種是作為查詢字串附加在URL後面;還有一種就是表單隱藏欄位。就是伺服器會自動修改表單,添加一個隱藏欄位,以便在表單提交時能夠把Session id傳遞迴伺服器;
3. 作用:
Session的根本作用就是在服務端儲存使用者和伺服器會話的一些資訊。典型的應用有:
1). 判斷使用者是否登入。
2). 購物車功能。
4. 用法:
可以使用 Session Object Storage Service特定使用者會話所需的資訊。這樣,當使用者在應用程式的 Web 頁之間跳轉時,儲存在 Session 對象中的變數將不會丟失,而是在整個使用者會話中一直存在下去。
當使用者請求來自應用程式的 Web 頁時,如果該使用者還沒有會話,則 Web 服務器將自動建立一個 Session 對象。當會話到期或被放棄後,伺服器將終止該會話。
Session 對象最常見的一個用法就是儲存使用者的喜好設定。例如,如果使用者指明不喜歡查看圖形,就可以將該資訊儲存在 Session 對象中。
注意:工作階段狀態僅在支援 cookie 的瀏覽器中保留。
5. Session與cookies的區別:
1). cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上;
2). cookie不是很安全,別人可以分析存放在本地的COOKIE並進行cookie欺騙考慮到安全應當使用session;
3). session會在一定時間內儲存在伺服器上。當訪問增多,會比較佔用你伺服器的效能考慮到減輕伺服器效能方面,應當使用cookie;
4). 單個cookie儲存的資料不能超過4K,很多瀏覽器都限制一個網站最多儲存20個cookie。
Session是通過cookie來工作的。
二 代碼篇
@WebFilter(filterName="log",urlPatterns={"/*"})//建立一個LOgFilter類public class LogFilter implements Filter{//FilterConfig可用於訪問Filter的配置資訊private FilterConfig config;//實現初始化方法public void init(FilterConfig config){this.config = config;}//實現銷毀方法public void destroy(){this.config = null;}//執行過濾的核心方法public void doFilter(ServletRequest request,ServletResponse response, FilterChain chain)throws IOException,ServletException//建立一個doFilter 類,request參數是用於擷取客戶請求資料,response參數是用於發送響應資料,chain參數是過濾調用鏈。{//---------下面代碼用於對使用者請求執行預先處理---------//擷取ServletContext對象,用於記錄日誌ServletContext context = this.config.getServletContext();long before = System.currentTimeMillis();//是獲得目前時間距離1970-1-1 00:00:00經過的毫秒數System.out.println("開始過濾...");//將請求轉換成HttpServletRequest請求HttpServletRequest hrequest = (HttpServletRequest)request;//把request強制類型轉換為HttpServletRequest對象//輸出提示資訊System.out.println("Filter已經截獲到使用者的請求的地址: " +hrequest.getServletPath());//hrequest.getServletPath()是返回的是項目名到當前jsp檔案的路徑(意思就是在這個項目首頁到檔案的路徑)//Filter只是鏈式處理,請求依然允許存取到目的地址chain.doFilter(request, response);//調用下一個filter。//---------下面代碼用於對伺服器響應執行後處理---------long after = System.currentTimeMillis();//是獲得目前時間距離1970-1-1 00:00:00經過的毫秒數//輸出提示資訊System.out.println("過濾結束");//輸出提示資訊System.out.println("請求被定位到" + hrequest.getRequestURI() +" 所花的時間為: " + (after - before));//hrequest.getRequestURI()是返回的整個URL的路徑請求(意思就是返回的瀏覽器地址欄的整個地址)}}
JavaEE 第三周