溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SpringMVC的攔截器、過(guò)濾器、視圖層、異步源碼分析

發(fā)布時(shí)間:2021-11-17 10:03:58 來(lái)源:億速云 閱讀:123 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“SpringMVC的攔截器、過(guò)濾器、視圖層、異步源碼分析”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

SpringMVC注解方式開啟視圖層

整合Jsp 視圖層

@Bean
public InternalResourceViewResolver internalResourceViewResolver() {
    // 1.需要前綴
    InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
    // 2.需要后綴
    internalResourceViewResolver.setPrefix("/WEB-INF/view/");
    internalResourceViewResolver.setSuffix(".jsp");
    return internalResourceViewResolver;
}
<%@ page contentType="text/html;charset=UTF-8"> 
 SpringMVC攔截器使用攔截器與過(guò)濾器區(qū)別攔截器和過(guò)濾器都是基于AOP實(shí)現(xiàn)的,能夠?qū)φ?qǐng)求方法之前和之后實(shí)現(xiàn)攔截過(guò)濾器是基于Servlet實(shí)現(xiàn)的,對(duì)web請(qǐng)求之前和之后實(shí)現(xiàn)攔截?cái)r截器不需要依賴servlet,不僅可以實(shí)現(xiàn)web請(qǐng)求,還可以對(duì)其它方法攔截 SpringMVC攔截器的使用1.自定義攔截器攔截請(qǐng)求Tokenpublic class TokenInterceptor implements HandlerInterceptor {
    /**
     * 請(qǐng)求方法前置攔截,如果返回true 表示會(huì)執(zhí)行到目標(biāo)方法(請(qǐng)求方法) 如果返回false的情況下 則不會(huì)執(zhí)行目標(biāo)方法。
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String token = request.getParameter("token");
        System.out.println(">>>>token<<<<:" + token);
        if (StringUtils.isEmpty(token)) {
            response.setStatus(500);
            response.getWriter().print(" token is null");
            return false;
        }
        // 執(zhí)行我們的請(qǐng)求方法
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("<<<postHandle>>>>");
        // 請(qǐng)求之后執(zhí)行。
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println(">>>afterCompletion<<<");
        // 請(qǐng)求之后執(zhí)行。
    }
} @Configuration
@ComponentScan(basePackages = {"com.mayikt.controller","com.mayikt.service"})
public class SpringMvcConfig extends WebMvcConfigurationSupport {
  ...// 1.手動(dòng)注入攔截器到Spring中@Bean
    public TokenInterceptor tokenInterceptor() {
        return new TokenInterceptor();
    }    // 2.添加攔截器@Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(tokenInterceptor()).addPathPatterns("/**");// 攔截所有的請(qǐng)求}
} 注意:使用攔截器一定要關(guān)閉EnableWebMvc 否則攔截器不會(huì)生效。進(jìn)入這個(gè)@EnableWebMvc注解中,可知加入這個(gè)注解EnableWebMvc重復(fù)注入了WebMvcConfigurationSupport,會(huì)覆蓋我們自定義的配置類 SpringMVC多線程異步處理使用異步注解@EnableAsync@RequestMapping("/pay")
public String pay() {
    System.out.println(">>>1.開始調(diào)用pay<<<<<<< ThradName:" + Thread.currentThread().getName());
    payServie.pay();
    System.out.println(">>>3.結(jié)束調(diào)用pay<<<<<<< ThradName:" + Thread.currentThread().getName());
    return "pay";
} 使用異步Callable 帶返回結(jié)果@RequestMapping("/asyncPay")
@ResponseBody
public Callable<String> asyncPay() {
    System.out.println("1.開始執(zhí)行payToMember>>>> name:" + Thread.currentThread().getName());
    Callable callable = new Callable<String>() {
        // 異步的對(duì)吧!
        public String call() throws Exception {
            // 耗時(shí)的時(shí)間都可以放到這個(gè)里面做 安卓里面
            String member = memberService.member();
            return member;
        }
    };
    System.out.println("4.<<<<結(jié)束執(zhí)行payToMember>>> name:" + Thread.currentThread().getName());
    return callable;
} @Component
public class MemberService {

    /**
     * member方法單獨(dú)開啟一個(gè)線程處理請(qǐng)求
     *
     * @return
     */
    public String member() {
        try {
            System.out.println("2.開始調(diào)用會(huì)員服務(wù)接口... name:" + Thread.currentThread().getName());
            Thread.sleep(5000);
            System.out.println("3.結(jié)束調(diào)用會(huì)員服務(wù)接口.. name:" + Thread.currentThread().getName());
        } catch (Exception e) {

        }
        return "member";
    }
}  面試題:SpringMVC項(xiàng)目中使用到多線程? 肯定是有。為什么要使用多線程?提高我們響應(yīng)的速度、異步執(zhí)行。在我們的Web中為什么要使用異步呢?目的:快速響應(yīng)給客戶端,防止客戶端請(qǐng)求等待的。單獨(dú)開啟一個(gè)線程處理。使用異步也有缺點(diǎn):線程安全問(wèn)題、不能及時(shí)拿到結(jié)果、消耗CPU能夠讓耗時(shí)的時(shí)間,交給單獨(dú)線程處理 也能夠拿到異步線程結(jié)果本文參考螞蟻課堂http://www.mayikt.com/

“SpringMVC的攔截器、過(guò)濾器、視圖層、異步源碼分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI