欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

9.SpringMvc攔截器-創(chuàng)新互聯(lián)

1. 攔截器概念和作用
  • 攔截器(Interceptor)是一種動態(tài)攔截方法調(diào)用的機制,在SpringMVC中動態(tài)攔截控制器方法的執(zhí)行
  • 作用:
    1. 在指定的方法調(diào)用前后執(zhí)行預(yù)先設(shè)定的代碼
    2. 阻止原始方法的執(zhí)行
    3. 總結(jié):增強
  • 核心原理:AOP思想

image-20221225161308379

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供永州網(wǎng)站建設(shè)、永州做網(wǎng)站、永州網(wǎng)站設(shè)計、永州網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、永州企業(yè)網(wǎng)站模板建站服務(wù),十多年永州做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。2. 攔截器和過濾器的區(qū)別
  • 歸屬不同:Filter屬于Servlet技術(shù),Interceptor屬于SpringMVC技術(shù)
  • 攔截內(nèi)容不同:Filter對所有訪問進行增強,Interceptor僅針對SpringMVC的訪問進行增強

image-20221225161441775

3. 攔截器代碼實現(xiàn) 3.1 定義一個類,實現(xiàn)HandlerInterceptor接口
package com.zhang.controller.interceptor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//注意當(dāng)前類必須受Spring容器控制
@Component//定義攔截器類,實現(xiàn)HandlerInterceptor接口
public class ProjectInterceptor implements HandlerInterceptor { //原始方法調(diào)用前執(zhí)行的內(nèi)容
    //返回值類型可以攔截控制的執(zhí)行,true放行,false終止
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("Controller執(zhí)行前面");
        return true;
    }
     //原始方法調(diào)用后執(zhí)行的內(nèi)容
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("Controller執(zhí)行后面");
    }
     //原始方法調(diào)用完成后執(zhí)行的內(nèi)容
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {   System.out.println("Controller執(zhí)行完成后");
    }
}
3.2 配置加載攔截器,定義一個類繼承 WebMvcConfigurationSupport

這個類注意要被SpringMvcConfig配置類掃描到,不然不生效

package com.zhang.config;

import com.zhang.controller.interceptor.ProjectInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration
public class MvcSupportConfig  extends WebMvcConfigurationSupport {@Autowired
    private ProjectInterceptor projectInterceptor;
    protected void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(projectInterceptor).addPathPatterns("/**");//攔截所有請求
    }
}
3.3 Controller
package com.zhang.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/books")
public class BookController {@GetMapping()
    public String  save(){System.out.println("正在執(zhí)行Controller:"+"Book...Save");

        return "Hello SpringMvc";
    }
}
3.4 posatman發(fā)送請求,后臺打印結(jié)果image-202212251622089374. 攔截器流程分析

image-20221225162008646

5. 攔截器參數(shù) 5.1 前置處理
//原始方法調(diào)用前執(zhí)行的內(nèi)容
//返回值類型可以攔截控制的執(zhí)行,true放行,false終止
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("preHandle..."+contentType);
    return true;
}
  • 參數(shù)

    1. request:請求對象
    2. response:響應(yīng)對象
    3. handler:被調(diào)用的處理器對象,本質(zhì)上是一個方法對象,對反射技術(shù)中的Method對象進行了再包裝
  • 返回值
    返回值為false,后面的Controller方法不執(zhí)行

5.2 后置處理
//原始方法調(diào)用后執(zhí)行的內(nèi)容
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle...");
}
  • 參數(shù)
    modelAndView:如果處理器執(zhí)行完成具有返回結(jié)果,可以讀取到對應(yīng)數(shù)據(jù)與頁面信息,并進行跳轉(zhuǎn)

注意:如果處理器方法出現(xiàn)異常了,該方法不會執(zhí)行

5.3 完成后處理
//原始方法調(diào)用完成后執(zhí)行的內(nèi)容
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("afterCompletion...");
}

參數(shù)
ex:如果處理器執(zhí)行過程中出現(xiàn)異常對象,可以針對異常情況進行單獨處理

注意:無論處理器方法內(nèi)部是否出現(xiàn)異常,該方法都會執(zhí)行。

6. 攔截器鏈配置 6.1 多個攔截器配置

定義第二個攔截器

@Component
public class ProjectInterceptor2 implements HandlerInterceptor {@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("preHandle...222");
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle...222");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("afterCompletion...222");
    }
}

配置第二個攔截器

package com.zhang.config;

import com.zhang.controller.interceptor.ProjectInterceptor;
import com.zhang.controller.interceptor.ProjectInterceptor2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration
public class MvcSupportConfig  extends WebMvcConfigurationSupport {@Autowired
    private ProjectInterceptor2 projectInterceptor2;
    @Autowired
    private ProjectInterceptor projectInterceptor;
    protected void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(projectInterceptor).addPathPatterns("/**");//攔截所有請求
        registry.addInterceptor(projectInterceptor2).addPathPatterns("/**");
    }
}
6.2 多個連接器工作流程分析
  • 當(dāng)配置多個攔截器時,形成攔截器鏈
  • 攔截器鏈的運行順序參照攔截器添加順序為準(zhǔn)
  • 當(dāng)攔截器中出現(xiàn)對原始處理器的攔截,后面的攔截器均終止運行
  • 當(dāng)攔截器運行中斷,僅運行配置在前面的攔截器的afterCompletion操作

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

分享題目:9.SpringMvc攔截器-創(chuàng)新互聯(lián)
瀏覽地址:http://chinadenli.net/article38/dedipp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站動態(tài)網(wǎng)站App設(shè)計微信公眾號營銷型網(wǎng)站建設(shè)電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)