為J2EE定制一個用來處理錯誤的異常處理框架_JSP教程
推薦: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 response.sendRedirect不跳轉(zhuǎn)的原因分析及解決
- JSP指令元素(page指令/include指令/taglib指令)復(fù)習(xí)整理
- JSP腳本元素和注釋復(fù)習(xí)總結(jié)示例
- JSP FusionCharts Free顯示圖表 具體實(shí)現(xiàn)
- 網(wǎng)頁模板:關(guān)于jsp頁面使用jstl的異常分析
- JSP頁面中文傳遞參數(shù)使用escape編碼
- 基于jsp:included的使用與jsp:param亂碼的解決方法
- Java Web項(xiàng)目中連接Access數(shù)據(jù)庫的配置方法
- JDBC連接Access數(shù)據(jù)庫的幾種方式介紹
- 網(wǎng)站圖片路徑的問題:絕對路徑/虛擬路徑
- (jsp/html)網(wǎng)頁上嵌入播放器(常用播放器代碼整理)
- jsp下顯示中文文件名及絕對路徑下的圖片解決方法
- 相關(guān)鏈接:
- 教程說明:
JSP教程-為J2EE定制一個用來處理錯誤的異常處理框架
。