-
多個攔截器應(yīng)用
查看全部 -
preHandle
postHandle
afterCompletion?
查看全部 -
過濾器解決中文亂碼問題
查看全部 -
攔截器的實現(xiàn)
注冊攔截器
配置攔截器的攔截規(guī)則
查看全部 -
攔截器在實際項目中,用于對登錄權(quán)限進行管理,當用戶session失效或者未登錄狀態(tài)下,需跳轉(zhuǎn)到登錄頁進行登錄,重寫session,并根據(jù)是否攜帶resultUrl 地址進行回跳的操作,次resultUrl 是上一次被攔截的請求URL
查看全部 -
本章對攔截器和過濾器進行了對比,并對課程進行了總結(jié)。
區(qū)別:
【a】過濾器Filter依賴于Servlet容器,基于回調(diào)函數(shù),過濾范圍大。
【b】 攔截器Interceptor依賴于框架容器,基于反射機制,只過濾請求。
總結(jié):
攔截器可以處理Web應(yīng)用中請求的一些通用性問題。
共性問題在攔截器中處理,可以減少重復(fù)代碼,便于維護。
查看全部 -
本章主要對攔截器的使用場景進行介紹,解決了亂碼問題和權(quán)限驗證問題。
攔截器的使用場景
使用原則:處理所有請求的共同問題。
1、通過攔截器解決亂碼問題(可以設(shè)置請求編碼(preHandle中進行設(shè)置)和響應(yīng)編碼設(shè)置)。
攔截器類的preHandle方法中,使用HttpServletRequest對象的setCharacterEncoding("utf-8"),這樣請求執(zhí)行之前字符集被更改為utf-8。
2、解決權(quán)限驗證問題(比如:有些頁面只有登陸后,才可以使用)
在攔截器類的preHandle方法中進行判斷,如果登入成功時,會往session域中存儲一個值,該方法通過參數(shù)HttpServletRequest對象的getSesssion().getAttribute(“存儲的值”)判斷改值是否為null,也就是如果session域中沒有該值,則終止請求,通過HttpServletRequest對象的getRequestDispatcher返回登陸頁面,并且返回false。
查看全部 -
攔截器的其他實現(xiàn)方式:攔截器類實現(xiàn)另一個接口WebRequestInterceptor,它也會實現(xiàn)三個方法,方法名和前面學到的方法名一樣,只不過是參數(shù)有一些區(qū)別,還有另外一個區(qū)別是preHandle方法沒有返回值,也就是它不能像實現(xiàn)HandlerInterceptro那樣通過false返回值來終止請求,所以實際開發(fā)中經(jīng)常使用HandlerInterceptor接口,這種實現(xiàn)方式在SpringMVC中配置的寫法是不變的。
查看全部 -
多個攔截器應(yīng)用
多個攔截器:定義兩個攔截器類并實現(xiàn)HandlerInterceptor,并在SpringMVC配置文件中進行配置。
多個攔截器執(zhí)行順序:
查看全部 -
攔截器的方法介紹
1、preHandle方法:在請求被處理之前進行調(diào)用,方法返回值為boolean,該返回值代表是否將當前請求進行攔截,如果為true,請求將繼續(xù)運行,如果為false,請求將被終止(也就是請求不會到達控制器,也不會執(zhí)行另外兩個攔截器方法),該方法有三個參數(shù),HttpServletRequest存儲了請求的信息,HttpServletResponse存儲了響應(yīng)的信息,Object表示被攔截的請求目標的對象(當前攔截的就是請求要訪問的TestController的viewAll方法,可以理解為TestController的實例)。
擴展:Maven中無法使用EL表達式解決方法?
答:問題因為2.5之前,web.xml文件中的頭定義中,el表達式默認是忽略不解析的,有如下三種解決方法。
【1】jsp文件頭上添加:<%@ page isELIgnored="false"%>
? ? ? ? 【2】web.xml中添加定義。(不做詳細)
? ? ? ? ? ? ?【3】web.xml頭中添加定義。(不做詳細)
2、postHandle方法:在請求被處理之后進行調(diào)用,處了以上三個參數(shù)外,還有一個ModelAndView參數(shù),可以通過該參數(shù)改變顯示的視圖。
3、afterCompletion方法:在請求響應(yīng)結(jié)束之后(視圖顯示之后)才進行調(diào)用,主要用于一些資源的銷毀,例如連接、流等,不經(jīng)常使用它。
查看全部 -
攔截器的實現(xiàn)
步驟1:編寫攔截器類實現(xiàn)HandlerInterceptor接口,并實現(xiàn)了三個方法(preHandle():到達Controller前執(zhí)行的方法,postHandle():執(zhí)行Controller后執(zhí)行的方法,afterCompletion():執(zhí)行完Controller后的方法),分別進行了輸出,并把preHandle方法返回值false改為true
步驟2:SpringMVC的配置文件(mvc-dispatcher-servlet.xml)中注冊攔截器
使用<mvc:interceptor><bean class="攔截器的路徑"</bean></mvc:interceptor>,使用它之前需要使用到mvc的命名空間,并且配置了mvc的格式描述。
步驟3:在SpringMVC的配置文件中(mvc-dispatcher-servlet.xml)配置攔截器的攔截規(guī)則,通過<mvc:mapping path="攔截路徑"/>,例如以viewAll.form結(jié)尾的請求(path="/viewAll.form"),如果再增加一個新的方法,訪問該方法就不會執(zhí)行攔截器的方法。查看全部 -
SpringMVC攔截器的工作原理
解決亂碼問題:SpringMVC提供的一個過濾器類(在org.springframework.web-3.0.1.RELEASE-A.jar——>org.springframework.web.filter)CharacterEncodingFilter可以解決該問題。
案例:配置SpringMVC過濾器,和過濾器相似通過<filter>和<filter-mapping>進行配置,只不過過濾器的<filter-class>是自己手動編寫,而SpringMVC提供的不用再手動去設(shè)置字符集(自定義過濾器實現(xiàn)Filter接口,并手動獲取request對象,然后再設(shè)置字符集為UTF-8,再跳轉(zhuǎn)頁面,SpringMVC是固定的,也就是<init-param>中的<param-name>的值是encoding,<param-value>的值是utf-8)
拓展:關(guān)于web.xml的url映射的小知識:
< url-pattern>/</url-pattern> ?會匹配到/login這樣的路徑型url,不會匹配到模式為*.jsp這樣的后綴型url
< url-pattern>/*</url-pattern> 會匹配所有url:路徑型的和后綴型的url(包括/login,*.jsp,*.js和*.html等)注意一下CharacterEncodingFilte只可以過濾post請求編碼
查看全部 -
過濾器可以過濾靜態(tài)資源,攔截器只對請求過濾
查看全部 -
驗證登錄,都是從 request 請求中獲取session 信息
查看全部 -
攔截器,統(tǒng)一處理亂碼
查看全部
舉報