<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    風(fēng)人園

    弱水三千,只取一瓢,便能解渴;佛法無(wú)邊,奉行一法,便能得益。
    隨筆 - 99, 文章 - 181, 評(píng)論 - 56, 引用 - 0
    數(shù)據(jù)加載中……

    Spring MVC異常處理(ZT)

    Web應(yīng)用中對(duì)于異常的處理方式與其他形式的應(yīng)用并沒(méi)有太大的不同――通過(guò)try/catch
    語(yǔ)句針對(duì)不同的異常進(jìn)行相應(yīng)處理。
    但是在具體實(shí)現(xiàn)中,由于異常層次、種類繁雜,我們往往很難在Servlet、JSP層妥善的處
    理好所有異常情況,代碼中大量的try/catch代碼顯得尤為凌亂。
    我們通常面對(duì)下面兩個(gè)主要問(wèn)題:
    1. 對(duì)異常實(shí)現(xiàn)集中式處理
    典型情況:對(duì)數(shù)據(jù)庫(kù)異常記錄錯(cuò)誤日志。一般處理方法無(wú)外兩種,一是在各處數(shù)據(jù)庫(kù)
    訪問(wèn)代碼的異常處理中,加上日志記錄語(yǔ)句。二是將在數(shù)據(jù)訪問(wèn)代碼中將異常向上拋
    出,并在上層結(jié)構(gòu)中進(jìn)行集中的日志記錄處理。
    第一種處理方法失之繁瑣、并且導(dǎo)致系統(tǒng)難以維護(hù),假設(shè)后繼需求為“對(duì)于數(shù)據(jù)庫(kù)異
    常,需記錄日志,并發(fā)送通知消息告知系統(tǒng)管理員”。我們不得不對(duì)分散在系統(tǒng)中的各
    處代碼進(jìn)行整改,工作量龐大。
    第二種處理方法實(shí)現(xiàn)了統(tǒng)一的異常處理,但如果缺乏設(shè)計(jì),往往使得上層異常處理過(guò)
    于復(fù)雜。
    這里,我們需要的是一個(gè)設(shè)計(jì)清晰、成熟可靠的集中式異常處理方案。
    2. 對(duì)未捕獲異常的處理
    對(duì)于Unchecked Exception而言,由于代碼不強(qiáng)制捕獲,往往被程序員所忽略,如果
    運(yùn)行期產(chǎn)生了Unchecked Exception,而代碼中又沒(méi)有進(jìn)行相應(yīng)的捕獲和處理,則我
    們可能不得不面對(duì)尷尬的500服務(wù)器內(nèi)部錯(cuò)誤提示頁(yè)面。
    這里,我們需要一個(gè)全面而有效的異常處理機(jī)制。
    上面這兩個(gè)問(wèn)題,從技術(shù)角度上而言并算不上什么大的難點(diǎn)。套用一些短平快的設(shè)計(jì)模式,
    我們也能進(jìn)行處理并獲得不錯(cuò)的效果。同時(shí),目前大多數(shù)服務(wù)器也都支持在Web.xml中通過(guò)
    <error-page>(Websphere/Weblogic)或者<error-code>(Tomcat)節(jié)點(diǎn)配置特定異常情
    況的顯示頁(yè)面。
    Spring MVC中提供了一個(gè)通用的異常處理機(jī)制,它提供了一個(gè)成熟的,簡(jiǎn)潔清晰的異常處
    理方案。如果基于Spring MVC開(kāi)發(fā)Web應(yīng)用,那么利用這套現(xiàn)成的機(jī)制進(jìn)行異常處理也更加自
    然和有效。
    Spring MVC中的異常處理:
    以前面的注冊(cè)系統(tǒng)為例,首先,在Dispatcher配置文件Config.xml中增加id為
    “exceptionResolver”的bean定義:
    <bean id="exceptionResolver"
    class="org.springframework.web.servlet.handler.SimpleMappingEx
    ceptionResolver">
    <property name="defaultErrorView">
    <value>failure</value>
    </property>
    <property name="exceptionMappings">
    <props>
    <prop key="java.sql.SQLException">showDBError</prop>
    <prop key="java.lang.RuntimeException">showError</prop>
    </props>
    </property>
    </bean>
    通過(guò)SimpleMappingExceptionResolver我們可以將不同的異常映射到不同的jsp頁(yè)
    面(通過(guò)exceptionMappings屬性的配置),同時(shí)我們也可以為所有的異常指定一個(gè)默認(rèn)的異
    常提示頁(yè)面(通過(guò)defaultErrorView屬性的配置),如果所拋出的異常在exceptionMappings
    中沒(méi)有對(duì)應(yīng)的映射,則Spring將用此默認(rèn)配置顯示異常信息(注意這里配置的異常顯示界面均
    僅包括主文件名,至于文件路徑和后綴已經(jīng)在viewResolver中指定)。
    一個(gè)典型的異常顯示頁(yè)面如下:
    <html>
    <head><title>Exception!</title></head>
    <body>
    <% Exception ex = (Exception)request.getAttribute("exception"); %>
    <H2>Exception: <%= ex.getMessage();%></H2>
    <P/>
    <% ex.printStackTrace(new java.io.PrintWriter(out)); %>
    </body>
    </html>
    exception 實(shí)在SimpleMappingExceptionResolver 被存放到request中的,具體可以查看源代碼。
    如果SimpleMappingExceptionResolver無(wú)法滿足異常處理的需要,我們可以針對(duì)
    HandlerExceptionResolver接口實(shí)現(xiàn)自己異常處理類,這同樣非常簡(jiǎn)單(只需要實(shí)現(xiàn)一個(gè)
    resolveException方法)。

    如果有ViewResolver,則制定的jsp頁(yè)面必須在那個(gè)頁(yè)面下,到時(shí)候如果找不到頁(yè)面,可以根據(jù)錯(cuò)誤提示再調(diào)整頁(yè)面路徑

    posted on 2008-04-07 08:15 風(fēng)人園 閱讀(13899) 評(píng)論(3)  編輯  收藏 所屬分類: Spring

    評(píng)論

    # re: Spring MVC異常處理(ZT)  回復(fù)  更多評(píng)論   

    寫的不錯(cuò),讓我對(duì)springMVC的錯(cuò)誤處理機(jī)制更進(jìn)一步了
    2011-05-02 19:52 | blur

    # re: Spring MVC異常處理(ZT)  回復(fù)  更多評(píng)論   

    我的Manager對(duì)象拋出一個(gè)RuntimeException給Spring的Controller層,SimpleMappingExceptionResolver 攔截到錯(cuò)誤頁(yè)面,但是Exception ex = (Exception)request.getAttribute("exception"); 獲取不到對(duì)象,請(qǐng)問(wèn)這是怎么回事?
    2012-01-11 16:38 |

    # re: Spring MVC異常處理(ZT)  回復(fù)  更多評(píng)論   

    寫得可以哦。
    2012-03-09 19:15 | 紅淚
    主站蜘蛛池模板: 精品国产麻豆免费人成网站| 亚洲国产无套无码av电影| 最近中文字幕电影大全免费版| 免费又黄又爽又猛大片午夜 | 亚洲国产成人综合| 亚洲一区爱区精品无码| 免费精品国产自产拍观看| 免费视频爱爱太爽了| 国产午夜免费高清久久影院| av成人免费电影| 美女视频黄频a免费大全视频| 亚洲1234区乱码| 亚洲成a人片在线观看中文app| 亚洲va中文字幕无码久久不卡| 亚洲成年人啊啊aa在线观看| 超pen个人视频国产免费观看| 国产h肉在线视频免费观看| 日本免费高清视频| 色播在线永久免费视频网站| 九九久久国产精品免费热6| 国产精品亚洲一区二区三区| 亚洲精品无码久久久久牙蜜区| 亚洲综合无码无在线观看| 亚洲sss综合天堂久久久| 亚洲人成片在线观看| 亚洲欧洲日产国产最新| 亚洲国产成人va在线观看网址| 91大神亚洲影视在线| 亚洲性天天干天天摸| 亚洲Aⅴ无码专区在线观看q| 亚洲电影中文字幕| 亚洲国产精品无码AAA片| 亚洲成AV人片在线观看WWW| 亚洲成AV人片在线观看无码| 亚洲va无码va在线va天堂| 亚洲AV无码一区二区二三区入口| 中文字幕一精品亚洲无线一区| 亚洲精品乱码久久久久久按摩| 亚洲精品乱码久久久久久蜜桃不卡| 亚洲人成色77777| 亚洲视频精品在线|