JavaWeb - Cookie/Session&Filter/Listener&MVC
JavaWeb - Cookie/Session&Filter/Listener&MVC
目錄1 Cookie&Session
1.1 會話技術
建立會話:
- B/S架構中,瀏覽器給伺服器傳送第一次請求
斷開會話:
- 瀏覽器或伺服器有一方斷開
一次會話包含多次請求響應
http協議是無狀態協議,同一會話中多個請求是獨立的,資料無法共享
1.1.1 會話技術的目的
儲存瀏覽器與伺服器之間多次請求之間的資料
客戶端會話技術:cookie
伺服器端會話技術:session
1.2 Cookie
1.2.1 作用概述:
- 在一次會話中的多次請求之間共享資料
- 將資料儲存到瀏覽器端
1.2.2 Cookie使用相關API
//建立cookie物件,value裡面只能存字串 Cookie cookie = new Cookie(String name, String value); //通過response物件響應cookie reponse.addCookie(cookie) //從cookie中獲取資料 //通過request物件接收cookie陣列 Cookie[] cookies = request.getCookies(); //獲取cookie的名稱和值 cookie.getName() & cookie.getValue()
1.2.3 Cookie的工作原理
瀏覽器具有儲存cookie能力和在傳送的請求中攜帶cookie的能力
基於HTTP協議:請求頭cookie和響應頭set-cookie
1.2.4 Cookie使用細節
-
伺服器可以傳送多個cookie 通過response.addcookie(cookie)儲存到瀏覽器
-
Cookie在瀏覽器儲存時間
- 預設情況下:瀏覽器關閉(會話結束),cookie銷燬
- 手動設定cookie存活時間 cookie.setMaxAge(int second) - 單位是秒
-
Cookie中是否可以存中文
- tomcat8之前版本不支援中文
- tomcat8之後版本支援中文但不允許使用分號,空格等一些特殊符號
- 使用URLEncoder和URLDecoder來進行編解碼支援所有版本
-
cookie.setMaxAge(int second)引數設定
- 正數:指定存活時間,持久化瀏覽器的磁碟中,到期後自動銷燬
- 負數:預設瀏覽器關閉,cookie銷燬
- 零:立即銷燬
-
URLEncoder.encode(傳入內容, 編碼方式)
-
URLDecoder.decode(value, 編碼方式)
1.2.5 Cookie的特點
- cookie儲存資料都在客戶端(瀏覽器)
- cookie的儲存資料只能是字串
- cookie單個大小不能超過4kb
- cookie儲存的資料不太安全
1.3 Session
1.3.1 Session概述
使用cookie的問題:
最多儲存4k字串
儲存資料不安全
session的作用
在一次會話的多次請求之間共享資料,將資料儲存到伺服器端
1.3.2 Session的使用
- 將資料存到session中
//1.通過request物件獲取session物件
HttpSession session = request.getSession();
//2.操作session的API,儲存資料
session.setAttribute("name",hvalue)
- 從session中獲取資料
//1.通過request物件獲取session物件
HttpSession session = request.getSession();
//2.操作session的API獲取資料
session.getAttribute("name");
1.3.3 HttpSession 物件
-
是一個域物件
-
API
//1.儲存資料
void setAttribute(String name, Objetc value)
//2.獲取資料
object getAttribute(String name)
//3.刪除資料
void removeAttribute(String name)
1.3.4 session的工作原理
基於cookie實現:設定session後響應頭通過set-cookie: JSESSIONID 唯一標識來區別不同的session空間
下一次請求傳送時request物件會攜帶JSESSIONID
1.3.5 session的生命週期
何時建立:
使用者第一次呼叫request.getSession()方法時建立
何時銷燬
-
伺服器非正常關閉
-
非活躍狀態30分鐘後
- tomcat進行配置 /tomcat安裝目錄/conf/web.xml
-
session.invalidate() 立馬銷燬
作用範圍
一次會話中多次請求間
每個瀏覽器跟伺服器都是獨立的會話
1.4 三大域物件總結
- HttpServletRequest
- ServletContext
- HttpSession
API 基本API三大域物件相同
- 設定資料 void setAttribute(String name, Object value)
- 獲取資料 Object getAtrribute(String name)
- 刪除資料 void removeAtrribute(String name)
生命週期
何時建立:
- ServletContext在伺服器正常啟動,專案載入時建立
- HttpSession 在使用者第一次呼叫getSession()方法時建立
- HttpServletRequest 在使用者傳送請求時建立
何時銷燬:
- ServletContext在伺服器關閉或專案解除安裝時銷燬
- HttpSession在伺服器非正常關閉/未活躍狀態30分鐘/自殺時銷燬
- HttpServletRequest在伺服器做出響應後銷燬
作用範圍:
- ServletContext整個web專案(共享資料)
- HttpSession一次會話中,多次請求間(共享資料)
- HttpServletRequest在一次請求中,多次轉發間(共享資料)
1.4.1 小結
- 能用小的不用大的:HttpServletRequest < HttpSession < ServletContext
- 常用場景:
- request:一次查詢的結果(servlet轉發jsp)
- session:存放當前會話的私有資料
- 使用者登陸狀態
- 驗證碼
- 購物車
- servletcontext:若需要所有的servlet都能訪問到才使用這個物件
2 Filter&Listener
2.1 Filter
2.1.1 概念
作用:當用戶訪問伺服器資源時,過濾器將請求攔截下來。完成一些通用的操作
應用場景:登陸驗證,統一編碼處理,敏感字元處理
2.1.2 Filter快速使用
-
實現Filter介面,重寫init(), doFilter(), destory()方法
-
doFilter(servletRequest, servletResponse, filterChain)進行業務邏輯處理和放行處理
- servletRequest 請求物件
- servletResponse 響應物件
- filterChain 過濾器鏈(是否放行)
-
放行操作呼叫filterChain.doFilter(servletRequest, servletResponse)
-
web.xml 中配置
過濾器類全路徑,並配置 url-pattern配置過濾器的攔截路徑
2.1.3 Filter生命週期
建立:
伺服器啟動專案載入,建立filter物件,執行init方法(僅1次)
攔截生效:
當用戶訪問被攔截目標時,執行doFilter方法
銷燬:
伺服器關閉專案時,銷燬filter物件,執行destory物件(僅一次)
2.1.4 Filter攔截路徑設定
在web.xml中的
- 精確匹配 訪問指定目標資源
- 目錄匹配 訪問指定目錄下 /a/*
- 字尾匹配 訪問指定字尾名 (*.html)
- 匹配所有 訪問所有資源 /*
2.1.5 Filter過濾器鏈
一次請求中匹配到多個filter
過濾器鏈執行順序:
- filterA攔截,放行
- filterB攔截,放行
- 訪問目標資源
- filterB響應增強
- filterA響應增強
2.2 Listner
2.2.1 概念
能夠監聽三大域物件
應用場景:
歷史訪問次數,統計線上人數,系統啟動時初始化配置資訊
2.2.2 ServletContextListener介面
API
void contextInitialized(ServletContextEvent sce) 監聽servletcontext建立
void contextDestoryed(ServletContextEvent sce) 監聽servletcontext銷燬
實現步驟:
- 實現ServletContextListener介面
- 實現ServletContextListener介面中的contextInitialized和contextDestoryed方法
- web.xml中進行配置
-
3 MVC模式及三層架構
3.1 MVC模式
概念:
MVC是軟體工程中的一種軟體架構模式,是一種分離業務邏輯與顯示頁面的設計方法
model-view-controller:
- model - JavaBean - 處理業務邏輯,封裝實體
- view - Jsp展示資料
- controller - servlet - 接受請求&呼叫模型&轉發檢視
目的:高內聚,低耦合
優缺點:
優點:降低耦合性,方便維護和拓展,利於分工協作
缺點:使得專案架構變得複雜
3.2 三層架構
概念
三層架構就是將整個業務應用劃分為表現層,業務邏輯層,資料訪問層
- 表現層:web層,與瀏覽器進行資料互動(controller和view)
- 業務邏輯層:service層,處理業務邏輯
- 資料訪問層(持久層):dao層,與資料庫進行互動(記錄與JavaBean實體對應)