مقدمة
يعد نظام التقاطع جزءًا مهمًا من إطار Struts2. ليس من المبالغة أن نقول أنه بدون نظام التقاطع ، لن يكون هناك إطار سهل الاستخدام Struts2. في إطار Struts2 ، أكمل عدد كبير من المقاطعات العديد من الوظائف الأساسية. على سبيل المثال ، يكون اعتراض params مسؤولاً عن تحليل معلمات طلبات HTTP وتحديد خصائص الإجراء ؛ يمرر اعتراض Servlet-Config مباشرة مثيل httpservletrequest ومثيل httpservletresponse في طلب HTTP إلى الإجراء ؛ يعد Interceptor FileUpload مسؤولاً عن تحليل مجال الملف في معلمات الطلب وإعداد مجال ملف إلى خصائص الإجراء الثلاثة ... كل هذا يتم بواسطة المعترض المدمج. لذلك ، إتقان مبادئ وأساليب استخدام التقاطعات في Struts2 ، يمكننا فهم "شريان الحياة" لإطار Struts2.
ومع ذلك ، حتى الآن ، بصرف النظر عن تكوين مرشح StrutSpreparexecuteFilter في web.xml ، لم نصل بعد إلى أي اعتراضات أخرى. فلماذا يمكن أن يعمل تطبيقنا بشكل جيد؟ في الواقع ، مكن Struts2 عددًا كبيرًا من التقاطعات الشائعة افتراضيًا. ستعمل هذه التقاطعات طالما أن الحزمة التي تم تكوينها للإجراء ترث حزمة الافتراضات الدائرية. دعنا نلقي نظرة على التقاطع المدمج لـ Struts2.
Struts2 اعتراض مدمج
هناك العديد من المقاطعات المدمجة في إطار Struts2. تكمل هذه التقاطعات تقريبًا 70 ٪ من أعمال إطار STRUTS2 ، بما في ذلك معلمات طلب التحليل ، وتعيين معلمات الطلب إلى سمات الإجراء ، وما إلى ذلك. يرجع التصميم الذكي لـ Struts2 إلى حد كبير إلى تصميم الاعتراض ؛ عندما يكون من الضروري تمديد وظيفة Struts2 ، تحتاج فقط إلى توفير التقاطع المقابل وتكوينه في حاوية Struts2.
يتم تكوين هذه التقاطعات المدمجة في ملف struts-default.xml في شكل أزواج من فئة الاسم ، حيث الاسم هو اسم التقاطع ، وهو المعرف الفريد للاعتراض ليتم استخدامه لاحقًا ؛ الفئة تحدد فئة التنفيذ من التقاطع. للحصول على وصف مفصل لهذه المعترضات المدمجة ، يرجى الرجوع إلى الوثائق الرسمية.
تكوين اعتراض
يتطلب تحديد اعتراض في ملف struts.xml فقط تحديد اسم اعتراض لفئة التقاطع ، ويتم إكمال تعريف التقاطع. حدد اعتراضًا باستخدام <Interceptor .../> ، على سبيل المثال:
<!-حدد الاعتراض من خلال تحديد اسم اعتراض وفئة تطبيق اعتراض-> <interceptor name = "interceptor name"> <param name = "param name"
بالإضافة إلى ذلك ، يمكن توصيل أجهزة اعتراضية متعددة معًا لتشكيل مكدس اعتراض ، ويتم استخدام <Interceptor-REF .../> في المعترض لتحديد مرجع التقاطع. على سبيل المثال:
<interceptor-stack name = "interceptor stack one"> <interceptor-ref name = "interceptor one"/> <interceptor-ref name = "Interceptor two"/> ... </interceptor-stack>
من منظور بنية البرنامج ، يتكون مكدس التقاطع من أجهزة اعتراضية متعددة ؛ ولكن من منظور وظيفة البرنامج ، فإن مكدس التقاطع والاعتراض هو نفسه ، وسيتم تنفيذ الطرق التي تحتوي عليها تلقائيًا قبل تنفيذ طريقة تنفيذ الإجراء. لذلك ، يمكننا التعامل تمامًا مع مكدس التقاطع كقاصة أكبر.
نظرًا لأن مكدس التقاطع والاعتراض متسقين ، يمكن أن يحتوي مكدس التقاطع أيضًا على مكدس اعتراض ، على سبيل المثال:
<interceptor-stack name = "interceptor stack 2"> <interceptor-ref name = "modeldriven"/> <interceptor-ref name = "Interceptor stack 1"/> </interceptor-stack>
باستخدام اعتراض
بمجرد تحديد مكدس التقاطع والاعتراض ، يمكن استخدام مكدس أو اعتراض هذا لاعتراض الإجراء. سيتم تنفيذ سلوك اعتراض اعتراض قبل تنفيذ الإجراء.
باستخدام عنصر <interceptor-ref .../> ، فإن بناء جملة التكوين لاستخدام اعتراض في إجراء ما هو بالضبط نفس بناء جملة الرجوع إلى اعتراض عند تكوين مكدس اعتراض. على سبيل المثال:
<action name = "login"> <result name = "error">/error.jsp </srodevents> <result name = "success">/welcome.jsp </sropered> <!-interceptor stack-> <interceptor-ref name = "defaultStack"/> <!-interceptor-ref name =! name = "key"> المعلمات الديناميكية </param> </stilection-rref> </usech>
بعد الانتهاء من هذا التكوين ، ستعمل هذه التقاطعات الثلاثة قبل تنفيذ عملية التنزيل.
تكوين التقاطع الافتراضي
عند تكوين حزمة ، يمكن تحديده باستخدام اعتراض افتراضي. بمجرد تحديد اعتراض افتراضي لحزمة ما ، سيعمل اعتراض الافتراض إذا لم يحدد الإجراء في هذه الحزمة بشكل صريح العرض. ومع ذلك ، بمجرد أن نطبق بشكل صريح اعتراضًا على الإجراء في الحزمة ، لن يعمل المعترض الافتراضي ؛ إذا كان الإجراء يتطلب استخدام اعتراض الافتراض ، فيجب عليك تكوين المرجع يدويًا إلى المعترض.
لن يتم سريان المعترض الافتراضي للحزمة التي يوجد فيها الإجراء إلا إذا لم يكن هناك أي تطبيق بشكل صريح في الإجراء.
قم بتكوين اعتراض الافتراضي لاستخدام عنصر <default-deponstor-ref .../> ، والذي يتم استخدامه كطفل لعنصر <package .../> ، وتكوين التقاطع الافتراضي لجميع الإجراءات ضمن هذه الحزمة. على سبيل المثال:
<name default-interceptor-Ref = "Default Interceptor"/>
يمكنك أيضًا تحديد معلمات التقاطع الافتراضي ، على سبيل المثال:
<default-interceptor-ref name = "default interceptor"> <param name = "parameter name"> value parameter </param> </default-interceptor-REF>
في ملف struts-default.xml ، يتم تكوين حزمة مجردة تسمى Struts-Default ، حيث يتم تعريف مرجع اعتراض افتراضي يسمى DefaultStack. عندما ترث الحزمة التي نحددها حزمة الدعامات الدائرية ، فإنها ترث أيضًا مكدس التقاطع الافتراضي الخاص بها: DefaultStack ، مما يعني أيضًا أنه إذا لم نطبق بشكل صريح اعتراض الإجراء ، فسيصدر مكدس اعتراض الافتراضي تلقائيًا.
اعتراض مخصص
1>. أضف فئة لروث فئة المجردة المجردة ، أو تنفيذ واجهة التقاطع
TimeInterceptor الفئة العامة يمتد مجردة interceptor {/*** القيمة الإرجاع للطريقة الأساسية للاعتراض هي سلسلة اعتراض السلسلة*/@orgridepublic intercept (enclovocation invocation) استثناء {// todo method method method tuto "login" ؛}}}}}}}}2>. أضف عقدة الطفل اعتراضية في حزمة struts.xml وأضف عقدة اعتراضية تحتها
<package name = "goods" مساحة اسم = "/Goods" تمتد = "Common-PKG"> <interceptors> <interceptor name = "timeInterceptor"> </20100
3>.
<action name = "list_category" method = "list"> <interceptor-ref name = "timeInterceptor"> </interceptor-ref> <result name = "list" type = "dispatcher">/pages/list.
لخص
توفر هذه المقالة ملخصًا أوليًا لنواة Stuts2 - المعترض. في المقالة اللاحقة ، سنقوم بتنفيذ اعتراضنا الخاص ونطبق نقاط المعرفة الملخصة في هذه المقالة.
حسنًا ، ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون لمحتوى هذه المقالة قيمة مرجعية معينة لدراسة أو عمل الجميع. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل. شكرا لك على دعمك إلى wulin.com.