تقدم هذه المقالة أمثلة لإعادة توجيه التوجيه والاعتراض في SpringMVC. تتم مشاركتها معك ، على النحو التالي:
المعلمات المتغيرة عند تصميم الأساليب ، استخدم数据类型... لإعلان أنواع المعلمات ، على سبيل المثال: public static void function(int... numbers)
عند تطبيق هيئة الطريقة ، تتم معالجة المعلمات المتغيرة كصفيف
اختبار الفئة العامة {public static void main (string [] args) {system.out.println (test.sum (1،2،3)) ؛ system.out.println (test.sum (1،2،3،4،54)) ؛ } static int sum (int ... الأرقام) {int sum = 0 ؛ لـ (int i = 0 ؛ i <number.length ؛ i ++) {sum+= number [i] ؛ } إرجاع مجموع ؛ }}ملاحظة: في كل طريقة ، يُسمح فقط بمعلمة متغيرة واحدة فقط على الأكثر ، وإذا كانت هناك معلمة متغيرة ، فيجب أن تكون المعلمة الأخيرة.
إعادة توجيه وإعادة توجيه
في طريقة التعامل مع الطلبات داخل وحدة التحكم ، يتم إعادة توجيه الطريقة الافتراضية لإرجاع السلسلة. القيمة المعاد توجيهها هي اسم مكون العرض ، مثل الإرجاع "تسجيل الدخول" ، والذي سيحصل بشكل أساسي على الصفحة التي يتم عرضها أخيرًا استنادًا إلى Resolver View (ViewResolver). بناء جملة إعادة التوجيه: يمثل المسار إعادة التوجيه. المحتوى على الجانب الأيمن من إعادة التوجيه: هو المسار. يستخدم هذا المسار عادة مسارًا نسبيًا ، ويتم الرجوع إليه بناءً على المسار في شريط العناوين للعميل الحالي كمعيار. على سبيل المثال ، العنوان الحالي هو: http: // localhost: 8080/project/user/reg.do ، ثم إعادة "إعادة التوجيه: login.do" ، ثم إعادة توجيه إلى http: // localhost: 8080/project/user/login.do ، إذا قمت بإعادة "/main/index.do" http: // localhost: 8080/project/main/index.do
إلى الأمام:
الطريقة الافتراضية ، ولكن يمكنك أيضًا استخدام الإرجاع "Forward: Login"
يجب أن يكون العرض الذي تم إرجاعه طريقة عرض ، سيتم إعادة توجيهها إلى العرض المحدد بعد المرور عبر محلل العرض.
إعادة التوجيه:
إعادة التوجيه: العودة "إعادة التوجيه: login.do"
إرجاع مسار إلى طريقة وحدة التحكم ، وليس طريقة عرض. هذا لن يمر عبر محلل العرض ، ولكنه سيقفز مباشرة.
مثال
requestmapping (value = "/handle_reg.do" ، method = requestMethod.post) السلسلة العامة handlereg (مستخدم المستخدم ، خريطة modelmap) {try {uservice.reg (user) ؛ System.out.println ("مسجل بنجاح!") ؛ إرجاع "إعادة التوجيه: login.do" ؛ // إعادة التوجيه إلى طريقة التحكم في login.do ، login.do يتوافق مع login.jsp} catch (usernameconflictexception e) {system.out.println (e.getMessage ()) ؛ map.put ("errormessage" ، e.getMessage ()) ؛ إرجاع "خطأ" ؛ }} @requestmapping (value = "login.do") السلسلة العامة handlelogin () {return "login" ؛ }اعتراض
المفاهيم الأساسية
باستخدام اعتراض
فئة اعتراض مخصصة
قم بإنشاء فئة Intercept (DemoInterceptor) لتنفيذ واجهة المعالج
فئة عامة ، فإن DemoInterceptorImplements HandlerInterceptor { /*** دعا قبل تنفيذ المعالج* request request httpservletrequest كائن ، والذي يمكنه الحصول على معلمات الطلب ، إلخ. إذا تم إرجاع TRUE ، فسيتم تنفيذ التقاطعات والمعالجات اللاحقة */ Public Boolean Prehandle (طلب httpservletrequest ، استجابة httpservletresponse ، معالج الكائن) استثناء {system.out.println ("تنفيذ prehandler من demointerceptor") ؛ العودة صحيح. } / *** اتصل بعد تنفيذ المعالج ، والاتصال قبل القفز إلى العرض المحدد* request request httpservletrequest كائن* param استجابة httpservletresponse كائن* param استجابة httpservletrespons POSTHANDLE (طلب httpservletrequest ، httpservletresponse ، معالج الكائنات ، modelandview modelandview) يلقي الاستثناء { /*** 1. يمكنك تصميم المنطق الخاص بك ، على سبيل المثال ، في بعض الحالات ، إرجاع خطأ ، إرجاع حقيقي. System.out.println ("Handler:"+Handler) ؛ System.out.println ("تنفيذ posthandler للمقبض التجريبي") ؛ // قم بتعيين اسم العرض ، ثم بعد اكتمال التنفيذ ، ستقفز إلى صفحة INDEX.JSP // modelandview.setViewName ("index") ؛ } /** * call * بعد اكتمال معالجة الطلبات ، فإن public perix aftercompletion (طلب httpservletrequest ، استجابة httpservletresponse ، معالج الكائن ، استثناء ex) يلقي الاستثناء {system.out.println ("تنفيذ demointerceptor's بعد الكومبليت") ؛ }}تكوين في ملف تكوين springMVC
إعدادات
يجب تكوينه بالترتيب أعلاه ، وإلا سيتم الإبلاغ عن خطأ
<!-تكوين التقاطع ، حيث يمكن تكوين اعتراضات متعددة-> <mvc: interceptors> <mvc: interceptor> <!-تكوين مسار التقاطع ، واعتراض جميع مجموعات طريقة المعالج تحت/المستخدم ، على سبيل المثال: http: // localhost: 8080/springmvc/user/login. <mvc: mappingpath = "/user/*"/> <!-تكوين طريقة وحدة التحكم التي لا يتم اعتراضها بواسطة المعترض ، هذا تكوين اختياري ، مثل http: // localhost: 8080/springmvc/user/index.do ، لن يتم اعتراضه-> <mv: استبعاد mappatpath = " <mvc: isscpled-mapppath = "/user/login.do"/> <!-قم بتكوين حبة التقاطع ، وتحديد اسم الفئة الكاملة-> <beanclass = "cn.tedu.spring.Interceptor.demoInterceptor"> </mvc: interceptor> </mvc: interceptors>
طريقة التنفيذ
prehandle boolean العامة (طلب httpservletrequest ، استجابة httpservletresponse ، معالج الكائن)
posthandle poulder poulder (طلب httpservletrequest ، استجابة httpservletresponse ، معالج الكائنات ، modelandview modelandview)
public void eftercompletion (طلب httpservletrequest ، استجابة httpservletresponse ، معالج الكائن ، استثناء EX)
فحص تسجيل الدخول التجريبي
اعتراض مخصص (تسجيل الدخول)
تتم كتابة العملية المحددة بوضوح تام في طريقة prehandler
يتم استدعاء فئة Public LoginInterCtiveTorImptorImplements { / * * * قبل تنفيذ المعالج (غير javadoc) * 1. احصل على الجلسة * 2. اقرأ قيمة UID في الجلسة * إذا كانت فارغة ، فهذا يعني أنه لا يوجد تسجيل دخول ، ثم إعادة توجيه مباشرة إلى واجهة تسجيل الدخول والعودة الخاطئة في نفس الوقت. ليست هناك حاجة لتنفيذ العملية اللاحقة* إذا لم تكن فارغة ، فهذا يعني أنه قد تم تسجيل الدخول ، ثم يعود مباشرة إلى صحيح والاستمرار في تنفيذ المعترض اللاحق أو المعالج*/ Public Boolean prehandle (httpservletrequest طلب ، httpservletresponse ، معالج الكائن) استثناء {httpsession essuress = request.TEDSSSEMONT () ؛ // الحصول على كائن الجلسة uid = session.getAttribute ("uid") ؛ // اقرأ الكائن في الجلسة // في حالة وجود UID ، يمكنك تسجيل الدخول وإكمال إذا (uid! = null) {return true ؛ // إرجاع صحيح ، إذا نجح تسجيل الدخول ، فأنت بحاجة إلى تنفيذ العملية اللاحقة} response.sendRedirect (request.getContextPath ()+"/user/login.do") ؛ // إعادة توجيه إلى واجهة تسجيل الدخول إلى عودة خطأ ؛ . {}}تكوين التقاطع في springmvc
نظرًا لأنها تقفز هنا فقط إلى مركز المستخدم وتحتاج إلى التحقق من تسجيل الدخول ، فإنه يطابق فقط user_center.do
<!-تكوين اعتراضات ، حيث يمكن تكوين أجهزة اعتراضية متعددة-> <mvc: interceptors> <mvc: interceptor> <mvc: mappingpath = "/user/user_center.do"/> <beanclass = "cn.tedu.spring.interceptor.logininterceptor">/mvc
ترتيب تنفيذ من اعتراضات متعددة
تنفيذ وفقًا للترتيب الذي تم تكوينه في ملف تكوين springmvc ، أي ترتيب اعتراضات تم تكوينه ضمن <mvc: interceptors>. إذا تم تنفيذ اعتراض على نفس المسار ، فعندئذ تم تكوينه لأول مرة
الفرق بين التقاطع والمرشح (الاختلاف الرئيسي)
لخص
يمكن استخدام المقاطعات عندما تتطلب طلبات متعددة نفس المهام أو متشابهة للغاية.
قم بتطوير اعتراض جيد ، ثم تحتاج إلى تكوينه في ملف التكوين لـ springMVC
في <MVC: Interceptors> ، إذا تم تكوين عدة <MVC: Interceptors> ، ستشكل اعتراضات متعددة سلسلة اعتراضية. إذا تم تكوين أجهزة اعتراضية متعددة ، فسوف يعترضون نفس المسار ، ثم سيتم تنفيذها بترتيب العقد المكونة.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.