في القسم السابق ، أكملنا التشغيل الأساسي لعربة التسوق ، ولكن هناك مشكلة: عندما ينقر المستخدم على الاستقرار ، يجب أن نصدر حكم تسجيل الدخول لتحديد ما إذا كان المستخدم قد تم تسجيل الدخول. إذا لم يتم تسجيل الدخول ، فيجب عليه أولاً السماح للمستخدم بتسجيل الدخول. هذا يستخدم تقنية المرشحات. الفلتر يعترض على وجه التحديد طلبات الصفحة. إنه مشابه لمبدأ التقاطع. يعترض التقاطع على وجه التحديد طلبات الإجراء ، لذلك لكل منها استخداماته الخاصة. إذا كانت صفحة تقفز مباشرة دون إجراء إجراء ما ، فنحن بحاجة فقط إلى كتابة اعتراض. إذا كنا بحاجة إلى القفز إلى إجراء للمعالجة ، فيجب علينا كتابة اعتراض.
1. مبدأ القفز تسجيل الدخول <br /> اسمحوا لي أولاً أن أتحدث عن مبدأ التنفيذ: اكتب مرشحًا وتكوين عنوان URL الذي يجب اعتراضه في web.xml. وبهذه الطريقة ، عندما يلبي عنوان URL لطلب المستخدم التكوين ، سيتم تنفيذ المرشح الذي كتبناه. في المرشح ، نتحقق أولاً مما إذا كان هناك مستخدم قام بتسجيل الدخول في الجلسة. إذا لم يكن هناك أي إشارة إلى عدم وجود تسجيل دخول ، فاحصل على عنوان URL للصفحة والمعلمات التي يريد المستخدم الوصول إليها ، وإعادة تخليصه في عنوان URL ووضعه في الجلسة ، ثم إعادة توجيه إلى صفحة تسجيل الدخول ، وتسجيل الدخول إلى معالجة الإجراء ، وبعد المعالجة ، القفز إلى عنوان URL المحفوظة في الجلسة ، وهذا هو المكان الذي أراد فيه المستخدم أصلاً. هذا يكمل قفزة تسجيل الدخول.
2. تنفيذ قفزة تسجيل الدخول
عند استخدام صفحة عربة التسوق الحقيقية ، نضغط على الخروج ، وسوف تقفز تلقائيًا إلى صفحة تأكيد الطلب ، على النحو التالي:
ومع ذلك ، إذا لم يتم تسجيل الدخول في هذا الوقت ، فلن نقفز بالتأكيد إلى صفحة تأكيد الطلب مباشرة ، لذلك يتعين علينا استخدام مرشح لحظره وإصدار حكم. دعنا نكتب المرشح أدناه:
2.1 تنفيذ المرشحات
يحتاج تطبيق المرشح إلى تنفيذ واجهة المرشح والكتابة ثلاث طرق. في الواقع ، نحن بحاجة أساسا إلى الكتابة فوق واحد منهم. على النحو التالي:
يقوم userfilter من الفئة العامة بتنفيذ Filter {Override public void Dride () {// todo method method method adct} Override public void dofilter (servletRequest request ، servleTResponse ، remited filterchain) remrows ioexception ، servleTexception {httpletrequest Q = httpservletresponse res = (httpservletresponse) ؛ // تحديد ما إذا كانت الجلسة الحالية تحتوي على معلومات المستخدم إذا كان (req.getSession (). getAttribute ("user") == null) {// حفظ عنوان عنوان URL الذي يريد العميل الحالي الانتقال إلى String gourl = req.getservletpath () ؛ // الحصول على العنوان الذي يريد المستخدم الذهاب إلى السلسلة param = req.getquertring () ؛ // احصل على المعلمات التي يتم حملها في العنوان if (param! = null) {gourl = gourl + "؟" + param ؛ // أعد وضع عنوان الطلب + المعلمات // حفظ العنوان الذي يريد العميل الحالي الوصول إليه في الجلسة req.getsession (). setAttribute ("Gourl" ، Gourl) ؛ // طلب غير قانوني ، القفز إلى صفحة تسجيل الدخول req.getSession (). setAttribute ("خطأ" ، "طلب غير قانوني ، يرجى تسجيل الدخول!") ؛ Res.SendRedirect (req.getContextPath () + "/ulogin.jsp") ؛ } آخر {// إذا كان هناك الفلتر التالي ، قفز ، وإلا انتقل مباشرة إلى سلسلة الصفحة المستهدفة. dofilter (طلب ، استجابة) ؛ }} Override public void init (filterConfig config) يلقي ServleTexception {// todo method method method}} انطلاقًا من قانون التنفيذ ، فإن طريقة Dofilter هي الإسهال بشكل أساسي. في الطريقة ، حدد أولاً ما إذا كانت هناك معلومات مستخدم في الجلسة الحالية. إذا لم يكن كذلك ، فهذا يعني أنه لا يوجد تسجيل دخول. ثم يجب عليك أولاً حفظ عنوان عنوان URL والمعلمات الموجودة في العنوان الذي يريد المستخدم الذهاب إليه ، وتهجئته في عنوان URL جديد وحفظه في الجلسة ، ثم إعادة توجيهه إلى صفحة تسجيل الدخول للسماح للمستخدم بتسجيل الدخول. إذا كانت هناك معلومات مستخدم في الجلسة ، فهذا يعني أنك قمت بتسجيل الدخول مباشرة إلى الصفحة التي يريد المستخدم الذهاب إليها.
بعد كتابة مرشح ، لا تنسى تكوين عنوان URL للتصفية في web.xml ، على النحو التالي:
لذلك سيتم ترشيح $ {shop} /user/confirm.jsp. بعد ذلك ، دعنا نلقي نظرة على صفحة تسجيل الدخول. إنه يحتوي في الواقع على صندوقان ، اسم المستخدم وكلمة المرور ، والذي يعتمد بشكل أساسي على الإجراء الذي يقفز إليه:
نرى أنه يقفز إلى طريقة تسجيل الدخول في عامل المستخدم لتنفيذ المنطق. هنا ننفذ معلم المستخدم:
2.2 تنفيذ الإجراء
في معلم المستخدم ، نقوم أولاً بإصدار حكم تسجيل الدخول ، أي البحث عن المستخدمين الذين يحملون اسم المستخدم وكلمة المرور في قاعدة البيانات. إذا نجحت ، احفظ المستخدم في الجلسة ، ثم أعد النتيجة وقم بتسليمها إلى Struts2 للمعالجة. الرمز كما يلي:
Controller ("UserAction") scope ("prototype") تمتد عامل مستخدم الفئة العامة إلى BaseAction <Sether> {public string login () {// ugject of login model = userservice.login (model) ؛ if (model == null) {session.put ("error" ، "login fans") ؛ إرجاع "تسجيل الدخول" ؛ } آخر {// login بنجاح ، قم أولاً بتخزين المستخدم في الجلسة session.put ("المستخدم" ، النموذج) ؛ // الدفاع عن قفزة الصفحة استنادًا إلى ما إذا كان Gourl في الجلسة له قيمة إذا (session.get ("gourl") == null) {return "index" ؛ // Skip to Homepage} else {return "gourl" ؛ }}}}لنلقي نظرة على التكوين في Struts.xml:
نظرًا لأن لدينا Gourl في الجلسة ، ولكن في Struts.xml ، لا يمكننا الحصول على الجلسة ثم المعلمات في كود Java ، ولكن يمكننا أن نأخذه من مكدس القيمة. ما سبق هو طريقة الحصول على البيانات من مكدس القيمة.
2.3 الحكم تسجيل الدخول من طبقة الخدمة
طبقة الخدمة هي بشكل أساسي طريقة تسجيل الدخول المستخدمة في الإجراء أعلاه ، والتنفيذ بسيط نسبيًا ، على النحو التالي:
// UsperService Interface Interface Interface Interface Expresservice يمتد Baseservice <Sether> {// يقوم المستخدم بتسجيل الدخول وإرجاع تسجيل الدخول إلى المستخدم العام (مستخدم المستخدم) ؛ } // UsperServiceImpl ApplicationsTervice ("userservice) public class orperviceImpl يمتد BaseserviceImpl <Sether> يبرز المستخدمين {Override public user login (المستخدم) إرجاع (المستخدم) getSession (). }}حسنًا ، لذلك نستخدم المرشحات لإدراك الحكم والقفز لتسجيل الدخول إلى المستخدم. بعد تسجيل الدخول ، يمكننا القفز إلى صفحة تأكيد الطلب. التأثير على النحو التالي:
تم الانتهاء من اختبار العملية بأكملها والوظيفة طبيعية. في الواقع ، يمكننا تحسينه أكثر من ذلك بقليل. يجب أن نصدر حكم تسجيل الدخول قبل إضافته إلى عربة التسوق. وهذا يعني أن صفحة عربة التسوق موجودة بالفعل في حالة تسجيل الدخول ، وهنا صفحة تأكيد الطلب لتحديد تسجيل الدخول. ومع ذلك ، إذا أصدرنا أحكامًا قبل صفحة عربة التسوق ، فسيكون من الصعب علينا استخدام المرشح. يتعين علينا استخدام المعترض ، لأن طلب الإجراء ليس صفحة عادية عند القفز إلى صفحة عربة التسوق. عند طلب إجراء ، يتعين علينا استخدام المعترض لاعتراضه. دعونا نحسن هذا لاحقًا. الآن سنقوم بتنفيذ الوظائف هنا بشكل أساسي. حسنًا ، يتم الحكم على تسجيل الدخول والقفز.
العنوان الأصلي: http://blog.csdn.net/eson_15/article/details/51425010
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.