لقد فجر الربيع الصومى!

يوفر Spring MVC عدة طرق مجانية للتعامل مع الاستثناءات ، لكن عند تدريس Spring MVC ، غالبًا ما أجد أن طلابي مشوشون أو غير مرتاحين معهم.

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

هناك ثلاثة خيارات: لكل استثناء ، لكل وحدة تحكم أو على مستوى العالم.

ملحوظة:تم تجديد وتحديث التطبيقات التجريبية (أبريل 2018) لاستخدام Spring Boot 2.0.1 وهو (نأمل) أسهل في الاستخدام والفهم. لقد قمت أيضًا بإصلاح بعض الروابط المعطلة (شكرًا على تعليقاتك ، آسف استغرق الأمر بعض الوقت).

تسمى فترة الصيام والتوبة والصلاة "الصوم الكبير" ، وهي فترة الزهد العظيم والدعوة والمطالبة ، كما يقول النشيد: "ملعب الفضائل يأتي إلى النور ، وقد تدخل في التدريب".

هناك العديد من الموضوعات والكثير من التذكيرات لاهوت الزهد والنبتون حول الصيام وفوائده.
يصف ثيودور ذا ستوديت (التعليم المسيحي 33) الصوم الكبير بأنه ميناء بلا عواصف ، حيث يسافر جميع الناس ويستمتعون بالصفاء الروحي.

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

يجب الترحيب بالصوم بفرح وبساطة ، دون الحزن على الحرمان من بعض الأطعمة.
بينما قد يكون هناك حماس ، مؤهل عاطفي ونفسي ، يمكن أن يكون غير مؤلم ومقبول ، كما يبدو للعديد من المؤمنين ورجال الدين ، يشير القديس إلى أن الصيام ليس فقط جسديًا ولكنه روحي أيضًا.

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

يتم الصوم في فصل الربيع ، عندما يزهر كل شيء ، وعندما تنمو الثمار على الأشجار ، والمزارعون يزرعونها.

ومع ذلك ، تنمو الأشواك في هذه الحقول وتحتاج إلى قطع.

وهكذا ، يقول القديس ثيودور ذي ستيت (التعليم المسيحي 31) أنه في فصل الربيع يريد جسمنا ويطلب الكثير من الطعام ، ويجب أن نكون حريصين على إعطائه الكمية اللازمة ، لأن هذا هو مصدر العواطف والخطايا.

مع الصوم ، يطرد جسمنا الميل إلى الخطيئة ويستمر في التنفيس.

علاوة على ذلك ، يخبرنا القديس أن هذه الثمار وفوائد الصيام هي أيضًا من أجل إنقاذها.

وطن المسيحيين هو القدس وهدفهم هو كسب ملكوت الله. ثمار الصيام تعطي المسيحيين الإمدادات والسلع ليصبحوا مواطنين في ملكوت الله.

هذا الخلاص الآتي من فترة الصيام هو لتلك الأشياء التي أعدها الله لمملكته ، أي للأشياء والسلع التي لم يسمعها أحد ولم يسمع بها أحد ، ولم يفكر أحد من قبل.

علينا أن نطهر أنفسنا حتى نتمكن من التطهير في الحياة المليئة ، لتكون على استعداد لتكون أوعية نعمة الله. آمين.

ربيع الحذاء

يتيح Spring Boot إعداد مشروع Spring مع الحد الأدنى من التكوين ، ومن المحتمل أنك تستخدمه إذا كان عمر التطبيق أقل من بضع سنوات.

لا يوفر Spring MVC أي صفحة خطأ افتراضية (خارج النطاق). الطريقة الأكثر شيوعًا لتعيين صفحة خطأ افتراضية كانت دومًا SimpleMappingExceptionResolver (منذ Spring V1 في الواقع). سنناقش ذلك لاحقا.

لكن الربيع الحذاء هل توفر صفحة معالجة الأخطاء الاحتياطية.

