تحية للجميع.
هذه هي المقالة الخامسة في سلسلة من المقالات التدريبية التي تحمل شهادة Spring Professional.
اسمحوا لي أن أذكرك بأن هذه المقالات هي إجابات لأسئلة من الدليل الرسمي من Pivotal استعدادًا لإصدار الشهادات.

MVC هو اختصار لنمط خاص. ما هو هذا النمط ولماذا؟MVC هو قالب خاص. يقسم البرنامج إلى 3 أنواع من المكونات:
- النموذج - النموذج مسؤول عن تخزين البيانات.
- عرض - هي المسؤولة عن إخراج البيانات على الواجهة الأمامية.
- وحدة التحكم - هي المسؤولة عن تبادل البيانات مع الرأي. يعمل مع النماذج.

ما هو DispatcherServlet وأين يتم استخدامه؟هذا هو واحد من الأجزاء الرئيسية في MVC لتبادل البيانات. هذا هو servlet الرئيسي الذي يوزع الطلبات بين servlets العادية.
- يتلقى الطلبات ويرسلها إلى معالجات المسجلين.
- يعالج طرق العرض عن طريق مطابقة أسمائهم مع كائنات ViewResolver
- مقابض ألقيت استثناءات

ما هي دورة حياة الطلب؟- ويأتي الطلب في DispatcherServlet
- يرسل DispatcherServlet طلبًا إلى إحدى وحدات التحكم بناءً على عنوان URL من الطلب
- تقوم وحدة التحكم بمعالجة الطلب ، وتفويض تنفيذ منطق الأعمال إلى طبقة العمل (عادة ما تكون هذه فئات مع تعليق توضيحي على
@Service
) ، وتقوم بإنشاء نموذج مع البيانات ، والذي يرسله مرة أخرى إلى DispatcherServlet - ترسل DispatcherServlet النموذج إلى المقدمة للعرض ، استنادًا إلى واجهة ViewResolver (المزيد حول هذا أدناه)
كيف يتم إنشاء DispatcherServlet؟يتم إنشاء DS قبل إنشاء ApplicationContext.
بدءًا من Spring 3.2 ، يتم استخدام تطبيق لواجهة WebApplicationInitializer تسمى AbstractAnnotationConfigDispatcherServletInitialize.
AbstractAnnotationConfigDispatcherServletInitializer ينشئ كل من DispatcherServlet و ContextLoaderListener.
هناك طريقتان لتكوين DS:
- من خلال تحديد الخصائص الخاصة في web.xml
- التغلب على الخلاصةالملاحظاتكونفيغديسباتشررسيرفيت إنيتاليزر
ما هو WebApplicationContext؟ ما النطاقات الإضافية التي يجلبها؟هذا هو سياق خاص لتطبيق الويب.
يحتوي على جميع ميزات ApplicationConext العادية (لأنه يرث منه) ، ولكن يحتوي أيضًا على أساليب API Servlet القياسية.
ملاحظة: النطاق هو النطاق.
لماذا استخدام نطاق الجلسة؟الحبة التي تم تحديد نطاق الجلسة هي الحبة الموجودة أثناء الجلسة. يمكن استخدامه عند إنشاء سلة في متجر إلكتروني ، إلخ.
ما هو النطاق الافتراضي في MVC؟تماما كما هو الحال في الربيع دون MVC - المفردة.
لماذا استخدام التعليق التوضيحيController؟يتم استخدام شرح وحدة التحكم لتسجيل معالجات طلب http. هذا تعليق توضيحي على مستوى الفئة يحتوي على تعليق توضيحي مكون . تشبه فئة وحدة التحكم POJO العادية ، مع أساليب المعالج وشروحه.
كيف يتم تعيين الطلبات الواردة إلى أساليب المعالج؟- DispatcherServlet يتلقى طلب
- DS يحتوي على قائمة الفئات التي تطبق واجهة
HandlerMapping
- يجد المعالج الطريقة هناك ويرسل طلبًا إليها في فئة وحدة التحكم
- طريقة معالج تنفيذ الطلب
أخبرنا عن التعليق التوضيحيRequestMappingيستخدم هذا التعليق التوضيحي بشكل أساسي لتحديد URI لفئة تحكم. سابقًا ، تم استخدامه بواسطة طرق الفصل للإشارة إلى URI ، وطريقة http ، ونوع البيانات المرسلة ، إلخ. في الإصدارات الأحدث من Spring ، تم استبداله بتعليقاتGetMapping وPostMapping وما إلى ذلك. الآن يتم استخدامه فقط للإشارة إلى URI إلى فئة وحدة التحكم.
ما هي التعليقات التوضيحيةGetMapping وPostMapping وDeleteMapping وغيرها؟هذه تعليقات توضيحية أضيق لتعيين أساليب http.
@GetMapping
- الحصول على طلبات الحصول على مقابض@PostMapping
- يعالج طلبات النشر@DeleteMapping
- مقابض حذف الطلبات@PutMapping
- وضع مقابض الطلبات@PatchMapping
- يعالج طلبات التصحيح
كل شيء مكتوب أدناه هو أيضا سمة من الشروح الأخرى.
AnnotationGetMapping هو مجرد تعليق توضيحي يحتوي على RequestMapping (الطريقة = RequestMethod.GET) .
كما يسمح لك بضبط طريقة المعالج.
المعلمات الخاصة به (يتم تحويلها إلى معلمات مماثلةRequestMapping):
لماذا استخدام التعليق التوضيحيRequestParam؟يتم استخدام هذا التعليق التوضيحي حتى تتمكن أساليب المعالج من الحصول على معلمات من طلب http.
طلب مع المعلمات: http://localhost:8080/getByName/name=Ivan
.
الكود التالي سوف يضع السلسلة Ivan
في name
المتغير.
@GetMapping("getByName") public User getUserByName(@RequestParam("name") String name) {
لماذا استخدام التعليق التوضيحيPathVariable؟يحصل هذا التعليق التوضيحي على جزء محدد من URI.
URI: http://localhost:8080/getById/23
سيضع الكود التالي 23
في متغير المتغير.
@GetMapping("getById/_{id}_") public User getUserById(@PathVariable("id") String id) {
ما المعلمات يمكن أن تقبل طرق معالج؟يمكن أن تستخدم الأساليب الموجودة في فئة وحدة التحكم بعض أنواع الكائنات كوسائط مقبولة. ثم سوف الربيع تنفيذها تلقائيا. على سبيل المثال ، كائن HttpSession المطلوب ، الأمان ، إلخ.
@GetMapping public User getUserById(HttpSession session) {
ما الأشياء التي يمكن استخدامها (الإنجليزية) ما هي التعليقات التوضيحية الأخرى المتاحة للاستخدام بجوار معلمات الطريقة؟@MatrixVariable
- يشير إلى ضرورة ربط المعلمة بزوج اسم القيمة من URI.@RequestHeader
- يشير إلى ضرورة ربط المعلمة برأس طلب الويب.@CookieValue
- يشير إلى أن المعلمة يجب أن ترتبط بملفات تعريف الارتباط.
يمكن تعريف المعلمة كنوع ملف تعريف الارتباط أو كنوع من قيمة ملف تعريف الارتباط (سلسلة ، int ، إلخ).@ModelAttribute
- يشير إلى أن المعلمة مرتبطة @ModelAttribute
طراز مسمى متاحة للعرض.@SessionAtribute
- يشير إلى أن المعلمة مرتبطة @SessionAtribute
من الجلسة.
ما هو التعليق التوضيحيRequestBody؟يتم استخدامه للإشارة إلى أن الطريقة لا تعمل مع النماذج ، ولكن مع البيانات. أي أنه يرسل JSON و XML والنص ، إلخ. عادةً ما يتم استخدامه ضمنيًا في خدمات REST.
ماذا يمكن أن تعود طريقة تحكم؟أنواع الأشياء المرتجعة ووصفها (الإنجليزية) ما هي طريقة العرض؟يستخدم طريقة العرض لعرض بيانات التطبيق للمستخدم.
يدعم Spring MVC العديد من موفري العرض (يطلق عليهم محركات القوالب) - JSP ، JSF ، Thymeleaf ، إلخ.
تحول واجهة العرض الكائنات إلى servlets العادية.
كيف يتم تحديد طريقة العرض في مرحلة العرض؟ كيف يتم عرض عرض؟يحتوي DispatcherServlet على قائمة من "معيني الخرائط" الخاصين بالعرض ، والتي ، بناءً على تكوين servlet ، ستحتوي على صناديق تقوم بتطبيق واجهة ViewResolver .
عرض عملية العرض:
- وحدة التحكم بإرجاع طريقة عرض الاسم في DispactherServlet
- اسم الخرائط إلى أسماء في
ViewResolver
- إذا تم
ViewResolver
مناسب ، فسوف يُرجع العرض الذي يجب استخدامه عند التقديم. - DS يمر النموذج مع البيانات في طريقة العرض ويعرض الإخراج (صفحة HTML)
ما هو النموذج؟هذا كائن فئة يقوم بتطبيق واجهة الطراز ويمثل مجموعة من أزواج قيمة المفتاح.
يتم استخدام محتوى النموذج لعرض البيانات في طريقة العرض.
على سبيل المثال ، إذا عرض يعرض معلومات حول كائن Customer
، فيمكنه الرجوع إلى مفاتيح الطراز ، على سبيل المثال customerName
، customerPhone
، والحصول على قيم لهذه المفاتيح.
يمكن أن تحتوي كائنات القيمة من النموذج أيضًا على منطق الأعمال.