BlogJava 首頁 新隨筆 聯系 聚合 管理
            1 Posts :: 6 Stories :: 0 Comments :: 0 Trackbacks
               jsp有一個指令可以定義jsp的錯誤頁面,并在此jsp頁面出錯時跳轉到該頁面輸出出錯
          日志。如下的例子:
          1. <%@ page errorPage="errorPage.jsp" %>
          2. errorPage.jsp的代碼如下所示:
          3. .....
          4. <%@ page isErrorPage="true" %>
          5. ....
          6. //輸出出錯日志
          7. <%= exception.getMessage() %>

              但是,這只能在jsp頁面層控制。在J2EE的實現中,很多的情況是jsp往往只作為頁面顯
          示,與業務相關的數據庫操作都是在后臺的servlet執行,處理完畢之后再跳轉某個jsp顯示
          頁面。這種設置框架,實現了MVC結構,使得整個系統的維護難度大大降低。

              實際的工作中,盡管系統采用了以上的設置框架,但由J2EE開發人員水平以及編程的習
          慣都有可能不通,經常會遇到開發人員在servlet中對有可能報錯的地方處理不恰當。最常
          見的一種情況是,catch一個Exception e,然后僅僅調用e.printStackTrace()。這樣造成
          的后果非常嚴重。一旦有Exception發生,web頁面會出現白屏,我們可以從兩方面來看:
          (1)如果是使用的用戶。他往往會不知所措,并且有可能還不知道有錯誤發生,繼續使用
          系統,但這時候的系統已經出錯了,在錯誤的基礎上繼續業務流程,往往會造成更多系統級
          別的錯誤。
          (2)如果是開發人員。用戶反映了這個出錯,但是不知道出錯原因。只能說出現要白屏。
          開發人員需要調試抓錯的話,非得到應用服務器的輸入端查看出錯日志,定位可能出錯的原
          因,再進行排錯。

              在此,我介紹一種有效的servlet出錯處理機制,這種機制將所有Exception的出錯內容
          拋出到web頁面,讓使用用戶立即有錯誤發生,并可以及時將該出錯內容提交給開發人員定
          位出錯原因。
              其實,這種機制非常簡單。思路是定義一個抽象的BaseServlet基類,它繼承HttpServlet。
          并增加一個抽象的 
          1. abstract public void doWorkFlow(HttpServletRequest request,HttpServletResponse response)
          的方法,這個方法是所有BaseServlet子類都必須且僅需實現的方法。BaseServlet基類當然要實現service方法 -- 
          1. public final void service(HttpServletRequest request,HttpServletResponse response)
          。它的代碼片斷如下:
          1. public final void service(HttpServletRequest request,HttpServletResponse response)
          2.                         throws ServletException, IOException {
          3.     try{
          4.         //在執行doWorkFlow()之前,你可以在此處理是否有權限處理等問題
          5.         .......
          6.         doWorkFlow();
          7.     }catch(Exception e){
          8.         StringWriter out = new StringWriter();
          9.         e.printStackTrace(new PrintWriter(out));
          10.         request.setAttribute("err_msg", out.toString());
          11.         RequestDispatcher rd = this.getServletContext().getRequestDispatcher("errorServlet.jsp");
          12.         rd.forward(request,response);
          13.     }
          14. }

            errorServlet.jsp非常簡單。代碼片斷如下:
          1. ....
          2. //輸出出錯日志
          3. <%= request.getAttribute("err_msg") %>
          posted on 2006-01-13 20:13 阿獸學習 閱讀(145) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 右玉县| 绥化市| 古浪县| 新干县| 高邑县| 沽源县| 清远市| 梁河县| 巴彦县| 瑞安市| 河北省| 长海县| 七台河市| 桐柏县| 怀化市| 邵阳市| 亚东县| 福贡县| 汕头市| 江门市| 兰溪市| 巴林右旗| 岢岚县| 乌鲁木齐县| 连江县| 巴里| 成都市| 龙陵县| 双城市| 钟山县| 绥滨县| 来宾市| 蛟河市| 罗江县| 平安县| 崇文区| 扬中市| 东平县| 纳雍县| 宽甸| 神池县|