攔截器的實現(xiàn)
1、編寫攔截器類實現(xiàn)HandlerInterceptor接口;
2、將攔截器注冊進(jìn)springmvc框架中;
3、配置攔截器的攔截規(guī)則;
其他實現(xiàn)方法
WebRequestInterceptor接口:
與上一個的區(qū)別是參數(shù)區(qū)別和prehandle的方法沒有返回值。沒有上一個功能全,因此常用第一個。
攔截器的使用場景
處理所有請求共性問題:
1、亂碼問題:用request,response參數(shù)去設(shè)置編碼;
2、解決權(quán)限驗證問題(是否登陸,取session對象查看);
攔截器與過濾器的區(qū)別
1、攔截器Interceptor依賴于框架容器,基于反射機(jī)制,只過濾請求;
2、過濾器Filter依賴于Servlet容器,基于回調(diào)函數(shù),過濾范圍大;
例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class TestInterceptor implements HandlerInterceptor { /** * 返回值說明是否需要將當(dāng)前的請求攔截下來 * false:請求將被終止 * true:請求會被繼續(xù)運(yùn)行 * Object handler 表示的是被攔截的請求的目標(biāo)對象 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println( "TestInterceptor.preHandle()" ); return true ; } /** * modelAndView: * 可以通過modelAndView參數(shù)改變顯示的視圖,或者修改發(fā)往視圖的方法 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println( "TestInterceptor.postHandle()" ); } /** * 在視圖加載完畢之后調(diào)用 * 常用于作于資源的銷毀,流等 * 類似于析構(gòu)函數(shù) */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println( "TestInterceptor.afterCompletion()" ); } } |
注冊方式:
在springmvc的Dispatcherservlet配置文件中加入攔截器代碼;
1
2
3
4
5
6
7
8
9
10
11
12
|
<!-- 注冊攔截器 --> < mvc:interceptors > <!-- 單個攔截器:設(shè)置具體的攔截路徑 --> < mvc:interceptor > < mvc:mapping path = "/courses/view2/*" /> < bean class = "com.cc.mvcdemo.interceptor.TestInterceptor" ></ bean > </ mvc:interceptor > <!-- 第二種方式:攔截經(jīng)過當(dāng)前Dispatcherservlet的所有請求 --> < bean class = "com.cc.mvcdemo.interceptor.TestInterceptorTwo" ></ bean > </ mvc:interceptors > |
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:http://blog.csdn.net/qq_28851503/article/details/56839876