مقدمة
واجهت مثل هذه المشكلة في عملي في اليوم السابق بالأمس. أنا غلاف pojo في معلمات الواجهة. هذا شائع جدا. عندما يكون هناك العديد من المعلمات ، فإن التفكير بالقصور الذاتي هو تغليف pojo. ثم هناك العديد من التعليقات التوضيحية التي يجب إضافتها قبل المعلمات ، مثل: requestparam ، requestbody ، @pathvariable ، إلخ. فهمي مثل هذا. بادئ ذي بدء ، سأذكر أنني لم أقرأ رمز المصدر مطلقًا ، لكنني أفهمه بناءً على الخبرة. يحاول @REQUESTPARAM استخدام طلبات الحصول على طلبات. المعلمات موجودة على عنوان URL في رأس HTTP. ما هو المكان المحدد؟ فيما يلي في شكل مفتاح = القيمة. ينطبق REQUESTBODY على معلمات طلب النشر في HTTP Body. @pathvariable هي طريقة الكتابة بشكل خاص. ضع المعلمات على عنوان URL بدون علامات استفهام لتمييز ما إذا كانت معلمة أو عنوان URL. ربما لست دقيقًا جدًا لقول هذا. لكني عادة ما أستخدمه بهذه الطريقة. في الوقت نفسه ، هناك أيضًا طريقة شائعة لكتابة المعلمات ، والتي تتمثل في عدم إضافة شرح قبل المعلمات. على سبيل المثال ، إذا كانت المعلمات أنواعًا أساسية ، فلا تقم بإضافة requestparam ، وإذا كانت المعلمات فاصوليا ، فلا تضيف requestbody ، فيمكن أيضًا تحليلها بواسطة springMVC. بعد أن شوهد قائد الفريق واجهتي ، طلب مني إزالة @requestbody ، لأنه بعد إضافة هذا إلى الواجهة الخلفية ، يحتاج طلب Ajax على الواجهة الأمامية إلى عرض نوع محتوى البيان: "التطبيق/JSON" يتم تحليله بواسطة SPRINGMVC ، والذي يبدو أنه لم يكن ضروريًا. على الرغم من أنني قمت بإزالته وفقًا لمتطلباته ، أعتقد أنه يتعين علي معرفة ما يجري ، ما هو الفرق بين إضافة أو عدم الإضافة ، ما هو تأثيره على الأداء ، أو أفضل السيناريوهات المعمول بها لكل منها. بالإضافة إلى Baidu ، يجب أن أسأل أيضًا الماجستير.
عملية تحليل معلمة واجهة SPRING MVC
أولاً ، درست ببطء رمز المصدر من خلال تصحيح الأخطاء. دون إضافة أي تعليقات توضيحية:
أثناء عملية التطوير ، لا تتم إضافة الاستهلاك والمنتجات بشكل عام. يجب إضافته وفقًا لذلك ، لأنه يمكن أن يقلل من نطاق البحث في الواجهة. هذا عرض تجريبي بسيط ، أحتاجه فقط للتحقق من عملية استلام SPRINGMVC.
أولاً ، بعد بدء تشغيل Tomcat ، يتم تشغيل مسارات الطلب في جميع فئات وحدة التحكم @requestmapping ويتم تحميل حبة التحكم في حاوية الزنبرك. بعد أن يأتي طلب الصفحة ، تم العثور على Servatcherservlet Servlet. بعد أن يأتي الطلب إلى Servlet ، يعلم الجميع أن هناك طريقتان تهيئة لـ Servlet. أحدهما هو التحميل على الفور ، والآخر هو التحميل المتأخر. ومع ذلك ، بغض النظر عن ماذا ، تسمى طريقة init مرة واحدة فقط ، ثم سيتم استدعاء طريقة الخدمة مباشرة في كل مرة. عندما يتم إغلاق Tomcat ، تنتهي طريقة تدمير servlet. لذلك ، يجب أن يرث تغليف SPRINGMVC للخدمة طريقة الخدمة ، كما أن SPATHERSERSEVLET هي طريقة DODISPATCH. في هذه الطريقة ، يتم الحصول على مسار الطلب باستخدام كائن httpservletrequest ، والذي هو /notjson ، ثم قارنه مع جميع عناوين URL في الحاوية للحصول على الواجهة أخيرًا في وحدة التحكم. بعد العثور على الواجهة ، ستعرف بشكل طبيعي معلمات الواجهة. أنا هنا عرض. للراحة والبساطة ، لا يوجد سوى معلمتين في العرض ، وهما الاثنان في طلب AJAX أدناه.
سوف SPRINGMVC الحصول على الخصائص في POJO من خلال التفكير. في هذه العملية ، سيعلن SpringMVC أولاً صفيفًا. حجم هذه الصفيف هو عدد المعلمات. لدي واحد فقط هنا. في الواقع ، أعتقد أن الكثير من الناس سيواجهون نفس المشكلة مثلي. عندما توجد معلمات الفاصوليا والأنواع الأساسية في نفس الوقت ، كيف ستحلل SPRINGMVC هذا؟ لقد واجهت هذا عدة مرات. دون النظر إلى الكود المصدري ، يتم تغليف الأنواع الأساسية أيضًا في الفول ، وسيقوم الواجهة الأمامية أيضًا بكتابة السمات في كائن. بالطبع أعتقد أن هذا شيء لا يمكن للجميع قبوله. نأمل جميعًا في معرفة كيفية تحليله ، حتى نتمكن من التعبئة معها في ذلك الوقت. فيما يلي عملية الانعكاس. بعد التفكير في Pojo ، أحصل على الخصائص والأساليب في الداخل. بعد تحليل المعلمات ، قم بتعيين القيم للمعلمات. ربما هذا هو المكان الأكثر أهمية. كيف يتم تعيينه بالضبط؟
من هذه الطريقة ، تعلمت أن الاسم هو العرض ، وهو الحرف الصغيرة من اسم فئة Pojo. لا أعرف لماذا قام SpringMVC بهذه المعالجة (انظر لاحقًا). السمة هي كائن مع العمر والاسم. لكن كل شيء فارغ في هذا الوقت. WebDataBinding عبارة عن قاعدة بيانات خاصة تستخدم لربط البيانات من معلمات طلب الويب إلى كائنات Javabean. متابعة طريقة BindRequestParameters ، ستجد مكانًا مألوفًا جدًا عند اتباعه هو الشكل التالي. يتم الحصول على اسم المعلمة باستخدام String[] values = request.getParameterValues(paramName); هذه هي طريقة الحصول على معلمة Servlet ، حتى تتمكن من معرفة اسم السمة وقيمة السمة للمعلمة المطلوبة.
بعد ذلك ، من المتصور أن يتم استبدال اسم المعلمة هذا باسم السمة للفول ، ويتم استبدال عمر اسم المعلمة بعمر اسم السمة. اتبع هذا المكان ، فإن Oragina هو زوج قيمة اسم الخاصية التي تم الحصول عليها بواسطة Serclet أعلاه ، وتحويل هذه الخريطة إلى PropertyValue هنا. (PropertyValue هو كائن يحمل معلومات وقيم خاصية حبة واحدة. باستخدام كائن هنا بدلاً من مجرد تخزين جميع الخصائص في الخريطة التي يكتبها اسم الخاصية يسمح بمزيد من المرونة والقدرة على التعامل مع الخصائص المفهرسة ، إلخ. PropertyValue كائنات.
عند التحويل ، ستتجاهل سمات غير معروفة
تعرض الصورة أعلاه طريقة التحويل المحددة ، والتي تكون طويلة نسبيًا. الجملة التالية تعين مباشرة القيمة للفول. من هذه العملية. طالما أن خصائص كائن JSON الأمامي هي نفس خصائص الفاصوليا في الواجهة الخلفية ، لا تكتب AJAX نوع المحتوى ، وتستخدم application/x-www-form-urlencoded; charset=UTF-8 ، يمكنك تعيين القيم مباشرة.
لخص
ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون لمحتوى هذه المقالة قيمة مرجعية معينة لدراسة أو عمل الجميع. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل. شكرا لك على دعمك إلى wulin.com.