Java?SpringMVC實(shí)現(xiàn)自定義攔截器
SpringMVC實(shí)現(xiàn)自定義攔截器
1 攔截器(interceptor)的作用
Spring MVC 的攔截器類(lèi)似于 Servlet 開(kāi)發(fā)中的過(guò)濾器 Filter,用于對(duì)處理器進(jìn)行預(yù)處理和后處理。
將攔截器按一定的順序聯(lián)結(jié)成一條鏈,這條鏈稱(chēng)為攔截器鏈(InterceptorChain)。在訪(fǎng)問(wèn)被攔截的方法或字段時(shí),攔截器鏈中的攔截器就會(huì)按其之前定義的順序被調(diào)用。攔截器也是AOP思想的具體實(shí)現(xiàn)。
2 攔截器和過(guò)濾器區(qū)別
關(guān)于interceptor和filter的區(qū)別,如圖所示:
3.實(shí)現(xiàn)過(guò)程
步驟分析:
1.創(chuàng)建攔截器類(lèi)實(shí)現(xiàn)HandlerInterceptor接口
2.配置攔截器
3.測(cè)試攔截器的攔截效果
3.1創(chuàng)建攔截器類(lèi)實(shí)現(xiàn)HandlerInterceptor接口
public class MyInterceptor implements HandlerInterceptor { /** * preHandle: 在目標(biāo)方法執(zhí)行之前 進(jìn)行攔截 return false:不放行 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle1...."); return true; } /** * postHandle: 在目標(biāo)方法執(zhí)行之后,視圖對(duì)象返回之前,執(zhí)行的方法 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle1...."); } /** * afterCompletion:在流程都執(zhí)行完成后,執(zhí)行的方法 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion1...."); } }
3.2配置攔截器
<!-- 配置攔截器--> <mvc:interceptors> <mvc:interceptor> <!--對(duì)哪些資源執(zhí)行攔截操作 path="/**"表示對(duì)controller層所有方法進(jìn)行攔截 --> <mvc:mapping path="/**" /> <bean class="com.weihong.interceptor.MyInterceptor" /> </mvc:interceptor> </mvc:interceptors>
3.3測(cè)試攔截器的攔截效果
@RequestMapping("/target") public String targetMethed(){ System.out.println("目標(biāo)方法執(zhí)行了"); return "interceptor"; }
3.4編寫(xiě)jsp頁(yè)面
<html> <head> <title>Title</title> </head> <body> <h3>success~~~~~~</h3> <% System.out.println("視圖執(zhí)行了....");%> </body> </html>
3.5測(cè)試結(jié)果
4. 攔截器鏈
開(kāi)發(fā)中攔截器可以單獨(dú)使用,也可以同時(shí)使用多個(gè)攔截器形成一條攔截器鏈。開(kāi)發(fā)步驟和單個(gè)攔截器是一樣的,只不過(guò)注冊(cè)的時(shí)候注冊(cè)多個(gè),注意這里注冊(cè)的順序就代表攔截器執(zhí)行的順序。
同上,再編寫(xiě)一個(gè)MyHandlerInterceptor2操作,測(cè)試執(zhí)行順序:
<!--配置攔截器--> <mvc:interceptors> <mvc:interceptor> <!--攔截器路徑配置--> <mvc:mapping path="/**"/> <!--自定義攔截器類(lèi)--> <bean class="com.lagou.interceptor.MyInterceptor1"></bean> </mvc:interceptor> <mvc:interceptor> <!--攔截器路徑配置--> <mvc:mapping path="/**"/> <!--自定義攔截器類(lèi)--> <bean class="com.lagou.interceptor.MyInterceptor2"></bean> </mvc:interceptor> </mvc:interceptors>
5. 知識(shí)小結(jié)
攔截器中的方法說(shuō)明如下:
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Java多線(xiàn)程之鎖的強(qiáng)化學(xué)習(xí)
Java多線(xiàn)程的鎖都是基于對(duì)象的,Java中的每一個(gè)對(duì)象都可以作為一個(gè)鎖。這篇文章主要來(lái)通過(guò)一下示例為大家強(qiáng)化一下鎖的相關(guān)知識(shí)的掌握,希望對(duì)大家有所幫助2023-02-02詳解java中List中set方法和add方法的區(qū)別
本文主要介紹了詳解java中List中set方法和add方法的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08java判斷請(qǐng)求是來(lái)自PC端還是手機(jī)端小技巧
這篇文章主要為大家介紹了java判斷請(qǐng)求是來(lái)自PC端還是手機(jī)端小技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Springboot整合Mybatis傳值的常用方式總結(jié)
今天給大家?guī)?lái)的是關(guān)于Springboot的相關(guān)知識(shí),文章圍繞著Springboot整合Mybatis傳值的常用方式展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06