java web:過濾器

過濾器

 

1. 概念


Filter  過濾器
可以對請求(響應)進行過濾

請求 --> 過濾器1 --> 過濾器2 --> .... --> 過濾器n --> 目的地(Servlet, jsp)

 

2. 編寫過濾器的步驟


1. 實現Filter接口
2. 在類上添加@WebFilter(urlPattern="要過濾的目標路徑")
3. 在doFilter方法中控制請求是否前進到下一個過濾器
 

// 調用此方法,表示請求繼續前進,不調用,請求就停止不前了
filterChain.doFilter(request, response); 

 

3. 匹配路徑的三種寫法


1) 精確匹配

目標路徑是過濾器路徑就是什麼
例如: /s1  /s2 ...
2) 前綴匹配
例如:有兩個servlet,路徑分別是 /user/s1, /user/s2
過濾器的匹配路徑就可以寫爲: /user/ *

/ * 表示匹配此應用程序中所有路徑


3) 後綴匹配:
*.後綴
注意: 後綴匹配不要以/開頭, 精確匹配和前綴匹配需要以/開頭

*.jsp 表示在請求到達所有jsp之前,經過此過濾器


 5. 多個過濾器


使用@WebFilter註解去控制匹配路徑時,多個過濾器都匹配目標,執行順序和過濾器類名有關。
按類名的字母順序排序

 

 6. 過濾器的應用


應用1: 字符編碼過濾器
        在過濾器中統一調用 request.setCharacterEncoding方法
應用2: 登錄檢查

HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpSession session = request.getSession();
// 檢查是否有登錄標記
if(session.getAttribute("isLogin") == null) { // 如果沒有找到
    request.getRequestDispatcher("/login.jsp").forward(request, servletResponse);
    return;
} else { // 找到登錄標記, 放行請求,讓請求繼續前進
    filterChain.doFilter(request, servletResponse);
}


應用3: 自動登錄


1) 過濾器
2) cookie (把用戶名和密碼的信息記錄在cookie)

 

 7. jsp 隱式對象(9個)

config      jsp的配置信息
page        jsp自身對象(this)
exception   異常對象(isErrorPage=true)

response 響應
out      響應字符流

pageContext 頁面作用域
request     請求作用域 變量類型 HttpServletRequest
session     會話作用域 (同一個客戶端的多次請求)  HttpSession
application 應用作用域 變量類型 ServletContext (上下文)

    他們都有如下方法
    .setAttribute("名", 值);   // 設置
    Object 值 = .getAttribute("名"); // 獲取
    Object 值 = .removeAttribute("名"); // 刪除

作用域(Scope)

<%// 向page作用域存入內容
//    pageContext.setAttribute("name", "張三"); // 同一頁面中的信息
    request.setAttribute("name", "李四");    // 一次請求有效的信息(例如servlet存入結果,jsp獲取結果)
    session.setAttribute("name", "王五"); // 每個用戶(瀏覽器)獨有的信息(例如購物車信息)
    application.setAttribute("name", "趙六"); // 適合放全局信息(城市信息, 類別信息)
    %>

    <!-- 從page作用域獲取內容-->
    <%= pageContext.getAttribute("name")%>
    <!--  從page作用域獲取內容(推薦) -->
    ${pageScope.name}

    <!-- 從request作用域取-->
    <%= request.getAttribute("name")%>
    <!-- 從request作用域取(推薦)-->
    ${requestScope.name}

    <!-- 從session作用域取值 -->
    <%= session.getAttribute("name")%>
    <!-- 從session作用域取值(推薦) -->
    ${sessionScope.name}

    <!-- 從application作用域取值 -->
    <%= application.getAttribute("name")%>
    <!-- 從application作用域取值(推薦) -->
    ${applicationScope.name}

    <hr/>
    <!-- 在el表達式取作用域變量時,不加前綴,先搜索pageScope, 再搜索requestScope, 繼續搜索sessionScope, 再搜索applicationScope-->
    ${name}


8. el表達式中的隱式對象11個

pageScope           page作用域   類型是map集合
requestScope    request作用域 類型是map集合
sessionScope    會話作用域    類型是map集合
applicationScope 應用作用域   類型是map集合

param           代表所有請求參數集合 類型是map集合
paramValues      代表所有請求參數集合(用來獲取多值參數)

cookie           代表請求中所有的cookie集合 map類型 
                key是cookie的name, value是cookie對象(name,value)

header         獲取請求頭的內容 類型是map集合f
                 key是請求頭中key的名稱
headerValues    獲取請求頭的內容(用來獲取多值)
initParam      每個jsp可以配置一個初始化參數
    initParam.key
pageContext


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章