Latest web development tutorials

معالجة الاستثناء JSP

عند كتابة تطبيق التخطيط الاستراتيجي المشترك، قد المبرمجين فقدان بعض الخطأ، قد يظهر الخطأ في أي مكان في البرنامج. كود JSP عموما باستثناء الفئات التالية:

  • التحقق من الاستثناءات: فحص الاستثناءات هو خطأ المستخدم العادي أو مبرمج أخطاء غير متوقعة. على سبيل المثال، إذا كان الملف ليتم فتحه، ولكن لا يمكن العثور على الملف، ثم يتم طرح استثناء. ويمكن لهذه الحالات الشاذة لم يعد تجاهلها ببساطة تجميع.
  • استثناء وقت التشغيل: وقت التشغيل قد تم تجنبها المبرمجين استثناء، سيتم تجاهل هذا الوضع الشاذ في وقت الترجمة.
  • خطأ: لا يوجد استثناء، ولكن المشكلة هو أنه خارج نطاق سيطرة المستخدم أو مبرمج. غالبا ما يتم تجاهله خطأ في التعليمات البرمجية، بالكاد يمكنك أن أعتبر كيف. على سبيل المثال، أو خطأ تجاوز سعة مكدس. سيتم تجاهل هذه الأخطاء في وقت الترجمة.

وسيكون هذا القسم يعطي لبضعة طريقة بسيطة وأنيقة لمعالجة الاستثناءات وقت التشغيل والأخطاء.


كائنات استخدام استثناء

كائن الاستثناء هو مثيل فئة فرعية قابل للظهور، وهي متاحة فقط في صفحة الخطأ. يسرد الجدول التالي بعض من الطبقة قابل للظهور في الطرق المهمة:

لا. طريقة ووصف
1 جمهور سلسلة getMessage ()

إرجاع استثناء. يتم تهيئة هذه المعلومات في قابل للظهور منشئ
2 ThrowablegetCause الجمهور ()

يعود سبب استثناء، والهدف من نوع قابل للظهور
3 toString سلسلة العامة ()

إرجاع اسم الفئة
4 printStackTrace باطلة العامة ()

إخراج مكدس الاستثناء تتبع لSystem.err
5 الجمهور StackTraceElement [] getStackTrace ()

في شكل عنصرا تتبع المكدس من الصفيف بإرجاع تتبع المكدس استثناء
6 ThrowablefillInStackTrace الجمهور ()

تتبع المكدس الحالي ملء كائن قابل للظهور

يوفر JSP الخيار لتحديد صفحات الخطأ لكل صفحة JSP. كلما يلقي الصفحة استثناء، والتخطيط الاستراتيجي المشترك حاوية استدعاء الصفحة خطأ تلقائيا.

يحدد الأمثلة الإنجليزية main.jsp التالية صفحة خطأ. استخدام <٪ @ الصفحة errorPage = "XXXXX"٪> يحدد التوجيه صفحة خطأ.

<%@ page errorPage="ShowError.jsp" %>

<html>
<head>
   <title>Error Handling Example</title>
</head>
<body>
<%
   // Throw an exception to invoke the error page
   int x = 1;
   if (x == 1)
   {
      throw new RuntimeException("Error condition!!!");
   }
%>
</body>
</html>

الآن، والكتابة ShowError.jsp الوثائق التالية:

<%@ page isErrorPage="true" %>
<html>
<head>
<title>Show Error Page</title>
</head>
<body>
<h1>Opps...</h1>
<p>Sorry, an error occurred.</p>
<p>Here is the exception stack trace: </p>
<pre>
<% exception.printStackTrace(response.getWriter()); %>

مشيرا إلى ان الاستخدامات ملف ShowError.jsp <٪ @ الصفحة isErrorPage = "صحيح"٪> التوجيه، الذي يروي يحتاج لتوليد متغير مثيل استثناء المترجم JSP.

الآن محاولة الوصول إلى الصفحة الإنجليزية main.jsp، وسوف تؤدي إلى النتائج التالية:

java.lang.RuntimeException: Error condition!!!
......

Opps...
Sorry, an error occurred.

Here is the exception stack trace:

استخدام العلامات JSTL في صفحة الخطأ

علامات JSTL يمكن استخدامها لكتابة صفحة الخطأ ShowError.jsp. هذا المثال رمز والمنطق في مثال التعليمة البرمجية هو نفسه تقريبا، ولكن في هذه الحالة رمز لديها بنية أفضل، ويمكن أن توفر مزيد من المعلومات:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page isErrorPage="true" %>
<html>
<head>
<title>Show Error Page</title>
</head>
<body>
<h1>Opps...</h1>
<table width="100%" border="1">
<tr valign="top">
<td width="40%"><b>Error:</b></td>
<td>${pageContext.exception}</td>
</tr>
<tr valign="top">
<td><b>URI:</b></td>
<td>${pageContext.errorData.requestURI}</td>
</tr>
<tr valign="top">
<td><b>Status code:</b></td>
<td>${pageContext.errorData.statusCode}</td>
</tr>
<tr valign="top">
<td><b>Stack trace:</b></td>
<td>
<c:forEach var="trace" 
         items="${pageContext.exception.stackTrace}">
<p>${trace}</p>
</c:forEach>
</td>
</tr>
</table>
</body>
</html>

النتائج على النحو التالي:

التخطيط الاستراتيجي المشترك، exeception-1


استخدام محاولة ... كتلة الصيد

إذا كنت تريد أن تضع لمعالجة الاستثناء الصفحة، وعلى استثناءات مختلفة يتم التعامل معها بشكل مختلف، فأنت بحاجة إلى استخدام كتلة المحاولة ... الصيد.

يوضح هذا المثال التالي كيفية استخدام كتلة المحاولة ... الصيد، وسيتم وضع التعليمات البرمجية في الإنجليزية main.jsp:

<html>
<head>
   <title>Try...Catch Example</title>
</head>
<body>
<%
   try{
      int i = 1;
      i = i / 0;
      out.println("The answer is " + i);
   }
   catch (Exception e){
      out.println("An exception occurred: " + e.getMessage());
   }
%>
</body>
</html>

في محاولة لزيارة الإنجليزية main.jsp، وسوف تؤدي إلى النتائج التالية:

An exception occurred: / by zero