عند بدء التشغيل ، يحاول Spring Boot العثور على تعيين / خطأ. حسب الاصطلاح ، فإن عنوان URL الذي ينتهي بـ / error يعين إلى طريقة عرض منطقية تحمل نفس الاسم: error. في التطبيق التجريبي ، تقوم طريقة العرض هذه بالتعيين إلى error.html قالب Thymeleaf. (إذا كنت تستخدم JSP ، فسيتم تعيينه إلى error.jsp وفقًا لإعداد InternalResourceViewResolver الخاص بك). يعتمد التعيين الفعلي على ما هو ViewResolver (إن وجد) الذي قمت أنت أو برنامج Spring Boot بإعداده.

إذا لم يتم العثور على تعيين / محلل عرض / خطأ ، فإن Spring Boot يحدد صفحة الخطأ الخاصة به - ما يسمى "صفحة خطأ في Whitelabel" (صفحة دنيا تحتوي فقط على معلومات حالة HTTP وأي تفاصيل خطأ ، مثل الرسالة من استثناء غير معلوم). في نموذج الطلب ، إذا قمت بإعادة تسمية قالب error.html ، على سبيل المثال ، error2.html ثم أعد تشغيله ، فسترى أنه قيد الاستخدام.

إذا كنت تقدم طلبًا RESTful (حدد طلب HTTP نوع استجابة مرغوبًا بخلاف HTML) ، فإن Spring Boot يُرجع تمثيل JSON لنفس معلومات الخطأ التي يضعها في صفحة الخطأ "Whitelabel".

يقوم Spring Boot أيضًا بإعداد صفحة خطأ افتراضية للحاوية ، أي ما يعادل
التوجيه في web.xml (على الرغم من تنفيذه بشكل مختلف جدًا). لا يزال يتم الإبلاغ عن الاستثناءات التي يتم طرحها خارج إطار Spring MVC ، كما هو الحال من مرشح servlet ، من خلال صفحة أخطاء الرجوع إلى Spring Boot. يظهر نموذج التطبيق أيضًا مثال على ذلك.

يمكن العثور على مناقشة أكثر تعمقا لمعالجة أخطاء Spring Boot في نهاية هذه المقالة.

تنطبق بقية هذه المقالة بغض النظر عما إذا كنت تستخدم Spring مع أو بدون Spring Boot.

قد يختار مطورو REST الصبور التخطي مباشرةً إلى القسم الخاص باستجابات الخطأ REST المخصصة. ومع ذلك ، يجب عليهم بعد ذلك قراءة المقال كاملاً حيث أن معظمه ينطبق بالتساوي على جميع تطبيقات الويب ، REST أو غير ذلك.

7 إجابات 7

حاول استخدام hasAuthority بدلاً من ذلك hasRole داخل علامة HTML.

واجهت نفس المشكلة من إصدار Spring Security 3.x إلى 4.x. تغيير hasRole () إلى hasAuthority () فعل الخدعة لي.

أنت تفتقد مفهوم:

  • إذا كنت تستخدم hasRole ('ADMIN') ، فيجب أن يكون تعداد ADMIN ROLE_ADMIN بدلاً من ADMIN.
  • إذا كنت تستخدم hasAuthority ('ADMIN') ، فيجب أن يكون تعداد ADMIN هو ADMIN.

في أمان ربيع ، hasRole () هو نفسه hasAuthority () ، ولكن لديه مخطط وظيفة hasRole () مع مرجع بدون بادئة ROLE_.

كان علي أن أفعل شيئًا مماثلاً حيث كنت بحاجة للتحقق من دور المستخدم. فعلت أدناه

آمل أن يساعد شخص ما.

لقد واجهت مؤخرا نفس المشكلة. ما عليك القيام به هو:

في html الخاص بك أضف هذه العبارات:

(يمكنك التغيير بين springsecurity4 أو springsecurity3 حسب ما تستخدمه).

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

