日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

為J2EE定制一個用來處理錯誤的異常處理框架_JSP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:J2EERI Pointbase數(shù)據(jù)庫遠(yuǎn)程命令執(zhí)行漏洞
信息提供: 安全公告(或線索)提供熱線:[email protected] 漏洞類別: 設(shè)計錯誤 攻擊類型: 嵌入惡意代碼 發(fā)布日期: 2003-12


  回顧一下你上一個J2EE工程,是否遇到過類似錯誤沒有記入日志或者被多次記錄的情況?是否只是因?yàn)樵谀程幋a吃 掉了異常導(dǎo)致你花費(fèi)無數(shù)次時間來跟蹤一個bug?是否你的用戶直接看到了堆棧的跟蹤信息?如果這樣的話,你可能需要一種通用的異常管理的策略和一些補(bǔ)充的 代碼。 這篇文章為你提供了在J2EE項(xiàng)目中通過使用錯誤處理框架使用一些策略的基礎(chǔ)。

Java中關(guān)于異常處理的爭論可以被認(rèn)為是一種信仰上的爭執(zhí):一方面,強(qiáng)制異常(checked exceptions)的支持者認(rèn)為調(diào)用者應(yīng)該處理他們調(diào)用代碼出現(xiàn)的異常;另一方面,非強(qiáng)制(unchecked exceptions)異常的追隨者認(rèn)為強(qiáng)制異�;靵y了代碼,而且通常客戶端不能立即處理,那為什么還要檢查他呢。

作為初級工程師,我們首先信奉的是強(qiáng)制異常,但幾年后,在使用N久的try/catch/finally后,我們開始轉(zhuǎn)向非強(qiáng)制異常了。因?yàn)槲覀冮_始相信一些處理錯誤狀況的基本規(guī)則:

如果需要處理異常,那么就處理

如果處理不了,就拋出

如果拋不了,就用非強(qiáng)制的基類異常包裝后再拋出

但這些異常被拋到最頂層時會怎么樣呢?對這種情況,我們有一個底線確保錯誤信息被記錄并且用戶得到正確的提示。

本文提供了另外一種框架來處理異常,它擴(kuò)展了“Create an Application-Wide User Session for J2EE”所提出的企業(yè)應(yīng)用session工具。使用此框架的J2EE應(yīng)用將:

總是向用戶提供有意義的錯誤信息

記下未處理的錯誤環(huán)境,并且只記錄一次

在日志文件中用唯一的請求ID號對異常進(jìn)行編號,以便進(jìn)行高精度的調(diào)試

在各層中設(shè)置一個強(qiáng)壯的、可擴(kuò)展的,而又簡單的策略來處理異常

為了搭建框架,我們運(yùn)用了面向狀態(tài)編程(AOP,aspect-oriented programming)、設(shè)計模式和使用XDoclet進(jìn)行代碼生成。

為什么我們需要通用的錯誤處理方法

在項(xiàng)目的開始,我們會做一些關(guān)鍵性的系統(tǒng)架構(gòu)決定,如:系統(tǒng)中的元素如何交互?會話狀態(tài)保存在哪兒?哪種通信協(xié)議會被使用等等。但這里并沒有包含錯誤處理。因而每個開發(fā)人員都可以任意決定如何定義、分類、建模和處理錯誤。作為一個開發(fā)人員,你可以想象在這種方式下的結(jié)果:

1. 臃腫的日志:每個try/catch都包含log語句,這導(dǎo)致被污染的代碼生成臃腫和多余的日志入口。

2. 多余的實(shí)現(xiàn):同一類型的錯誤有不同的表示,這導(dǎo)致處理的復(fù)雜化。

3. 破碎的封裝:來自其他組件的異常被定義為方法標(biāo)識的一部分,這導(dǎo)致接口和實(shí)現(xiàn)的分離被打破了。

4. 不明確的異常定義:方法簽名通常采用拋出java.lang.Exception,這導(dǎo)致客戶端不能明確得到方法錯誤的語義。

通常沒有定義異常處理策略的借口是:java已經(jīng)提供了異常處理。這是事實(shí),java也提供一貫的定義、通信、傳播及響應(yīng)異常的工具。但開發(fā)人員需要決定如何在實(shí)際的項(xiàng)目中使用這些服務(wù)。幾個方面是必須要考慮的,如:

1. 檢查或不檢查異常:是否應(yīng)該檢查或不檢查新異常類?

2. 異常的使用者:究竟是誰需要知道什么時候會發(fā)生未處理的異常及由誰來負(fù)責(zé)記錄及通知操作人員?

3. 基礎(chǔ)的異常層次:異常需要包含什么信息及異常層次需要反映什么語義?

4. 傳遞;是否未處理的異常會被定義或傳遞給別的異常類,及他們?nèi)绾卧诜植际江h(huán)境中傳遞?

5. 解釋:未處理的異常如何被解釋為可閱讀的,甚至支持多語言的信息?

在框架中封裝規(guī)則,要快!

我們給出的通用異常處理策略是基于如下的因素:

使用非強(qiáng)制的異常:使用強(qiáng)制異常,調(diào)用者要被迫處理他們幾乎不能處理的錯誤。非強(qiáng)制的異常則給調(diào)用者一個選擇。在使用第三方類庫時,你不能控制 異常是強(qiáng)制或非強(qiáng)制的。這種情況下,你需要用非強(qiáng)制異常來包含強(qiáng)制異常。在使用非強(qiáng)制異常時,最大的讓步是你不能再強(qiáng)制調(diào)用者來處理異常了。然而作為接口 定義的一部分,異常仍是約定的關(guān)鍵部分并且繼續(xù)成為Javadoc文檔的一部分。   

分享:學(xué)習(xí)JSP的經(jīng)典的入門學(xué)習(xí)資料
 一、 JSP 技術(shù)概述   在 Sun 正式發(fā)布 JSP(JavaServer Pages) 之后,這種新的 Web 應(yīng)用開發(fā)技術(shù)很快引起了人們的關(guān)注。 JSP 為創(chuàng)建高度動態(tài)的 Web 應(yīng)用提供了一個獨(dú)特的開發(fā)環(huán)境。

來源:模板無憂//所屬分類:JSP教程/更新時間:2008-08-22
相關(guān)JSP教程