關(guān)于JSP的錯誤頁面處理

           

          關(guān)于JSP中的錯誤頁面處理

           

          通常JSP 在執(zhí)行時,在兩個階段下會發(fā)生錯誤。
          JSP
          網(wǎng)頁 → Servlet
          Servlet
          類處理每一個請求時
             
          在第一階段時,產(chǎn)生的錯誤我們稱為Translation Time Processing Errors;在第二階段時,產(chǎn)生的錯誤我們稱為Client Request Time Processing Errors。接下來我們針對這兩個階段產(chǎn)生錯誤的原因和處理方法,進行介紹。

              1
          Translation Time Processing Errors
              Translation Time Processing Errors
          產(chǎn)生的主要原因:我們在撰寫JSP時的語法有錯誤,導(dǎo)致JSP Container 無法將JSP 網(wǎng)頁編譯成Servlet 類文件( .class),例如:
          500 Internal Server
          Error
          500 是指HTTP 的錯誤狀態(tài)碼,因此是Server Error

             
          通常產(chǎn)生這種錯誤時,可能是JSP 的語法有錯誤,或是JSP Container 在一開始安裝、設(shè)定時,有不適當?shù)那樾伟l(fā)生。解決的方法就是再一次檢查程序是否有寫錯的,不然也有可能是JSPContainer bug

           

              2 Client Request Time Processing Errors
              Client Request Time Processing Errors
          錯誤的發(fā)生,往往不是語法錯誤,而可能是邏輯上的錯誤,簡單地說,你寫一個計算除法的程序,當用戶輸入的分母為零時,程序會發(fā)生錯誤并拋出異常(Exception),交由異常處理(Exception Handling)機制做適當?shù)奶幚怼?/span>對于這種錯誤的處理,我們通常會交給errorPage 去處理。下面舉個例子
          :
          使用errorPage 的范例程序
          ErrorPage.jsp

          <%@ page contentType="text/html;charset=GB2312" errorPage="Error.jsp" %> //
          設(shè)置Error.jsp頁為本頁的錯誤處理頁

          <html>
          <head>
          <title>CH4 - ErrorPage.jsp</title>
          </head>
          <body>
          <h2>errorPage
          的范例程序</h2>
          <%!
          private double toDouble(String value)
          {
          return(Double.valueOf(value).doubleValue());
          }
          %>
          <%
          double num1 = toDouble(request.getParameter("num1"));
          double num2 = toDouble(request.getParameter("num2"));
          %>
          您傳入的兩個數(shù)字為:<%= num1 %>
          <%= num2 %><br>
          兩數(shù)相加為
          <%= (num1+num2) %>
          </body>
          </html>
              ErrorPage.jsp
          程序中,我們使用page 指令中的errorPage 屬性,告訴JSP Container,如果在程序中有錯誤產(chǎn)生時(指的是servlet運行時產(chǎn)生的錯誤或顯示用throw拋出的異常),會自動交給Error.jsp 處理。


          Error.jsp
          <%@ page contentType="text/html;charset=GB2312" isErrorPage="true" %>   //
          設(shè)置該頁為錯誤處理頁
          <%@ page import="java.io.PrintWriter" %>
          <html>
          <head>
          <title>CH4 - Error.jsp</title>
          </head>
          <body>
          <h2>errorPage
          的范例程序</h2>
          <p>ErrorPage.jsp
          錯誤產(chǎn)生:
          <I><%= exception %></I></p><br>
          <pre>
          問題如下:<% exception.printStackTrace(new PrintWriter(out)); %> //輸出錯誤的原因

          </pre>
          </body>
          </html>

              Error.jsp
          主要處理ErrorPage.jsp 所產(chǎn)生的錯誤,所以在ErrorPage.jsp page 指令的屬性errorPage設(shè)為Error.jsp,因此,若ErrorPage.jsp有錯誤發(fā)生時,會自動轉(zhuǎn)到Error.jsp來處理。Error.jsp 必須設(shè)定page 指令的屬性isErrorPagetrue,因為Error.jsp是專門用來處理錯誤的網(wǎng)頁。設(shè)定page 指令的屬性isErrorPagetrue后,在Error.jsp里就可以使用exception異常類了。

             
          由于在這個程序中并沒有做一個窗體來輸入兩個數(shù)字,所以必須手動在URL后輸入num1num2的值,如http://localhost:8080/ErrorPage.jsp?num1=100&num2=245。當ErrorPage.jsp 產(chǎn)生錯誤時(如加數(shù)為字符串型),就會交由Error.jsp 去處理,所以我們看到的結(jié)果,不

          再是原始的服務(wù)器提示的亂七把糟的錯誤提示,將是執(zhí)行Error.jsp 后的結(jié)果。

           

          jsp中顯式地拋出異常時,系統(tǒng)也會轉(zhuǎn)到錯誤處理頁面:

          <%@page language="java" contentType="text/html;charset=GBK" import= "java.util.* " errorPage="exception.jsp"

          %>

          <jsp:useBean id="user" scope="session" class="S_userObj"/>

          <% 

                 if(user= =null)

          throw new Exception("您沒有登陸或者登陸超時,請重新登陸"); 

          。。。 。。。

          user為空時系統(tǒng)會自動轉(zhuǎn)到錯誤處理頁面。

          總之,以下情況jsp會轉(zhuǎn)到錯誤處理頁面:

          前提:jsp成功的轉(zhuǎn)換到了servlet,轉(zhuǎn)換過程中沒有發(fā)生錯誤。

          servlet運行時,程序中碰到異常。

          servlet運行時,程序控制轉(zhuǎn)到了顯式拋出的異常。例如:if(…) throw new exception();

           

          posted on 2008-07-24 10:21 chenkai 閱讀(3952) 評論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          <2008年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(2)

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 亚东县| 六盘水市| 颍上县| 锡林浩特市| 霸州市| 乌什县| 东兴市| 滁州市| 施秉县| 麦盖提县| 喀什市| 军事| 松阳县| 龙岩市| 中牟县| 玛沁县| 且末县| 固镇县| 诸城市| 长泰县| 准格尔旗| 乾安县| 江城| 天柱县| 大关县| 思茅市| 滕州市| 土默特左旗| 博湖县| 天门市| 庄河市| 乌拉特后旗| 隆安县| 通州区| 富平县| 任丘市| 安乡县| 石泉县| 乌拉特中旗| 崇仁县| 高雄县|