في فصل SpringWebConfiguration أو xml ، تأكد من إضافة لهجة SpringSecurity للزعتر: أنا أستخدم فئة java للتهيئة.

ولكن يمكنك أيضًا تحديد ما يقوله alexsource: أمان الربيع و Thymeleaf لا يعملان

آمل أن يكون هذا يصلح لك! تحية طيبة!

يمكنك ببساطة محاولة ذلك أدناه دون $ <. >.

أعتقد أنك لم تسبق الأدوار باستخدام ROLE_. إذا كان الأمر كذلك ، تأكد من إضافة البادئة كما هو موضح أدناه

حصلت في نفس المشكلة ، بسبب 4.0 الربيع الأمن. نظرًا لسبب thymeleaf-extras-springsecurity4 غير متوافق مع spring-security 4.0 و thymeleaf 2.x. لذلك قمت بتخفيض إصدارات أمان الربيع إلى 3.2.9.RELEASE وبدأ العمل. إذا كنت لا تزال ترغب في استخدام برنامج spring-security 4.0 ، فقد يكون بإمكانك رفع مستوى thymeleaf-extras-springsecurity4 إلى 3.0.0.RELEASE و thymeleaf verison إلى 3.0

أو إذا كنت تستخدم تطبيق الإقلاع النابض ، يصبح الموقف أكثر تعقيدًا ، فالخيار الوحيد المتبقي هو إما خفض مستوى الأمان في الربيع أو ترقية إصدار الإقلاع النابض إلى 1.4.x (والذي لا يزال في الإصدار التجريبي)

في السيناريو المحدد الخاص بك ، إجراء تغييرات pom أدناه يجب أن يجعل hasRole يعمل

باستخدام رموز حالة HTTP

عادةً ما يؤدي أي استثناء غير معالج يتم طرحه عند معالجة طلب ويب إلى قيام الخادم بإرجاع استجابة HTTP 500. ومع ذلك ، يمكن إضافة تعليق توضيحي لأي استثناء تكتبه بنفسك بواسطة التعليق التوضيحيResponseStatus (الذي يدعم جميع رموز حالة HTTP المحددة بواسطة مواصفات HTTP). عندما المشروح يتم طرح الاستثناء من طريقة تحكم ، ولن يتم التعامل معه في أي مكان آخر ، مما يؤدي تلقائيًا إلى إرجاع استجابة HTTP المناسبة مع رمز الحالة المحدد.

على سبيل المثال ، فيما يلي استثناء لطلب مفقود.

وإليك طريقة تحكم تستخدمها:

سيتم إرجاع استجابة HTTP 404 مألوفة إذا تضمن عنوان URL الذي يتم التعامل معه بهذه الطريقة معرف طلب غير معروف.

فجر الربيع الأغاني

الآية 1
حلمت بحلم
مني وانا
حلمت اننا
كان الشباب
وفي هذا الحلم
أبحرنا البحر
إلى الأرض
أحببنا

يا له من مشهد رائع
كان هناك مثل هذا النسيم الجميل
كل الذكريات كانت حرة
والطيور كانوا يغنون لنا

كما مشينا بأقدام عارية
في حقل البحر
كان هناك فقط أنت وأنا
لا اتجاهات ولا حاجة للتسرع
لا حاجة للاستعجال

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

الآية 2
أخذنا مقعد
فقط أنا و أنت
زرع في الشمس

جعلنا نعتقد
أننا يمكن أن يكون
أي شيء نريده

ركضنا عبر الأشجار
يحدق من خلال الأوراق
لا سحابة أن نرى
والطيور كانت لا تزال تغني لنا
الغناء بالنسبة لنا

وكانت الشمس قد اقتربت
والأصوات التي يمكن أن نسمعها
كانت حلوة جدا وواضحة جدا
والعالم كان يتلألأ بالنسبة لنا
اللمعان بالنسبة لنا


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

باستخدامExceptionHandler

