日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > 綜合技術(shù) > SpringMVC對(duì)異常處理的支持

SpringMVC對(duì)異常處理的支持

來(lái)源:程序員人生   發(fā)布時(shí)間:2015-01-07 08:11:04 閱讀次數(shù):2538次

不管做甚么項(xiàng)目,進(jìn)行異常處理都是非常有必要的,而且你不能把1些只有程序員才能看懂的毛病代碼拋給用戶去看,所以這時(shí)候候進(jìn)行統(tǒng)1的異常處理,展現(xiàn)1個(gè)比較友好的毛病頁(yè)面就顯得很有必要了。跟其他MVC框架1樣,springMVC也有自己的異常處理機(jī)制。
springMVC提供的異常處理主要有兩種方式,1種是直接實(shí)現(xiàn)自己的HandlerExceptionResolver,固然這也包括使用Spring已為我們提供好的SimpleMappingExceptionResolver和DefaultHandlerExceptionResolver,另外一種是使用注解的方式實(shí)現(xiàn)1個(gè)專門(mén)用于處理異常的Controller――ExceptionHandler。


1、實(shí)現(xiàn)自己的HandlerExceptionResolver,HandlerExceptionResolver是1個(gè)接口,springMVC本身已對(duì)其有了1個(gè)本身的實(shí)現(xiàn)――DefaultHandlerExceptionResolver,該解析器只是對(duì)其中的1些比較典型的異常進(jìn)行了攔截,然后返回對(duì)應(yīng)的毛病碼,固然你也能夠繼承DefaultHandlerExceptionResolver類,然后重寫(xiě)其中的1些異常處理方法來(lái)實(shí)現(xiàn)自己的異常處理。

Java代碼
 收藏代碼
  1. import javax.servlet.http.HttpServletRequest;  
  2. import javax.servlet.http.HttpServletResponse;  
  3.   
  4. import org.springframework.web.servlet.HandlerExceptionResolver;  
  5. import org.springframework.web.servlet.ModelAndView;  
  6.   
  7. public class ExceptionHandler implements HandlerExceptionResolver {  
  8.   
  9.     @Override  
  10.     public ModelAndView resolveException(HttpServletRequest request,  
  11.             HttpServletResponse response, Object handler, Exception ex) {  
  12.         // TODO Auto-generated method stub  
  13.         return new ModelAndView("exception");  
  14.     }  
  15.   
  16. }  

 上述的resolveException的第4個(gè)參數(shù)表示對(duì)哪一種類型的異常進(jìn)行處理。由于Exception類是所有異常類的基類,所以如果想根據(jù)異常類型的不同來(lái)進(jìn)行不同的處理的話,可以在resolveException方法里面根據(jù)不同的異常類型進(jìn)行不同的處理,返回不同的異常視圖。如:

Java代碼
 收藏代碼
  1. public class ExceptionHandler implements HandlerExceptionResolver {  
  2.   
  3.     @Override  
  4.     public ModelAndView resolveException(HttpServletRequest request,  
  5.             HttpServletResponse response, Object handler, Exception ex) {  
  6.         // TODO Auto-generated method stub  
  7.         if (ex instanceof NumberFormatException) {  
  8.             //doSomething...  
  9.             return new ModelAndView("number");  
  10.         } else if (ex instanceof NullPointerException) {  
  11.             //doSomething...  
  12.             return new ModelAndView("null");  
  13.         }  
  14.         return new ModelAndView("exception");  
  15.     }  
  16.   
  17. }  
 

 

定義了這樣1個(gè)異常處理器以后就要在applicationContext中定義這樣1個(gè)bean對(duì)象,如:

Xml代碼
 收藏代碼
  1. <bean id="exceptionResolver" class="com.tiantian.xxx.web.handler.ExceptionHandler"/>  

