日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring—拦截器和异常

發(fā)布時間:2023/11/29 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring—拦截器和异常 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

SpringMVC的攔截器

SpringMVC攔截器-攔截器的作用

Spring MVC 的攔截器類似于 Servlet 開發(fā)中的過濾器 Filter,用于對處理器進行預(yù)處理和后處理。

將攔截器按一定的順序聯(lián)結(jié)成一條鏈,這條鏈稱為攔截器鏈(InterceptorChain)。在訪問被攔截的方法或字段時,攔截器鏈中的攔截器就會按其之前定義的順序被調(diào)用。攔截器也是AOP思想的具體實現(xiàn)。

自定義攔截器很簡單,只有如下三步:
①創(chuàng)建攔截器類實現(xiàn)HandlerInterceptor接口

public class MyInterceptor1 implements HandlerInterceptor {public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("preHandle");return true;}public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle");}public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println(" afterCompletion");} } public class MyInterceptor2 implements HandlerInterceptor {public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("preHandle2");return true;}public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle2");}public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println(" afterCompletion2");} }

②配置攔截器

<mvc:interceptors><mvc:interceptor><mvc:mapping path="/**"/><bean class="com.controller.MyInterceptor1"/></mvc:interceptor><mvc:interceptor><mvc:mapping path="/**"/><bean class="com.controller.MyInterceptor2"/></mvc:interceptor></mvc:interceptors>

③測試攔截器的攔截效果

@RequestMapping(value = {"/qq2"})public ModelAndView method2(ModelAndView modelAndView){modelAndView.addObject("name","ccc");modelAndView.setViewName("success");return modelAndView;}

結(jié)論:

當(dāng)攔截器的preHandle方法返回true則會執(zhí)行目標(biāo)資源,如果返回false則不執(zhí)行目標(biāo)資源

多個攔截器情況下,配置在前的先執(zhí)行,配置在后的后執(zhí)行

攔截器中的方法執(zhí)行順序是:preHandler-------目標(biāo)資源----postHandle---- afterCompletion

SpringMVC異常處理機制

異常處理的思路

系統(tǒng)中異常包括兩類:預(yù)期異常和運行時異常RuntimeException,前者通過捕獲異常從而獲取異常信息,后者主要通過規(guī)范代碼開發(fā)、測試等手段減少運行時異常的發(fā)生。

系統(tǒng)的Dao、Service、Controller出現(xiàn)都通過throws Exception向上拋出,最后由SpringMVC前端控制器交由異常處理器進行異常處理,

異常處理兩種方式

① 使用Spring MVC提供的簡單異常處理器SimpleMappingExceptionResolver

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"><property name="defaultErrorView" value="error"/><property name="exceptionMappings"><map><entry key="java.lang.NumberFormatException" value="error"/></map></property></bean> @RequestMapping(value = {"/qq2"})public ModelAndView method2(ModelAndView modelAndView) throws Exception{String s="abc";System.out.println(Integer.parseInt(s));modelAndView.addObject("name","ccc");modelAndView.setViewName("success");return modelAndView;}

② 實現(xiàn)Spring的異常處理接口HandlerExceptionResolver 自定義自己的異常處理器

自定義異常處理步驟

①創(chuàng)建異常處理器類實現(xiàn)HandlerExceptionResolver

public class MyExceptionResolver implements HandlerExceptionResolver {public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {ModelAndView modelAndView = new ModelAndView();modelAndView.setViewName("error");return modelAndView;} }

②配置異常處理器

<bean class="com.controller.MyExceptionResolver"/>

③編寫異常頁面

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>Title</title> </head> <body> <h1>error</h1> </body> </html>

④測試異常跳轉(zhuǎn)

總結(jié)

以上是生活随笔為你收集整理的spring—拦截器和异常的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。