يمكنك إضافة أساليب إضافية (ExceptionHandler) إلى أي وحدة تحكم لمعالجة الاستثناءات التي تم طرحها عن طريق معالجة (RequestMapping) أساليب في وحدة التحكم نفسها. يمكن لهذه الطرق:

  1. تعامل مع الاستثناءات بدون تعليق توضيحيResponseStatus (عادةً استثناءات محددة مسبقًا لم تكتبها)
  2. إعادة توجيه المستخدم إلى عرض خطأ مخصص
  3. بناء استجابة خطأ مخصصة تماما

وحدة التحكم التالية توضح هذه الخيارات الثلاثة:

في أي من هذه الطرق ، قد تختار القيام بمعالجة إضافية - المثال الأكثر شيوعًا هو تسجيل الاستثناء.

تحتوي أساليب المعالج على توقيعات مرنة حتى تتمكن من تمرير كائنات واضحة متعلقة بـ servlet مثل HttpServletRequest و HttpServletResponse و HttpSession و / أو Principle.

ملاحظة مهمة: النموذج قد ليس تكون معلمة لأي طريقةExceptionHandler. بدلاً من ذلك ، قم بإعداد نموذج داخل الطريقة باستخدام ModelAndView كما هو موضح بواسطة handleError () أعلاه.

الاستثناءات والآراء

كن حذرًا عند إضافة استثناءات إلى النموذج. لا يريد المستخدمون رؤية صفحات الويب التي تحتوي على تفاصيل استثناء Java وتتبعات المكدس. قد يكون لديك سياسات أمنية صريحة حرم وضع أي معلومات الاستثناء في صفحة الخطأ. سبب آخر للتأكد من تخطي صفحة الخطأ في وضع Spring Boot.

تأكد من تسجيل الاستثناءات بشكل مفيد حتى يمكن تحليلها بعد الحدث بواسطة فرق الدعم والتطوير.

يرجى تذكر أن ما يلي قد يكون مناسبًا ولكنه كذلك ليس أفضل الممارسات في الإنتاج.

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

للحصول على مكافئ Thymeleaf ، راجع support.html في التطبيق التجريبي. النتيجة تبدو هكذا.

باستخدامControllerAdvice فئات

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

أي فصل توضيحي باستخدامControllerAdvice يصبح مشورة تحكم ويتم دعم ثلاثة أنواع من الأساليب:

  • طرق معالجة الاستثناء المشروح معExceptionHandler.
  • طرق تحسين النموذج (لإضافة بيانات إضافية إلى النموذج) المشروح بها
    تضمين التغريدة لاحظ أن هذه السمات هي ليس متاح للاستثناء التعامل مع وجهات النظر.
  • طرق التهيئة الموثق (المستخدمة لتكوين معالجة النموذج) المشروح مع
    تضمين التغريدة

سننظر فقط في معالجة الاستثناءات - ابحث في الدليل عبر الإنترنت للحصول على المزيد حول أساليبControllerAdvice.

يمكن تعريف أيٍ من معالجات الاستثناء التي رأيتها أعلاه في فصل-مشورة وحدة التحكم - لكن الآن يتم تطبيقها على الاستثناءات التي يتم طرحها أي مراقب. اليك مثال بسيط:

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

HandlerExceptionResolver

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

يشير المعالج إلى وحدة التحكم التي أنشأت الاستثناء (تذكر أن مثيلاتController هي نوع واحد فقط من المعالج المدعوم من Spring MVC. على سبيل المثال: HttpInvokerExporter و WebFlow Executor هي أيضًا أنواع من المعالج).

