一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - springmvc實現簡單的攔截器

springmvc實現簡單的攔截器

2020-09-24 16:03Henu丶雨巷 Java教程

這篇文章主要為大家詳細介紹了springmvc實現簡單攔截器的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

SpringMVC 中的Interceptor 攔截請求是通過HandlerInterceptor 來實現的。在SpringMVC 中定義一個Interceptor 非常簡單,主要有兩種方式,第一種方式是要定義的Interceptor類要實現了Spring 的HandlerInterceptor 接口,或者是這個類繼承實現了HandlerInterceptor 接口的類,比如Spring 已經提供的實現了HandlerInterceptor 接口的抽象類HandlerInterceptorAdapter ;第二種方式是實現Spring的WebRequestInterceptor接口,或者是繼承實現了WebRequestInterceptor的類。這里主要講第一種方式,即實現HandlerInterceptor 接口

HandlerInterceptor 接口中定義了三個方法,我們就是通過這三個方法來對用戶的請求進行攔截處理的。

   (1 )preHandle (HttpServletRequest request, HttpServletResponse response, Object handle) 方法,顧名思義,該方法將在請求處理之前進行調用。SpringMVC 中的Interceptor 是鏈式的調用的,在一個應用中或者說是在一個請求中可以同時存在多個Interceptor 。每個Interceptor 的調用會依據它的聲明順序依次執行,而且最先執行的都是Interceptor 中的preHandle 方法,所以可以在這個方法中進行一些前置初始化操作或者是對當前請求的一個預處理,也可以在這個方法中進行一些判斷來決定請求是否要繼續進行下去。該方法的返回值是布爾值Boolean類型的,當它返回為false 時,表示請求結束,后續的Interceptor 和Controller 都不會再執行;當返回值為true 時就會繼續調用下一個Interceptor 的preHandle 方法,如果已經是最后一個Interceptor 的時候就會是調用當前請求的Controller 方法。

   (2 )postHandle (HttpServletRequest request, HttpServletResponse response, Object handle, ModelAndView modelAndView) 方法,由preHandle 方法的解釋我們知道這個方法包括后面要說到的afterCompletion 方法都只能是在當前所屬的Interceptor 的preHandle 方法的返回值為true 時才能被調用。postHandle 方法,顧名思義就是在當前請求進行處理之后,也就是Controller 方法調用之后執行,但是它會在DispatcherServlet 進行視圖返回渲染之前被調用,所以我們可以在這個方法中對Controller 處理之后的ModelAndView 對象進行操作。postHandle 方法被調用的方向跟preHandle 是相反的,也就是說先聲明的Interceptor 的postHandle 方法反而會后執行,這和Struts2 里面的Interceptor 的執行過程有點類型。Struts2 里面的Interceptor 的執行過程也是鏈式的,只是在Struts2 里面需要手動調用ActionInvocation 的invoke 方法來觸發對下一個Interceptor 或者是Action 的調用,然后每一個Interceptor 中在invoke 方法調用之前的內容都是按照聲明順序執行的,而invoke 方法之后的內容就是反向的。

   (3 )afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handle, Exception ex) 方法,該方法也是需要當前對應的Interceptor 的preHandle 方法的返回值為true 時才會執行。顧名思義,該方法將在整個請求結束之后,也就是在DispatcherServlet 渲染了對應的視圖之后執行。這個方法的主要作用是用于進行資源清理工作的。

Demo:

先寫一個攔截器

TestInterceptor.java

 

?
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
package com.henu.intercept;
 
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 *
 * @author duxiangyu
 * @date 2017年5月5日
 */
public class TestInterceptor implements HandlerInterceptor {
 
  public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
    
   //todo 在此處添加要操作code
   System.out.println("preHandle");
    return true; //todo 此處為false時,請求不會到達control層
  }
 
  public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
    System.out.println("postHandle"); //todo 可以用來修改信息,跳轉等
  }
 
  public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
    System.out.println("afterCompletion"); //todo 最后執行
  }
}

然后在spring-mvc.xml里面加入攔截器配置

?
1
2
3
4
5
6
<mvc:interceptors>
   <mvc:interceptor>
     <mvc:mapping path="/**"/>
     <bean id="TestInterceptor" class="com.henu.intercept.TestInterceptor"/>
   </mvc:interceptor>
</mvc:interceptors>

最后寫一個測試Controller

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.henu.intercept;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
 
@Controller
@RequestMapping("/intercept/")
public class InterceptController {
 
  @RequestMapping("test")
  public void test(){
    System.out.println("test");
  }
}

最后執行的先后順序是

springmvc實現簡單的攔截器

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲高清在线天堂精品 | 午夜无码国产理论在线 | 成人资源在线观看 | 成年人免费观看视频网站 | free性日本 | 日本96在线精品视频免费观看 | 国内精品久久久久影院网站 | 变态 另类 国产 亚洲 | 天美传媒影视在线免费观看 | 男人插曲女人下面 | a v在线男人的天堂观看免费 | 精品久久99麻豆蜜桃666 | 女人被男人躁得好爽免费视频 | 美女脱了内裤打开腿让男人图片 | 情趣内衣情趣玩具play | 精品一久久香蕉国产二月 | 青青草国产一区二区三区 | 精品一区二区三区在线播放 | 国产一区私人高清影院 | 91一区二区在线观看精品 | 久久久影院亚洲精品 | 黄漫在线播放 | 小sao货水好多真紧h的视频 | 91九色露脸 | 亚洲国产免费观看视频 | 国产在线观看一区 | 成人伊人亚洲人综合网站222 | 亚洲2017久无码 | 欧美高清milf在线播放 | 狗老公小说 | 青青青国产精品国产精品久久久久 | 国内视频一区二区三区 | 精品国产品香蕉在线观看 | 亚洲国产高清视频 | 久久精品一区二区免费看 | 9191久久| 久九九精品免费视频 | 白发在线视频播放观看免费 | 国产xxxxxx久色视频在 | 亚洲第6页| 无人在线视频高清免费观看动漫 |