1. يقوم العميل بتهيئة طلب إلى حاوية Servlet (Tomcat) ؛
2. يمر هذا الطلب من خلال سلسلة من المرشحات ، ثم يسمى FilterDispatcher ؛
3. FilterDispatcher يطلب ActionMapper لتحديد ما إذا كان الطلب يحتاج إلى استدعاء إجراء معين ؛
4. إذا قرر ActionMapper استدعاء إجراء ما ، فإن FilterDispatcher يسلم معالجة الطلب إلى ActionProxy. ActionPro يسأل ملف تكوين الإطار وفقًا لـ ConfigurationManager ويجد فئة الإجراء التي يجب استدعاؤها ، وقراءة Struts.xml عمومًا ؛
5. Actionproxy ينشئ مثيل العمل. يسمى مثيل ActionInvocation باستخدام نمط مسمى. قبل وبعد عملية استدعاء الإجراء ، تشارك دعوة الاعتراض ذات الصلة ؛
6. بمجرد تنفيذ الإجراء ، يجد ActionInvocation نتيجة الإرجاع المقابلة وفقًا للتكوين في Struts.xml.
على سبيل المثال رمز:
بعد حصول Struts2 على طلب.
يتم تعريف جميع الإجراءات في تطبيقات Struts2 في Struts.xml ؛
إن مثيل الإجراء الذي تستخدمه Struts2 للتعامل مع طلبات المستخدم ليس وحدة تحكم أعمال يتم تنفيذها من قبل المستخدم ، ولكنها وكيل إجراء ، لأن وحدة التحكم في الخدمة التي ينفذها المستخدم لا يقترن مع Servletapi ، ومن الواضح أنه لا يمكن التعامل مع طلبات المستخدم.
<html> <head> <title> النجاح </title> </head> <body> <form> <torm a action = "hell.action" method = "post"> اسم المستخدم: <input type = "text" name = "name"
على سبيل المثال ، Hello.Action للنموذج أعلاه ، فإن خاصية الإجراء هذه ليست خدمة عادية أو صفحة ديناميكية JSP. عندما يتم إرسال النموذج إلى Hello.action ، ستعمل FilterDispatcher من Struts2 وإعادة توجيه طلب المستخدم إلى الإجراء المقابل.
لاحظ أن إجراء Struts2 يعترض جميع الطلبات مع اللاحقة. التفريغ افتراضيًا. إذا احتجنا إلى إرسال النموذج إلى اتخاذ إجراء للمعالجة ، فيجب ضبط سمة إجراء النموذج على تنسيق.
فئة وحدة التحكم
public class helloAction {private string name ؛ private string pass ؛ public void setName (name string) {this.name = name ؛} public void setPass (string pass) {this.pass = pass ؛} public string execute () {if ("yang" .equals (name) && "1234" .equals (pass))بعد الانتهاء من التنفيذ السابق ، يتم تنفيذ إعادة توجيه الصفحة فقط ، ولا يتم تتبع حالة المستخدم. عندما يقوم المستخدم بتسجيل الدخول ، نحتاج إلى إضافة اسم المستخدم للمستخدم كمعلومات حالة HTTPSENESS.
من أجل الوصول إلى مثيل HTTPSENESS ، يوفر Struts2 فئة ActionContext ، والتي توفر طريقة getSession () ، ولكن قيمة إرجاع هذه الطريقة ليست httpsession () ولكن MAP () ، ولكن اعتراض Struts2 سيكون مسؤولاً عن التبديل بين الجلسة () و HTTPSENESS ().
من أجل التحقق مما إذا كانت سمة الجلسة التي حددناها ناجحة ، يمكننا تعيين الواجهة بعد النجاح
<html> <head> <base href = "<٪ = basepath ٪>" rel = "خارجي nofollow"> <title> النجاح </title> </head> <body> مرحبًا ، $ {sessionscope.user} ، لقد قمت بالفعل بتسجيل الدخول.استخدم بناء جملة التعبير JSP2.0 لإخراج سمة المستخدم في جلسة HTTP.
إجراءات تكامل فئة الأدوات الإجراءات
فئة ActionSupport هي فئة أدوات ، وقد نفذت واجهة الإجراء. بالإضافة إلى ذلك ، فإنه يقوم أيضًا بتنفيذ واجهة ValidatableZ ، مما يوفر وظيفة التحقق من البيانات.
من أجل زيادة وظيفة التحقق من بيانات الإدخال ، أضف طريقة التحقق من صحة إعادة الكتابة في العمل.
void public void viade () {if (getName () == null || getName (). trim (). equals ("")) {addfielderror ("name" ، getText ("name.required")) ؛} if (getPass () == null || getPass (). getText ("pass.required")) ؛}}سيتم تنفيذ طريقة التحقق من صحة المعاد كتابتها أعلاه قبل طريقة تنفيذ () تنفيذ النظام. إذا كان Fielderror في فئة الإجراء يحتوي بالفعل على أخطاء التحقق من البيانات بعد تنفيذ هذه الطريقة ، فسيتم إعادة توجيه الطلب إلى العرض المنطقي للإدخال ، لذلك تحتاج أيضًا إلى إضافة اسم العرض المنطقي للإدخال في Struts.xml للسماح له بالقفز إلى صفحة تسجيل الدخول.
إن عيب هذه الطريقة التحقق من صحة هو أنها تتطلب الكثير من إعادة كتابة طريقة التحقق من صحة ، بحيث يمكنك استخدام إطار التحقق من Struts2.
<؟ <field-validator type = "requiredString"> <message key = "name.required"/> </field-validator> </field> <!-تحقق من تمرير النموذج-> <field name = "pass"> <field-validator> </"مطلوبة"> مفتاح message = "pass.required
لخص
ما سبق هو المحتوى الكامل لهذه المقالة حول عملية Struts2 وسلسلة من تحليل رمز المعرفة ذات الصلة. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!