خلف الكواليس ، تقوم MVC بإنشاء ثلاثة من هذه الحلول بشكل افتراضي. هذه هي الحلول التي تنفذ السلوكيات التي نوقشت أعلاه:

  • تتطابق ExceptionHandlerExceptionResolver مع الاستثناءات غير المعلمة مقارنة بطرقExceptionHandler المناسبة على كل من المعالج (وحدة التحكم) وأي نصائح تحكم.
  • يبحث ResponseStatusExceptionResolver عن الاستثناءات غير المعلنة التي تم شرحها بواسطةResponseStatus (كما هو موضح في القسم 1)
  • DefaultHandlerExceptionResolver يحول استثناءات Spring القياسية ويحولها إلى رموز حالة HTTP (لم أذكر ذلك أعلاه لأنه داخلي لـ Spring MVC).

يتم ربطها ومعالجتها بالترتيب المدرج - ينشئ Spring داخليًا حبة مخصصة (HandlerExceptionResolverComposite) للقيام بذلك.

لاحظ أن توقيع أسلوب solutionException لا يتضمن الطراز. هذا هو السبب في أنه لا يمكن حقن طرقExceptionHandler مع النموذج.

يمكنك ، إذا كنت ترغب في ذلك ، تطبيق HandlerExceptionResolver الخاص بك لإعداد نظام معالجة الاستثناء المخصص الخاص بك. عادةً ما تقوم المعالجات بتطبيق واجهة Spring المطلوبة ، بحيث يمكنك تحديد الترتيب الذي تعمل به المعالجات.

SimpleMappingExceptionResolver

منذ فترة طويلة قدم Spring تطبيقًا بسيطًا ومناسبًا لـ HandlerExceptionResolver الذي قد تجد أنه قد تم استخدامه بالفعل في appication الخاص بك - وهو SimpleMappingExceptionResolver. يوفر خيارات ل:

  • قم بتعيين أسماء فئة الاستثناء لعرض الأسماء - ما عليك سوى تحديد اسم الفئة ، ولا توجد حزمة مطلوبة.
  • حدد صفحة خطأ افتراضية (احتياطي) لأي استثناء لا تتم معالجته في أي مكان آخر
  • تسجيل رسالة (لم يتم تمكين هذا بشكل افتراضي).
  • عيّن اسم سمة الاستثناء لإضافته إلى الطراز بحيث يمكن استخدامه داخل طريقة العرض
    (مثل JSP). افتراضيًا ، تُسمى هذه السمة استثناء. اضبط للإلغاء. تذكر أن طرق العرض التي تم إرجاعها من أساليبExceptionHandler لا الوصول إلى الاستثناء ولكن طرق العرض المعرفة إلى SimpleMappingExceptionResolver فعل.

فيما يلي تكوين نموذجي باستخدام تكوين Java:

أو باستخدام تكوين XML:

ال defaultErrorView الخاصية مفيدة بشكل خاص لأنها تضمن أن أي استثناء غير معلوم ينشئ صفحة خطأ في التطبيق مناسبة. (الافتراضي لمعظم خوادم التطبيقات هو عرض تتبع مكدس Java - شيء يجب على المستخدمين لديك أبدا نرى). يوفر Spring Boot طريقة أخرى لفعل الشيء نفسه من خلال صفحة الخطأ "التسمية البيضاء" الخاصة به.

الأخطاء والراحة

قد تنشئ طلبات RETful GET أيضًا استثناءات ورأينا بالفعل كيف يمكننا إرجاع رموز استجابة خطأ HTTP القياسية. ومع ذلك ، ماذا لو كنت ترغب في إرجاع معلومات حول الخطأ؟ هذا سهل جدا للقيام به. حدد أولاً فئة الخطأ:

الآن يمكننا إرجاع مثيل من معالج مثل @ ResponseBody مثل:

ماذا تستخدم متى؟

كالعادة ، الربيع يحب أن يقدم لك الاختيار ، فماذا يجب أن تفعل؟ وهنا بعض قواعد الإبهام. ومع ذلك ، إذا كان لديك تفضيل لتكوين XML أو التعليقات التوضيحية ، فلا بأس بذلك أيضًا.

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

نموذج التطبيق

