يدرس هذه المقالة بشكل أساسي إدخال التقاطعات في SpringMVC ، رمز المثال ، التكوين والمحتويات الأخرى ، على النحو التالي.
يشبه اعتراض معالج SpringMVC مرشح المرشح في تطوير Servlet ، والذي يستخدم في المعالج قبل العملية وبعد العملية. تلخص هذه المقالة بشكل أساسي كيفية تعريف التقاطع في SpringMVC ، وكذلك تنفيذ واستخدام المعترض.
في springMVC ، حدد اعتراضه لتنفيذ واجهة المعالج وتنفيذ الطرق الثلاثة المتوفرة في الواجهة ، على النحو التالي:
// Test Interceptor1public Class Class HandlerInterceptor1 تنفذ HandlerInterceptor {Override Public Boolean prehandle (httpservletrequest request ، httpservletresponse response ، معالج الكائن) يلقي الاستثناء {system.out.println ("HandlerInterceptor1 .... وذلك يعني الإفراج عن إرجاع الإرجاع true ؛}@override public void posthandle (httpservletrequest طلب ، httpservletresponse ، معالج الكائنات ، modelandview modelandview) يلقي استثناء {system.out.println ("httpserceptor1..posthandle") استجابة ، معالج الكائن ، استثناء EX) يلقي الاستثناء {system.out.println ("HandlerInterceptor1..ftercompletion") ؛}}سأقوم بتحليل بسيط لهذه الطرق الثلاث:
في springMVC ، يتم تكوين التقاطع للمنزل المحددة ، أي إذا تم تكوين اعتراض في المعالجة ، فإن المعالج الذي تم تعيينه بنجاح من خلال معالجة المعالج سيستخدم في النهاية المعترض. على سبيل المثال ، لنفترض أن mapper قمنا بتكوينه في ملف التكوين هو org.springframework.web.servlet.handler.beannameurlhandlermapping ، ثم يمكننا تكوين المعترض على النحو التالي:
<Bean> <property name = "interceptors"> <list> <ref bean = "handlerInterceptor1"/> <ref bean = "handlerinterceptor2"/> </list> </sprement> </bean> <bean id = "HandlerInterceptor1"/>
إذن في SpringMVC ، كيفية تكوين اعتراض عالمي؟ كما ذكر أعلاه ، يتم استهداف التقاطعات في springMVC بمحركات محددة. لحل هذه المشكلة ، قام إطار عمل SpringMVC بتكوين اعتراضات متشابهة عالميًا في كل معالجة ، بحيث يمكن أن تصبح اعتراضات عالمية. التكوين كما يلي:
<!-تكوين اعتراضات-> <mvc: interceptors> <!-اعتراضات متعددة ، تم تنفيذها بالتسلسل-> <mvc: interceptor> <mvc: mapping path = "/**"/> <!- <bean/> </mvc: اعتراض>
بشكل عام ، نستخدم هذا التكوين ، فقط حدد عنوان URL ليتم اعتراضه في <MVC: Mapping>.
اكتب اثنين من المعتقلتين ، معالجات المقبول 2 و HandlerInterceptor3 ، وفقًا للتكوين أعلاه. بعد ذلك ، سنختبر تنفيذ المقاطع الثلاثة ونجعل ملخصًا ذا صلة.
بمعنى آخر ، نقوم بتغيير قيمة إرجاع طريقة prehandle للاعتراضات الثلاثة إلى True لاختبار ترتيب التنفيذ للاعتراض. نتائج الاختبار كما يلي:
المعالج 1 .... prohandle
المعالج 2 .... prohandle
المعالج 3 .... prohandleالمعالجات 3 ...
المعالج 2 .... posthandle
المعالج 1 .... posthandleمعالجات 3 .... بعد أن
HandlerInterceptor2 ... بعد ذلك
HandlerInterceptor1 ...
يتم إجراء ملخص بناءً على النتائج المطبوعة: عندما يتم إصدار جميع التقاطعات ، يتم تنفيذ طريقة prehandle بترتيب التكوين ؛ بينما يتم تنفيذ الطريقتين الأخريين بترتيب التكوين.
نقوم بتغيير قيمة الإرجاع في طريقة prehandle للاعتراض الثالث إلى FALSE ، وما زال الأولين صحيحين ، لاختبار ترتيب التنفيذ للاعتراض. نتائج الاختبار كما يلي:
المعالج 1 .... prohandle
المعالج 2 .... prohandle
المعالج 3 .... prohandleHandlerInterceptor2 ... بعد ذلك
HandlerInterceptor1 ...
قم بإجراء ملخص بناءً على النتائج المطبوعة:
1. منذ أن يتم إصدار اعتراضات 1 و 2 ، يمكن تنفيذ prehandle of Interceptor 3. وبعبارة أخرى ، يمكن إصدار التقاطع السابق ، ويمكن أن ينفذ التقاطع الأخير.
2. Interceptor 3 لا يطلقه ، لذلك لا يتم تنفيذ طريقتين أخريين. هذا هو ، إذا لم يطلقه اعتراضه ، فلن يتم تنفيذ طريقتين أخريين.
3. طالما أن هناك اعتراضًا لا يفرج ، فلن يتم تنفيذ طريقة ما بعد جميع التقاطعات ، ولكن طالما تم تنفيذ prehandle وإطلاقه ، سيتم تنفيذ طريقة Aftercompletion.
في الواقع ، يمكنك الرجوع إلى الموقف أعلاه. إنها حالة خاصة. دعنا نلقي نظرة على نتائج الجري:
المعالج 1 .... prohandle
من الواضح أن طريقة prehandle فقط تم تنفيذها. منذ أن لم يتم إطلاق أي منهم ، لم ينفذ أي منهم طريقة Posthandle وطريقة Aftercompletion.
من الحالة الثانية ، على سبيل المثال ، إذا كنت ترغب في كتابة منطق معالجة استثناء موحد ، فيجب وضع التقاطع في الموضع الأول لسلسلة التقاطع ويجب إصداره ، لأنه سيتم تنفيذ Aftercompletion فقط ، وإذا تم وضعه في الموضع الأول من سلسلة التقاطع ، فسيتم تنفيذ طريقة الاستكشاف بعد ذلك ، لذلك يمكن تنفيذ السجل لمجتمع الإجراءات غير المنقولة.
على سبيل المثال ، قم بتسجيل الدخول إلى اعتراض المصادقة ووضعه في الموضع الأول في رابط التقاطع (إذا كان هناك معالجة استثناء موحدة ، فيجب وضعها خلف معالجة الاستثناء الموحدة). يتم وضع اعتراض التحقق من الإذن بعد تسجيل الدخول إلى اعتراض المصادقة (لأنه يتم التحقق من الإذن فقط بعد تسجيل الدخول).
فيما يلي اعتراض التحقق من تسجيل الدخول لشرح كيفية استخدام اعتراض SPRINGMVC.
أولاً ، دعونا نلقي نظرة على المتطلبات: ما نريد اعتراضه ، وما نريد أن نفعله عندما نعترض. الفكرة هي كما يلي:
1. url طلب طلب المستخدم
2. اعتراض يؤدي التحقق من الاعتراض. إذا كان عنوان URL المطلوب هو عنوان عام (عنوان URL يمكن الوصول إليه دون تسجيل الدخول) ، فليتم إصداره.
إذا كانت جلسة المستخدم غير موجودة ، فانتقل إلى صفحة تسجيل الدخول.
إذا كانت جلسة المستخدم موجودة ، فقم بإصدارها وتواصل العملية.
// تسجيل الدخول في @requestmapping ("/login") تسجيل الدخول إلى السلسلة العامة (httpservletrequest طلب ، اسم مستخدم السلسلة ، كلمة مرور السلسلة) يلقي الاستثناء {// في الواقع ، تحتاج إلى مطابقة قاعدة البيانات //...//here ، افترض أن تسجيل الدخول قد نجحت في الحصول على httpsession = request.getssed () ؛ "إعادة التوجيه: QueryItems.Action" ؛} // login @requestmapping ("/logout") سلسلة تسجيل الدخول العامة (httpservletrequest طلب) رمي الاستثناء {httpsession session = request.getSession () ؛ session.invalidate () . إذا لم تمر المصادقة ، فهذا يعني أنه لم يتم تسجيل الدخول إلى المستخدم. تحتاج هذه الطريقة إلى اعتراضها وعدم إجراء مزيد من التنفيذ. خلاف ذلك ، فإن Override Public Boolean Prehandle (httpservletrequest طلب ، httpservletresponse ، معالج الكائن) يلقي الاستثناء {// احصل if (url.indexof ("login.action")> 0) {// إذا تم تنفيذ إرسال تسجيل الدخول ، فقم بإرجاع TRUE ؛ يجب التحقق من هوية المستخدم ، والانتقال إلى طلب صفحة تسجيل الدخول.ثم قم بتكوين التقاطع:
<!-تكوين اعتراضات-> <mvc: interceptors> <!-اعتراضات متعددة ، تنفذ بالتسلسل-> <mvc: interceptor> <mvc: mapping path = "/**"/> <!-اعتراض جميع عناوين URL بما في ذلك مسارات suburl-> </mvc: interceptor> <!
وبهذه الطريقة ، عندما نطلب أي عنوان URL ، سيتم التقاطنا بواسطة المعترض الذي حددناه للتو ، وبعد ذلك سنحدد ما إذا كانت هناك معلومات مستخدم في الجلسة. إذا لم يكن الأمر كذلك ، فسنقفز إلى صفحة تسجيل الدخول ودعنا نسجل الدخول:
<form action = "$ {pagecontext.request.contextpath} /login.action" method = "post"> username: <input type = "text" name = "username" /> <bord> password: <input type = "password" name = "password" /> <bertهذا هو في الأساس مقدمة لاستخدام المقاطعات.
ما سبق هو كل محتوى هذه المقالة حول التفسير التفصيلي للاعتراض في springMVC وأمثلة الكود. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!