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

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

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實現簡單的攔截器

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 婷婷草| 亚洲AV无码国产精品色在线看 | 高h肉厨房 | 3d动漫美女物被遭强视频 | 色老板在线 | 欧美成人aa久久狼窝动画 | 日本中文字幕一区二区高清在线 | 亚洲mm色国产网站 | 亚洲福利在线观看 | 亚洲精品卡1卡二卡3卡四卡 | 奇米影视在线视频 | 6080窝窝理论| 欧美一级艳片视频免费观看 | 日本红怡院亚洲红怡院最新 | les在宿舍吃她奶 | 奇米影视久久777中文字幕 | 国产51页| 亚洲国产精品无码中文字满 | 99成人免费视频 | 亚洲天堂网站 | 国产成人综合久久精品红 | 免费人成在线观看69式小视频 | 国内久久久 | 美女狂揉尿口揉到失禁 | 亚洲精品国产成人中文 | 精品国产自在在线在线观看 | 交换余生在线播放免费 | 边摸边吃奶边做爽视频免费 | 十大免费批日的软件 | 国产区香蕉精品系列在线观看不卡 | 关晓彤被草 | 国产盗摄wc厕所撒尿视频 | 国产区成人综合色在线 | 日产精品一二三四区国产 | 丰满在线观看 | 91亚洲精品久久91综合 | 星空无限传媒xk8027穆娜 | 日本无吗免费一二区 | 亚洲国产精品嫩草影院久久 | 洗濯屋动漫在线观看 | 日本综合在线观看 |