Spring除實(shí)現(xiàn)了1個(gè)DefaultHandlerExceptionResolver以外,還實(shí)現(xiàn)了1個(gè)SimpleMappingExceptionResolver,這二者都是繼承自抽象類AbstractHandlerExceptionResolver,而AbstractHandlerExceptionResolver是實(shí)現(xiàn)了HandlerExceptionResolver接口的resolveException方法的,并由此抽取出兩個(gè)抽象方法,1個(gè)是在進(jìn)行異常處理之前履行的方法prepareResponse(exception, response),1個(gè)是進(jìn)行異常解析的doResolveException(request, response, handler, exception)方法。SimpleMappingExceptionResolver,顧名思義就是通過(guò)簡(jiǎn)單的映照關(guān)系來(lái)決定由哪一個(gè)視圖來(lái)處應(yīng)當(dāng)前的毛病信息。SimpleMappingExceptionResolver提供了通過(guò)異常類型exceptionMappings來(lái)進(jìn)行異常與視圖之間的映照關(guān)系,提供了在產(chǎn)生異常時(shí)通過(guò)statusCodes來(lái)映照異常返回的視圖名稱和對(duì)應(yīng)的HttpServletResponse的返回碼。而且可以通過(guò)defaultErrorView和defaultErrorCode來(lái)指定默許值,defaultErrorView表示當(dāng)沒(méi)有在exceptionMappings里面找到對(duì)應(yīng)的異常類型時(shí)就返回defaultErrorView定義的視圖,defaultErrorCode表示在產(chǎn)生異常時(shí)當(dāng)沒(méi)有在視圖與返回碼的映照關(guān)系statusCodes里面找到對(duì)應(yīng)的映照時(shí)默許返回的返回碼。在使用SimpleMappingExceptionResolver時(shí),當(dāng)產(chǎn)生異常的時(shí)候,SimpleMappingExceptionResolver將會(huì)把當(dāng)前的異常對(duì)象放到本身屬性exceptionAttribute中,當(dāng)沒(méi)有指定exceptionAttribute時(shí),exceptionAttribute就是用默許值exception。

以下是1個(gè)簡(jiǎn)單的例子:

(1)SpringMVC的servlet配置文件中申明1個(gè)SimpleMappingExceptionResolver bean,并通過(guò)配置屬性exceptionMappings和defaultExceptionView來(lái)指定異常和視圖的對(duì)應(yīng)關(guān)系。

Xml代碼
 收藏代碼
  1. <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">  
  2.     <property name="exceptionMappings">  
  3.         <props>  
  4.             <prop key="NumberFormatException">number</prop><!-- 表示當(dāng)拋出NumberFormatException的時(shí)候就返回名叫number的視圖 -->  
  5.             <prop key="NullPointerException">null</prop>  
  6.         </props>  
  7.     </property>  
  8.     <property name="defaultErrorView" value="exception"/><!-- 表示當(dāng)拋出異常但沒(méi)有在exceptionMappings里面找到對(duì)應(yīng)的異常時(shí) 返回名叫exception的視圖-->  
  9.     <property name="statusCodes"><!-- 定義在產(chǎn)生異常時(shí)視圖跟返回碼的對(duì)應(yīng)關(guān)系 -->  
  10.         <props>  
  11.             <prop key="number">500</prop><!-- 表示在產(chǎn)生NumberFormatException時(shí)返回視圖number,然后這里定義產(chǎn)生異常時(shí)視圖number對(duì)應(yīng)的HttpServletResponse的返回碼是500 -->  
  12.             <prop key="null">503</prop>  
  13.         </props>  
  14.     </property>  
  15.     <property name="defaultStatusCode" value="404"/><!-- 表示在產(chǎn)生異常時(shí)默許的HttpServletResponse的返回碼是多少,默許是200 -->  
  16. </bean>  

(2)以下訪問(wèn):

