一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Spring MVC異常處理(ZT)

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

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日韩欧美一区二区黄色| 免费在线播放不卡视频| 精品偷拍一区二区三区| 97人妻人人揉人人躁人人| 欧美一区二区在线日韩| 国产福利一区二区久久| 东北老熟妇全程露脸被内射| 一本色道久久综合狠狠躁| 亚洲成人黄色一级大片| 国产传媒中文字幕东京热| 亚洲熟女熟妇乱色一区| 在线观看国产午夜福利| 国产精品一级香蕉一区| 超薄肉色丝袜脚一区二区| 日韩在线视频精品中文字幕| 亚洲一区二区三区三区| 女人精品内射国产99| 欧美黑人黄色一区二区| 激情亚洲一区国产精品久久| 亚洲成人精品免费在线观看| 精品人妻一区二区四区| 色婷婷国产熟妇人妻露脸| 国内真实露脸偷拍视频| 福利视频一区二区在线| 天海翼精品久久中文字幕 | 国产精品九九九一区二区| 91亚洲国产—区=区a| 欧美日韩视频中文字幕| 久久精品国产一区久久久| 沐浴偷拍一区二区视频| 欧美日韩亚洲精品内裤| 国产一区二区三区香蕉av| 亚洲熟女乱色一区二区三区| 欧美六区视频在线观看| 麻豆欧美精品国产综合久久| 国产精品成人一区二区三区夜夜夜| 久久99热成人网不卡| 国产一区欧美一区二区| 91精品国产综合久久精品| 国产一区二区三区香蕉av| 亚洲一区二区三区三州|