首先,當DAO層Catch到SQL異常,應(yīng)該讓相應(yīng)的事務(wù)回滾,并繼續(xù)拋出該異常
conn.rollback();
throw e;
在方法聲明時throws這個異常;
第二,在Service層調(diào)用到Dao層時,try catch這個異常,在catch住中把它處理為RuntimeException異常;
處理過程是:自定義一個繼承自RuntimeException的異常類AppRuntimeException;
catch(){
new AppRuntimeException();
}
第三,在Servlet中使用配置文件web.xml注冊這個Exception,或者注冊為RuntimeException,調(diào)用Service時,如果發(fā)生這個異常,則會跳轉(zhuǎn)到相關(guān)的友好的面向用戶的錯誤頁面;
注意:如果頁面未轉(zhuǎn)向,則可能是反射過程中拋出的其他異常截獲了我們自定義的這個RuntimeException,我們可以在這個異常中做出處理,讓它轉(zhuǎn)換為我們自定義的RuntimeException;
第四,以上我們只是簡單的處理了異常,一般正常的與業(yè)務(wù)相關(guān)的異常;
都是在業(yè)務(wù)層處理的
除非你的項目沒有業(yè)務(wù)層
如果沒有業(yè)務(wù)層,DAO就不是DAO了