1. تصنيف الشذوذ
تنقسم استثناءات Java إلى فئتين: "Check" و "Noncect". تعني كلمة "التحقق" أنه عند تجميع الكود ، سيقوم المترجم بالتحقق مما إذا كان هناك أي معالجة استثناء (اصطياد أو رمي). للاستثناءات المصنفة على أنها تحتاج إلى فحص ، إذا لم تتم معالجتها ، فلن يكون الترجمة قادرة على تمريرها.
عندما كنت مبتدئًا ، كثيراً ما أتساءل لماذا يجب التعامل مع الاستثناءات بهذه الطريقة؟ في وقت لاحق فهمت قليلاً ، لا يوجد سوى نوعين من التشوهات: الذاتية والموضوعية. يمكن تجنب المرء في معظم الحالات ولا يمكن تجنب الآخر في معظم الحالات.
ترتبط استثناءات مثل NullPointerException في الغالب بصفات المبرمجين (المطورة واختبارها جيدًا ، ولن تظهر بشكل أساسي بعد تشغيل النظام). يمكن تجنبها بشكل أساسي. استخدمها بناء جملة Java في الفصل كـ "استثناءات غير محسوسة" ، والتي أنقذت أيضًا المبرمجين والمترجمين الكثير من المتاعب ؛
الاستثناءات المتعلقة بالبيئات الخارجية مثل IOException لا مفر منها تقريبًا (ستنطلق الشبكة يومًا ما والآخر). ومع ذلك ، عند المواجهة بشكل غير متوقع ، لا يزال البرنامج بحاجة إلى إحداث تغيير ، لذلك يحتاج المترجم إلى حث المبرمج على التحقق مما إذا كانت هذه الاستثناءات غير المتوقعة الممكنة قد تمت معالجتها. عندما يتم تمرير كائن الاستثناء إلى عقدة ، يمكن للبرنامج إجراء بعض التدابير ، مثل: إرجاع موجه للمستخدم ("النظام مشغول ، يرجى المحاولة مرة أخرى") ، ودفع رسالة استثناء إلى منصة المراقبة ، إلخ.
2. معالجة الإرجاع الموحد للاستثناءات
1. معالجة الحاويات
يسرد التالية أساليب معالجة Tomcat ، وتكوينها ضمن web.xml ، ومعالجةها وفقًا لرمز إرجاع HTTP أو نوع الاستثناء:
<errore-page> <rorer-code> 404 </errer-code> <bocation> /web-inf/views/error/404.jsp </socation> </rreg-page> <rork-page> <rork-page> <code-code> </error-page> <Tisply-type> java.lang.throwable </stispion-type> <borting> /web-inf/views/error/throwable.jsp </socation> </error-page>
العيوب: لا يمكن التعامل مع الطلبات التي لا تحتاج إلى إرجاع HTML ، مثل Ajax ؛
2. معالجة الإطار
فيما يلي يسرد أساليب المعالجة لـ Spring MVC
(1) استخدم SimplEmpappingExceptionResolver ، معالج الاستثناء البسيط المدرج في Spring MVC ؛
(2) تنفيذ واجهة HandleRexceptionResolver معالج الاستثناء المخصص ؛ (يوصى باستخدامه ، ويمكن أن يدعم Ajax وغيرها من الامتدادات)
(3) استخدم exceptionHandler Eanotation لتنفيذ معالجة الاستثناءات ؛
النوع (1) ، تكوين ضمن spring-mvc.xml
<!-انتقل إلى الاستثناء الذي ألقيته وحدة التحكم إلى طريقة عرض محددة-> <bean> <property name = "inspeciedMappings"> <!-استثناءات مختلفة تقفز بشكل منفصل-> <!-يمكنك تخصيص استثناءات مختلفة-> <prop key = "com.test.myexception1" تخصيص الاستثناءات ، فقط قم بتكوين ما يلي -> <prop key = "java.lang.throwable">/error/500 </prop> </rops> </propert
العيوب: لا يمكن التعامل مع الطلبات التي لا تحتاج إلى إعادة HTML ؛
النوع (2) ، فئة تنفيذ واجهة HandleRexceptionResolver المخصصة
/** * معالج الاستثناء المخصص: يدعم AJAX * Author wangxu * */public class myExceptionHandler تنفذ HandleRexceptionResolver {public modelandview solodeException (httpservletrequest request ، httpservledrespons request.getheader ("x-requested-with")! = null && "xmlHttPrequest" .equals (request .getheader ("x-requested-with"). toString ()) ؛ if (! isajax) {if (ex extuteof com.test.myException1) {return new modelandview ("/error/e1") ؛ } آخر إذا (ex extrueof com.test.myexception1) {return new ModelAndView ("/error/e2") ؛ } آخر {return new ModelAndView ("/error/500") ؛ }} string jsonres = "{/" message/":/" " +" System Exception " +"/"}" ؛ جرب {out = reponse.getWriter () ؛ request.setcharacterencoding ("UTF-8") ؛ استجابة. Out.print (jsonres) ؛ out.flush () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } أخيرًا {out.close () ؛ } إرجاع فارغ ؛ }}وتسجيل المعالج ضمن spring-mvc.xml
<bean id = "استثناء Handler"/>
المزايا: يمكنها التعامل مع طلبات AJAX ، كما أنها مريحة للترميز لتنفيذ الامتدادات الوظيفية ، مثل مراقبة الاستثناء ، إلخ.
النوع (3) ، exceptionHandler التعليق التوضيحي
controllerpublic class testExceptionLerController {exceptionHandler ({myException1.Class}) استثناء السلسلة العامة (myException1 e) {return "/error/e1" ؛ } @requestmapping ("/mary") اختبار الفراغ العام () {رمي myException1 جديد ("لا مال!") ؛ }}العيوب: يجب أن تكون طريقة exceptionHandler ضمن نفس وحدة التحكم مثل طريقة الاستثناءات المحتملة. (غير موصى به)
3. مزيج
في المشاريع الفعلية ، عند التعامل مع عوائد موحدة للاستثناءات ، سيتم تسليم بعض الاستثناءات المخصصة أو الامتدادات إلى الإطار ، وسيتم تسليم رسم خرائط لإرجاع HTTP إلى الحاوية ، لأن رمز إرجاع HTTP أكثر خارجيًا ، لا يمكن للبعض الوصول إلى الإطار ، والبعض الآخر لا يستثناء من الإطار (مثل 404 و SPRING MV). يعمل الإطار في الحاوية. عندما يأخذ الإطار الاستثناء أولاً ويعيده ، لن يتم تعيين الحاوية.
ما سبق هو كل شيء عن هذا المقال ، آمل أن يكون مفيدًا لتعلم الجميع.