يمكن العثور على تطبيق مظاهرة في جيثب. يستخدم Spring Boot و Thymeleaf لإنشاء تطبيق ويب بسيط.

تم مراجعة التطبيق مرتين (أكتوبر 2014 ، أبريل 2018) وهو (نأمل) أفضل وأسهل للفهم. الأساسيات تبقى كما هي. يستخدم Spring Boot V2.0.1 و Spring V5.0.5 لكن الكود قابل للتطبيق على Spring 3.x و 4.x أيضًا.

حول التجريبي

يؤدي التطبيق المستخدم من خلال 5 صفحات تجريبية ، مع تسليط الضوء على تقنيات معالجة الاستثناء المختلفة:

  1. وحدة تحكم مع أساليبExceptionHandler لمعالجة الاستثناءات الخاصة به
  2. أداة التحكم التي تلقي استثناءات لـ ControllerAdvice عالمية للتعامل معها
  3. استخدام SimpleMappingExceptionResolver لمعالجة الاستثناءات
  4. نفس العرض التوضيحي 3 ولكن مع تعطيل SimpleMappingExceptionResolver للمقارنة
  5. يوضح كيف يقوم Spring Boot بإنشاء صفحة الخطأ الخاصة به

يمكن العثور على وصف لأهم الملفات في التطبيق وكيفية ارتباطها بكل عرض تجريبي في README.md للمشروع.

صفحة الويب الرئيسية هي index.html والتي:

  • روابط إلى كل صفحة تجريبية
  • ارتباطات (أسفل الصفحة) بنقاط النهاية لـ Spring Boot للمهتمين بـ Spring Boot.

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

بفضل Spring Boot ، يمكنك تشغيل هذا العرض التوضيحي كتطبيق Java (يعمل على حاوية Tomcat مضمنة). لتشغيل التطبيق ، يمكنك استخدام أحد الخيارات التالية (الثاني بفضل البرنامج المساعد Spring Spring maven):

محتويات الصفحة خطأ

أيضًا في التطبيق التجريبي ، أظهر كيفية إنشاء صفحة خطأ "جاهزة للدعم" مع تتبع مكدس مخفي في مصدر HTML (كتعليق). من الأفضل أن يحصل الدعم على هذه المعلومات من السجلات ، لكن الحياة ليست مثالية دائمًا. بغض النظر ، ما هذه الصفحة هل show هو كيف تقوم أداة معالجة الأخطاء الأساسية handError بإنشاء ModelAndView الخاصة بها لتوفير معلومات إضافية في صفحة الخطأ. نرى:

  • ExceptionHandlingController.handleError () على جيثب
  • GlobalControllerExceptionHandler.handleError () على جيثب

حاوية استثناء معالجة واسعة

يتم أيضًا الإبلاغ عن الاستثناءات التي يتم طرحها خارج إطار Spring Framework ، على سبيل المثال من مرشح servlet ، من خلال صفحة أخطاء الرجوع إلى Spring Boot.

للقيام بهذا Spring Boot ، يجب عليه تسجيل صفحة خطأ افتراضية للحاوية. في Servlet 2 ، يوجد توجيه يمكنك إضافته إلى web.xml للقيام بذلك. Sadly Servlet 3 لا تقدم مكافئ Java API. بدلاً من ذلك ، يقوم Spring Boot بما يلي:

  • بالنسبة لتطبيق Jar ، مع حاوية مضمنة ، فإنه يسجل صفحة خطأ افتراضية باستخدام واجهة برمجة تطبيقات حاوية محددة.
  • لتطبيق Spring Boot الذي تم نشره كملف WAR تقليدي ، يتم استخدام Servlet Filter
    الاستثناءات الصيد التي أثيرت مزيد من أسفل الخط والتعامل معها.

شاهد الفيديو: المعهد القومي للبحوث الفلكية يعلن غرة ربيع الأول والمولد النبوي الشريف (شهر فبراير 2020).