موضوع قفزة بسيط
أنا شخصياً أوصي بممارسة عملية البناء مرة أخرى. إذا كنت تشعر بالضيق ، فيمكنك نسخ المشروع السابق مباشرة ، ولكن تحتاج إلى تعديل القليل من المعلومات في pom.xml.
<rouckid> com.hanpang.springmvc </rougeid> <StifactId> springmvc-demo01 </artifactid> <splection> 0.0.1-snapshot </version>
1. فئات التكوين الأساسية وفئات التحميل
package com.hanpang.config ؛ import org.springframework.context.annotation.componentscan ؛ استيراد org.springframework.context.annotation.configuration ؛ استيراد org.springframework.web.servlet.config.annotation.enableWebmvc ؛@configuration@enableWebmvc@componentscan (basePackages = "com.hanpang.
package com.hanpang.config ؛ استيراد org.springframework.web.servlet.support.abstractannotationConfigDispatcherservletInitializer ؛ public class webinitializer extressingannotationconfigdiSpatcherservletializer {Override protected <؟ {WebConfig.class} ؛ } فئة محمية Override <؟> [] getServletConfigClasses () {return null ؛ } Override المحمي السلسلة [] getSerVletMappings () {return new string [] {"/"} ؛ }}2. طريقة قفزة المرحلة javaweb
يرجى ملاحظة المعلمات الرسمية في طريقة springMVC ، ويكمل الإطار عملية التثبيت بالنسبة لنا.
package com.hanpang.web ؛ استيراد java.io.ioException ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ استيراد org.springframework.sterepypeoTroll ؛ org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.servlet.modelandview ؛ @controller // أخبرها بأنها وحدة تحكم عامة demo01controller طلب ، استجابة httpservletresponse) يلقي servleTexception ، ioException {system.out.println ("المعلمات الرسمية يتم تأليفها بشكل افتراضي") ؛ request.getRequestDispatcher ("/web-inf/jsp/demo01.jsp"). العودة لاغية. } @requestmapping (path = "/test02") نموذج publicandview طريقة تقليدية jump_redirect (طلب httpservletrequest ، استجابة httpservletresponse) يلقي ioException {system.out.println ("المعلمات الرسمية معروفة بواسطة default") ؛ استجابة. العودة لاغية. }} ملاحظة: لم نعد نستخدم هذه الطريقة تقريبًا ، بل مجرد عرض ومراجعة بسيطة ، على الأقل يمكننا استخدام هذه الطريقة للحصول على واجهة برمجة تطبيقات Servlet !!!
3. أظهر كيف تقفز وحدة التحكم إلى JSP
في نهاية المثال ، سنضيف محلل JSP View. في البداية ، سنظل نتبع الطريقة التقليدية ولدينا عملية خطوة بخطوة.
package com.hanpang.web ؛ استيراد java.io.ioException ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ استيراد org.springframework.sterepypeoTroll ؛ org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.servlet.modelandview ؛ @controller // أخبرها بأنها وحدة تحكم عامة من الطبقة العامة ، stidevious ، = new ModelAndView () ؛ mav.setViewName ("/web-inf/jsp/demo01.jsp") ؛ إرجاع ماف. } @requestmapping (path = "/test04") publicandview قم بتعيين طريقة إعادة التوجيه () {modelandview mav = new ModelAndView () ؛ Mav.SetViewName ("Redirect: /view/result01.jsp") ؛ // أو //mav.setViewName (urlbasedViewResolver.redirect_url_prefix+"/view/result01.jsp ") ؛ إرجاع ماف. }} يبدو الأمر وكأنه طريقة مرحلة الويب Java ، ولكن يتم تعيين بادئة بسيطة أثناء إعادة التوجيه.
4. إظهار كيف تقفز وحدة التحكم إلى وحدة التحكم
على غرار الدعوة من servlet إلى آخر
package com.hanpang.web ؛ استيراد java.io.ioException ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ استيراد org.springframework.sterepypeoTroll ؛ org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.servlet.modelandview ؛ @controller // أخبرها بأنها نموذجية من الطبقة العامة demo01controller ModelAndView () ؛ mav.setViewName ("/test03") ؛ إرجاع ماف. } @requestmapping (path = "/test06") set modelandview set redirection () {modelandview mav = new modelandview () ؛ Mav.SetViewName ("Redirect:/test04") ؛ إرجاع ماف. }} 5. أضف JSP View Parser
خلال العرض التوضيحي أعلاه ، وجدنا أن setViewName في ModelandView يستخدم لإكمال القفزة. البيانات التي تم تمريرها هنا هي سلسلة ، لكن طريقة المعالجة مختلفة. عندما يتم إعادة توجيه مسار القفز: ، تكون طريقة المعالجة مختلفة.
أيضًا ، إذا كان لدينا سلاسل متعددة مماثلة لـ /web-inf/jsp/demo01.jsp ، نجد أن هناك العديد من الأجزاء العامة. يوفر لنا springMVC فئة متخصصة في معالجة طلبات وحدة التحكم في إعادة توجيه صفحات JSP.
يرجى ملاحظة أن الوصف الخاص بي: إذا وجدت أن السلسلة التي تم تمريرها لا تحتوي على أي معرف بادئة ، ثم افتراضيًا ، استخدم محلل العرض JSP للتكوين للتعامل معها وإكمال عملية إعادة توجيه الطلب
ملاحظة: تكوين فئة التكوين الأساسية
حزمة com.hanpang.config ؛ استيراد org.springframework.context.annotation.bean ؛ استيراد org.springframework.context.annotation.componentscan ؛ استيراد org.springframework.context.annotation org.springframework.web.servlet.config.annotation.enableWebmvc ؛ استيراد org.springframework.web.servlet.view.internalResourceViewResolver ؛ استيراد org.springframework.web.servlet.view.jstlview ؛@configuration@enableWebmvc@componentscan (basePackages = "com.hanpang. internalResourceViewResolver () ؛ jspviewresolver.setViewClass (jstlview.class) ؛ // springmvc يدعم JSPViewResolver.setPrefix (/web-inf/") ؛ JSpViewResolver.SetSuffix (". JSP") ؛ إرجاع JSpViewResolver ؛ }} ** ملاحظة: ** يرجى الانتباه إلى التعليق التوضيحي على الطريقة bean
الطريقة تعادل الكود في XML على النحو التالي
<bean id = "jspresourceViewResolver"> <property name = "prefix" value = "/web-inf/"/> <property name = "fudge" value = ".
تحسين رمز JSP JSP وحدة التحكم
يمكن لمحلل العرض هذا إعادة توجيه طلبات JSP فقط وهو غير صالح لإعادة التوجيه. يرجى الانتباه إلى محتوى التعليق من الرمز
requestmapping (path = "/test03") publicandview بشكل افتراضي ، يُطلب من إعادة توجيه () {modelandview mav = new modelandview () ؛ //mav.setViewName("/web-inf/jsp/demo01.jsp ") ؛ // متقدم: بشكل افتراضي ، سيتم التعامل معه باستخدام محلل JSP View ، // بادئة+"JSP/DEMO01"+FASEIX => /WEB-INF/JSP/DEMO01.JSP MAV.SetViewName ("JSP/DEMO01") ؛ // وجدت أن السلسلة لا تحتوي على تعديل بادئة MAV ؛ } @requestmapping (path = "/test04") publicandview قم بتعيين طريقة إعادة التوجيه () {modelandview mav = new ModelAndView () ؛ . إرجاع ماف. } تحسين رمز وحدة تحكم القفز
requestmapping (path = "/test05") publicandview قم بتعيين مباشرة مسار التعيين () {modelandview mav = new modelandview () ؛ mav.setViewName ("/test03") ؛ إرجاع mav ؛}بعد تكوين محلل JSP View ، اختبر الرمز أعلاه مرة أخرى ، وشاهد نتائج الوصول مع المفاجأة.
يتوافق مع ما قلناه قبل "/test03" هي سلسلة سيتم معالجتها افتراضيًا باستخدام محلل JSP View. فكيف تحسنه؟
يمكنك تعيين البادئة "إلى الأمام:" ، ويتم تحسين الرمز على النحو التالي:
requestmapping (path = "/test05") publicandview قم بتعيين مباشرة مسار التعيين () {modelandview mav = new modelandview () ؛ mav.setViewName ("forward:/test03") ؛ // أو //mav.setViewName (urlBazedViewResolver.forward_url_prefix+"/test03 ") ؛ إرجاع mav ؛} عندما يتم العثور على السلسلة ليتم تعديلها مع الأمام: ، يتغير حالة المعالجة للتحويل من طلب وحدة التحكم إلى وحدة تحكم أخرى. إذا تم تنفيذ إعادة التوجيه ، فإن الكود كما يلي:
requestmapping (path = "/test06") set modelandview set redirect () {modelandview mav = new modelandview () ؛ Mav.SetViewName ("Redirect:/test04") ؛ إرجاع mav ؛} 6. internalResourceViewResolver Appendix
InternalResourceViewResolver: إنها فئة فرعية من urlbasedviewResolver ، لذلك فهي تدعم جميع الميزات التي تدعمها urlbasedviewresolver.
في التطبيقات العملية ، يعد InternalResourceViewResolver أيضًا أكثر محلول العرض استخدامًا على نطاق واسع. إذن ما هي الميزات الفريدة لـ InternalResourceViewResolver؟
من وجهة نظر حرفية ، يمكننا تفسير internalResourceViewResolver كخيار عرض موارد داخلي. هذه ميزة من internalResourceViewResolver.
ستقوم InternalResourceViewResolver بحل أسماء العرض التي تم إرجاعها إلى كائنات InternalResourceView. ستقوم InternalResourceView بتخزين سمات النموذج التي يتم إرجاعها بواسطة طريقة معالج وحدة التحكم في سمات الطلب المقابل ، ثم إعادة توجيه الطلب إلى الأمام إلى عنوان URL المستهدف على جانب الخادم من خلال requestDispatcher.
على سبيل المثال ، في internalResourceViewResolver ، يتم تعريف البادئة =/web-inf/، factix = .jsp في internalResourceViewResolver ، ثم يتم اختبار اسم العرض الذي تم إرجاعه بواسطة طريقة معالج وحدة التحكم المطلوبة. في هذا الوقت ، ستقوم InternalResourceViewResolver بتحليل الاختبار في كائن InternalResourceView ، وقم أولاً بتخزين سمات النموذج التي تم إرجاعها في سمة httpservletrequest المقابلة ، ثم استخدم requestDispatcher لإعادة توجيه الطلب إلى /web-inf/test.jsp على جانب الخادم. هذه ميزة مهمة للغاية لـ InternalResourceViewResolver. نعلم جميعًا أنه لا يمكن طلب المحتوى المخزّن في / web-inf / مباشرة من خلال طلب الطلب. لأسباب أمان ، عادةً ما نضع ملف JSP في دليل الويب الخاص بـ Web-Inf ، والطريقة التي يقفز بها InternalResourceView على جانب الخادم يمكنها حل هذه المشكلة بشكل جيد. فيما يلي تعريف داخلي ResourceViewResolver. وفقًا لهذا التعريف ، عندما يتم اختبار اسم العرض المنطقي الذي تم إرجاعه ، فإن InternalResourceViewResolver ستضيف بادئة ومناسكا محددة له ، وتشكيل "/web-inf/test.jsp" ، ثم استخدامه كعنوان داخلي InternalResourceView لإنشاء كائن جديد internalResourceView.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.