Java代碼
 收藏代碼
  1. @Controller  
  2. @RequestMapping("/test")  
  3. public class TestController {  
  4.   
  5.     @RequestMapping("/null")  
  6.     public void testNullPointerException() {  
  7.         Blog blog = null;  
  8.         //這里就會(huì)產(chǎn)生空指針異常,然后就會(huì)返回定義在SpringMVC配置文件中的null視圖  
  9.         System.out.println(blog.getId());  
  10.     }  
  11.       
  12.     @RequestMapping("/number")  
  13.     public void testNumberFormatException() {  
  14.         //這里就會(huì)產(chǎn)生NumberFormatException,然后就會(huì)返回定義在SpringMVC配置文件中的number視圖  
  15.         Integer.parseInt("abc");  
  16.     }  
  17.       
  18.     @RequestMapping("/default")  
  19.     public void testDefaultException() {  
  20.         if (1==1)  
  21.             //由于該異常類型在SpringMVC的配置文件中沒(méi)有指定,所以就會(huì)返回默許的exception視圖  
  22.             throw new RuntimeException("Error!");  
  23.     }  
  24.       
  25. }  

 

(3)Jsp頁(yè)面中可以訪問(wèn)到的異常對(duì)象,這里以NumberFormatException的返回視圖number.jsp作為示例:

Jsp代碼
 收藏代碼
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB18030" isErrorPage="true"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6.   
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  8. <html>  
  9.   <head>  
  10.     <base href="<%=basePath%>">  
  11.       
  12.     <title>My JSP 'number.jsp' starting page</title>  
  13.       
  14.     <meta http-equiv="pragma" content="no-cache">  
  15.     <meta http-equiv="cache-control" content="no-cache">  
  16.     <meta http-equiv="expires" content="0">      
  17.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  18.     <meta http-equiv="description" content="This is my page">  
  19.     <!--  
  20.     <link rel="stylesheet" type="text/css" href="styles.css">  
  21.     -->  
  22.   
  23.   </head>  
  24.     
  25.   <body>  
  26.     NumberFormatException. <br>  
  27.     <%=exception.getMessage() %><br/>  
  28.     <%=exception %><br/><span style="color: #3366ff;"><!-- 這是JSP中的內(nèi)置對(duì)象exception --></span>  
  29.   
  30.   
  31.   
  32.     <%=request.getAttribute("ex") %><br><span style="color: #3366ff;"><!-- 這是SpringMVC放在返回的Model中的異常對(duì)象 --></span>  
  33.   
  34.   
  35.   
  36.     <%=request.getAttribute("javax.servlet.error.status_code") %><span style="color: #3366ff;"><!-- HttpServletResponse返回的毛病碼信息,由于前面已配置了NumberFormatException的毛病碼返回值為888,所以這里應(yīng)當(dāng)顯示888 --></span>  
  37.   
  38.   
  39.   
  40.   </body>  
  41. </html>  
   

(4)當(dāng)要求/test/number.do的時(shí)候會(huì)返回定義好的number視圖,返回結(jié)果以下:


 

2、使用@ExceptionHandler進(jìn)行處理

使用@ExceptionHandler進(jìn)行處理有1個(gè)不好的地方是進(jìn)行異常處理的方法必須與出錯(cuò)的

生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 疯狂做受xxxx国产 | 欧美日韩国产中文 | 亚洲精品国产综合区久久久久久久 | 久久伊人国产视频 | 一区二区三区不卡在线观看 | 日日爱影视 | 国产成人高清精品免费5388 | 欧美日韩亚洲自拍 | 黄色永久 | 激情欧美日韩 | 久久一区二区三区欧美 | 综合激情婷婷 | 亚洲人成人一区二区在线观看 | 在线日本中文字幕 | 日本国产a | 贼王1995| 久久久久久久一区二区 | 国产精品日韩在线观看 | 在线免费观看av网站 | 三级成人在线 | 嫩草影视在线观看 | 欧美精品久久久久久久免费软件 | 亚洲福利电影 | 国产精品成人一区二区 | 成人欧美一区二区三区黑人动态图 | 国产在线精品拍揄自揄免费 | 国产精品久久久久久久久免费蜜臀 | 久热导航 | 国产一区二区三区免费在线观看 | 国产高清视频在线 | 国产一区二区精品在线 | 亚洲一区成人 | 久久久久一区二区 | 天堂色区| 欧美精品videosex极品 | 欧美在线播放一区 | 欧美亚洲一区二区在线观看 | 精品不卡 | 欧美精品久久久免费观看 | 成人在线亚洲 | 午夜精品久久久久久99热软件 |