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