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

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

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

    風人園

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

    Spring MVC異常處理(ZT)

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

    如果有ViewResolver,則制定的jsp頁面必須在那個頁面下,到時候如果找不到頁面,可以根據錯誤提示再調整頁面路徑

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

    評論

    # re: Spring MVC異常處理(ZT)  回復  更多評論   

    寫的不錯,讓我對springMVC的錯誤處理機制更進一步了
    2011-05-02 19:52 | blur

    # re: Spring MVC異常處理(ZT)  回復  更多評論   

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

    # re: Spring MVC異常處理(ZT)  回復  更多評論   

    寫得可以哦。
    2012-03-09 19:15 | 紅淚
    主站蜘蛛池模板: 全免费毛片在线播放| 麻豆最新国产剧情AV原创免费| 国产一卡2卡3卡4卡无卡免费视频 国产一卡二卡3卡四卡免费 | 日本免费一区二区久久人人澡| 99精品视频免费观看| 高清国语自产拍免费视频国产| 亚洲专区中文字幕| 99久久这里只精品国产免费| 亚洲人色大成年网站在线观看| 99热精品在线免费观看| 亚洲经典在线观看| 一个人免费高清在线观看| 亚洲欧美成人综合久久久| 日本不卡免费新一二三区| 国产精品亚洲精品日韩电影| 亚洲成A∨人片天堂网无码| 9i9精品国产免费久久| 亚洲AV日韩AV天堂一区二区三区 | 亚洲成a人片在线观看精品| 最近的中文字幕大全免费版| 亚洲国产精品成人综合色在线| 国产极品美女高潮抽搐免费网站| 日韩成人精品日本亚洲| 蜜桃AV无码免费看永久| 亚洲国产日产无码精品| 日韩免费无砖专区2020狼| 一级特级女人18毛片免费视频| 亚洲乱色熟女一区二区三区丝袜 | 日本v片免费一区二区三区| 一级毛片一级毛片免费毛片| 亚洲AV永久无码精品| 国语成本人片免费av无码 | 日韩精品无码免费一区二区三区| 亚洲特级aaaaaa毛片| 日本一道高清不卡免费| 两性色午夜免费视频| 亚洲女人初试黑人巨高清| 免费中文字幕一级毛片| 91免费国产精品| 丰满亚洲大尺度无码无码专线| 亚洲乱色熟女一区二区三区丝袜|