English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
عندما يرمي Servlet استثنائية، يستدعي خادم الويب باستخدام element exception-type. web.xml لإيجاد تكوين مطابق لنوع الاستثنائية التي تم رميها.
يجب عليك استخدام في error-page الـ element لتحديد معالجة معينة لـاستثنائية أو HTTP رمز الحالة إجراء مكالمة Servlet المناسبة.
افترض، لدينا مدير الأخطاء السervlet في أي استثنائية أو خطأ معين يتم استدعاؤه. إليك العناصر التي يتم إنشاؤها في web.xml.
<!-- تعريف السervlet --> <servlet> <servlet-name>ErrorHandler</servlet-name> <servlet-class>ErrorHandler</servlet-class> </servlet> <!-- السervlet التحويل --> <servlet-mapping> <servlet-name>ErrorHandler</servlet-name> <url-pattern>/ErrorHandler</url-pattern> </servlet-mapping> <!-- error-code الصفحات الخطأ المرتبطة بها --> <error-page> <error-code>404</error-code> <location>/ErrorHandler</location> </error-page> <error-page> <error-code>403</error-code> <location>/ErrorHandler</location> </error-page> <!-- exception-type الصفحات الخطأ المرتبطة بها --> <error-page> <exception-type> javax.servlet.ServletException </exception-type > <location>/ErrorHandler</location> </error-page> <error-page> <exception-type>java.io.IOException</exception-type > <location>/ErrorHandler</location> </error-page>
إذا كنت ترغب في تعريف معالج خطأ عام لجميع الاستثنائيات، فعليك تعريف error-page التالية بدلاً من تعريف element error-page لكل استثنائية:
<error-page> <exception-type>java.lang.Throwable</exception-type > <location>/ErrorHandler</location> </error-page>
إليك النقاط التي يجب الانتباه لها عند معالجة الاستثنائيات في web.xml:
Servlet ErrorHandler يتم تعريفه بنفس الطريقة التي يتم تعريف بها Servletات أخرى، ويتم تكوينه في web.xml.
إذا ظهر رمز خطأ، سواء كان 404 (Not Found غير العثور على) أو 403 (Forbidden ممنوع)، سيتم استدعاء Servlet ErrorHandler.
إذا أتت استثنائية تطبيق الويب ServletException أو}} IOException،إذن سيقوم محرك الويب بتشغيل ServletتماكنErrorHandler.
يمكنك تعريف معالجين مختلفين للتعامل مع أنواع مختلفة من الأخطاء أو الاستثناءات. المثال المقدم هو عام جدًا، نأمل أن تستطيع من خلال المثال فهم المفاهيم الأساسية.
فيما يلي قائمة بالخصائص التي يمكن أن تصل إليها Servlets الخاصة بالمعالجة النهائية للاخطاء/الاستثناءات، والتي تستخدم لتحليل طبيعة الأخطاء/الاستثناءات.
الترتيب | الخصائصتماكنالوصف |
---|---|
1 | javax.servlet.error.status_code هذه الخاصية تعطي معلومات حول الرقم الاصطناعي للوضع، والذي يمكن حفظه، ويمكن تحليله بعد حفظه كنوع java.lang.Integer. |
2 | javax.servlet.error.exception_type هذه الخاصية تعطي معلومات حول نوع الاستثناء، والذي يمكن حفظه، ويمكن تحليله بعد حفظه كنوع java.lang.Class. |
3 | javax.servlet.error.message هذه الخاصية تعطي معلومات حول رسالة الخطأ الدقيقة، والذي يمكن حفظه، ويمكن تحليله بعد حفظه كنوع java.lang.String. |
4 | javax.servlet.error.request_uri هذه الخاصية تعطي معلومات حول URL التي تم استدعاء Servlet منها، والذي يمكن حفظه، ويمكن تحليله بعد حفظه كنوع java.lang.String. |
5 | javax.servlet.error.exception هذه الخاصية تعطي معلومات حول المعلومات التي تسبب الاستثناء، والذي يمكن حفظه، ويمكن تحليله بعد حفظه كنوع java.lang.Throwable. |
6 | javax.servlet.error.servlet_name هذه الخاصية تعطي اسم Servlet، والذي يمكن حفظه، ويمكن تحليله بعد حفظه كنوع java.lang.String. |
فيما يلي مثال على Servlet، حيث يتم معالجة البرنامج النصي أو الاستثناءات التي تحدث عند حدوث خطأ معين:
هذا المثال يمنحك فهمًا أساسيًا لإدارة الاستثناءات في Servlets، يمكنك استخدام نفس المفاهيم لإنشاء تطبيقات معالجة استثناءات معقدة:
//استيرادتماكن javaتمامية استيراد java.io.*; استيراد javax.servlet.*; استيراد javax.servlet.http.*; استيراد java.util.*; //توسيع HttpServlet الصفحة public class ErrorHandler extends HttpServlet { // طريقة معالجة طلبات GET public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception"); Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code"); String servletName = (String) request.getAttribute("javax.servlet.error.servlet_name"); if (servletName == null){ servletName = "Unknown"; } String requestUri = (String) request.getAttribute("javax.servlet.error.request_uri"); if (requestUri == null){ requestUri = "Unknown"; } // إعداد نوع المحتوى للإجابة response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "موقع تعليمات الأساس Error/Exception معلومات"; String docType = "<!DOCTYPE html>\n"; الطبع.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n"); الطبع.println("<h1>مثال على رسالة خطأ/استثناء في موقع تعليمات الأساس</h1>"); if (throwable == null && statusCode == null) {}} out.println("<h2>معلومات الخطأ مفقودة</h2>"); out.println("يرجى العودة إلى <a href=\"" + response.encodeURL("http://localhost:8080/") + "\">الصفحة الرئيسية</a>."); } else if (statusCode != null) { out.println("كود الخطأ: " + statusCode); } else { out.println("<h2>معلومات الخطأ</h2>"); out.println("اسم servlet: " + servletName + "</br></br>"); out.println("نوع الاستثناء: " + throwable.getClass().getName() + "</br></br>"); out.println("URI الطلب: " + requestUri + "<br><br>"); out.println("معلومات الاستثناء: " + throwable.getMessage()); } out.println("</body>"); out.println("</html>"); } // طريقة معالجة طلبات طريقة POST public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
أكتبها بطريقة تقليدية ErrorHandler.java،ضع ملفات الكلاسات الخاصة بك في <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes.
نحن نضيف التكوين التالي في ملف web.xml لمعالجة الاستثناءات:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>ErrorHandler</servlet-name> <servlet-class>com.w3codebox.test.ErrorHandler</servlet-class> </servlet> <!-- servlet mappings --> <servlet-mapping> <servlet-name>ErrorHandler</servlet-name> <url-pattern>/TomcatTest/ErrorHandler</url-pattern> </servlet-mapping> <error-page> <error-code>404</error-code> <location>/TomcatTest/ErrorHandler</location> </error-page> <error-page> <exception-type>java.lang.Throwable</exception-type > <location>/ErrorHandler</location> </error-page> </web-app>
الآن، حاول استخدام Servlet سينتج عنه استثناء، أو أدخل URL خاطئة، مما سيؤدي إلى إطلاق مدير الحاويات على الويب مدير الأخطاء Servlet، ويعرض الرسالة المناسبة. على سبيل المثال، إذا أدخلت URL خاطئة (مثل: http://localhost:8080/TomcatTest/UnKonwPage)، فإنه سيظهر النتيجة التالية:
كود الخطأ: 404