English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
عند كتابة برمجة JSP، قد ينسى المبرمج بعض الأخطاء، وقد تظهر هذه الأخطاء في أي مكان في البرنامج. عادةً تحتوي كود JSP على أنواع معينة من الاستثناءات:
سيقدم هذا الفصل بعض الطرق البسيطة والجميلة لمعالجة الاستثناءات وال أخطاء في الوقت الفعلي.
Object exception هو مثال على فرع Throwable، وهو متاح فقط في صفحات الأخطاء. يوضح الجدول أدناه بعض الطرق المهمة في فئة Throwable:
رقم | طريقة&وصف |
---|---|
1 | يعيد معلومات الاستثناء. هذه المعلومات تُتميز في بناء Function Throwable |
2 | public Throwable getCause() يعيد سبب الاستثناء، وهو Object Throwable |
3 | public String toString() يعيد اسم الكائن |
4 | public void printStackTrace() يخرج مسار استثناء الدعوة إلى System.err |
5 | public StackTraceElement [] getStackTrace() يعيد استرجاع مسار الاستثناء كعدد من عناصر مسار الدعوة |
6 | public Throwable fillInStackTrace() استخدام مسار الدعوة الحالي لتعبئة Object Throwable |
يقدم JSP خيارًا لتحديد صفحة الخطأ لكل صفحة JSP. في أي وقت يُلقي الصفحة استثناءً، يتم تنفيذ صفحة الخطأ تلقائيًا من قبل وحدة المعالجة.
يحدد هذا المثال صفحة الخطأ المحددة لـ main.jsp. يمكنك تحديد صفحة الخطأ باستخدام تعليمات <%@page errorPage="XXXXX"%>.
<%@ page errorPage="ShowError.jsp" %> <html> <head> <title>مثال على معالجة الأخطاء</title> </head> <body> <% // ألقي استثناءً لاستدعاء صفحة الخطأ int x = 1; إذا (x == 1) } throw new RuntimeException("Error condition!!!"); } %> </body> </html>
الآن، اكتب ملف ShowError.jsp كما يلي:
<%@ page isErrorPage="true" %> <html> <head> <title>عرض صفحة الخطأ</title> </head> <body> <h1>هاي...</h1> <p>آسف، حدث خطأ.</p> <p>هذا هو سجل استدعاء الاستثناء:</p> <pre> <% exception.printStackTrace(response.getWriter()); %>
لاحظ أن ملف ShowError.jsp يستخدم التعليمات البرمجية <%@page isErrorPage="true"%>، التي تخبر معدير JSP عن الحاجة إلى توليد متغير مثال استثناء.
الآن، حاول زيارة صفحة main.jsp، وسينتج عن ذلك ما يلي:
java.lang.RuntimeException: Error condition!!! ...... هاي... آسف، حدث خطأ. هذا هو سجل استدعاء الاستثناء:
يمكن استخدام علامات JSTL لإنشاء صفحة الأخطاء ShowError.jsp. بلغة الكود في هذا المثال مشابهة للكود في المثال السابق، ولكن الكود في هذا المثال له بنية أفضل، ويمكنه تقديم معلومات إضافية:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@page isErrorPage="true" %> <html> <head> <title>عرض صفحة الخطأ</title> </head> <body> <h1>هاي...</h1> <table width="100%" border="1"> <tr valign="top"> <td width="40%"><b>خطأ:</b></td> <td>${pageContext.exception}</td> </tr> <tr valign="top"> <td><b>المسار:</b></td> <td>${pageContext.errorData.requestURI}</td> </tr> <tr valign="top"> <td><b>كود الحالة:</b></td> <td>${pageContext.errorData.statusCode}</td> </tr> <tr valign="top"> <td><b>تتبع الورقية:</b></td> <td> <c:forEach var="trace" items="${pageContext.exception.stackTrace}"> <p>${trace}</p> </c:forEach> </td> </tr> </table> </body> </html>
النتيجة بعد التنفيذ كالتالي:
إذا كنت ترغب في وضع معالجة الاستثناءات في صفحة واحدة وتعامل مختلف الاستثناءات بشكل مختلف، فإنك بحاجة إلى استخدام مكتبة try…catch.
في هذا المثال التالي يظهر كيفية استخدام مكتبة try…catch، ضع هذه الأكواد في ملف main.jsp:
<html> <head> <title>مثال على Try...Catch</title> </head> <body> <% try{ int i = 1; i = i / 0; out.println("الإجابة هي " + i); } catch (Exception e){ out.println("An exception occurred: " + e.getMessage()); } %> </body> </html>
حاول زيارة main.jsp، سيكون لديك النتيجة التالية:
حدث استثناء: / by zero