1. لنبدأ بحاوية Servlet: حاوية Servlet التي يكون الجميع على دراية بها هي Tomcat. كيف تدير حاوية Servlet Servlets؟
دعنا نلقي نظرة على نموذج الحاوية في Tomcat أولاً:
من الشكل أعلاه ، يمكننا أن نرى أن حاوية Tomcat مقسمة إلى أربعة مستويات. الحاوية التي تدير Servlets حقًا هي حاوية السياق ، والسياق يتوافق مع مشروع ويب
في مستوى حاوية Tomcat ، تكون حاوية السياق عبارة عن حاوية تدير مباشرة غلاف فئة Wrapper (standardwrapper) من servlet في الحاوية ، لذا فإن كيفية تشغيل حاوية السياق ستؤثر بشكل مباشر على كيفية عمل Servlet.
هنا سأشرح فئة التغليف من servlet: StandardWrapper. هناك سؤال هنا ، لماذا يجب أن يتم لف Servlet في standardwrapper بدلاً من أن تكون كائنًا servlet مباشرة. نظرًا لأن StandardWrapper جزء من حاوية Tomcat ، فإنه يحتوي على خصائص الحاوية ، و Servlet هو معيار تطوير ويب مستقل ويجب ألا يقترن بقوة في Tomcat.
باستثناء لف servlet في standardwrapper وإضافته إلى السياق باعتباره محركًا فرعيًا ، يتم تحليل جميع خصائص web.xml الأخرى في السياق ، وبالتالي فإن حاوية السياق هي حاوية servlet التي تدير servlet حقًا. يتوافق تطبيق الويب مع حاوية سياق. يتم تحديد خصائص التكوين الخاصة بالحاوية بواسطة web.xml للتطبيق ، حتى نتمكن من فهم الدور الذي يلعبه Web.xml.
2. يصف ما يلي بإيجاز مشروع عمل Servlet:
عندما يتفاعل خادم الويب مع العميل ، فإن عملية عمل Servlet هي:
1. تقديم طلب إلى خادم الويب على العميل
2. يرسلها خادم الويب إلى Servlet بعد تلقي الطلب
3. تقوم حاوية Servlet بإنشاء كائن مثيل لهذا الغرض ويدعو الطريقة المقابلة في واجهة برمجة تطبيقات Servlet لمعالجة طلب HTTP العميل ، ثم يقوم بإرجاع نتيجة الاستجابة المعالجة إلى خادم الويب.
4. يرسل خادم الويب بنية الاستجابة المستلمة من كائن مثيل Servlet إلى العميل.
3. دورة حياة Servlet:
كما هو مبين في الشكل أعلاه ، يمكن تقسيم دورة حياة servlet إلى أربع مراحل ، وهي فئة التحميل ومرحلة الإنشاء ، ومرحلة التهيئة ، ومرحلة الخدمة ، ومرحلة تدمير المثيل. فيما يلي وصف مفصل لمهام البرمجة والاحتياطات لكل مرحلة.
1. إنشاء مثيل servlet:
بشكل افتراضي ، يتم إنشاء مثيلات Servlet عند وصول الطلب الأول وإعادة استخدامه لاحقًا. إذا كانت بعض servlets تتطلب عمليات معقدة تحتاج إلى إكمالها عند تحميل التهيئة ، مثل فتح الملفات ، وتهيئة اتصالات الشبكة ، وما إلى ذلك ، يمكنك إخطار الخادم لإنشاء مثيل Servlet عند البدء. التكوين المحدد هو كما يلي:
<Sradlet> <Sradlet-Name> Timeservlet </servlet-name> <Servlet-Class> com.allanlxf.servlet.basic.timeservlet </servlet-class> <load-on-startup> 1 </load-on-startup> </servlet>
قم بإنشاء بنية الفئة ذات الصلة لكائن Servlet:
2. التهيئة
بمجرد إنشاء مثيل Servlet ، سيقوم خادم الويب تلقائيًا بالاتصال بأسلوب init (servletConfig Config) لتهيئة Servlet. يحتوي تكوين معلمة Method على معلومات التكوين الخاصة بـ Servlet ، مثل معلمة التهيئة ، والتي يتم إنشاؤها بواسطة الخادم.
1. كيفية تكوين معلمات التهيئة من servlet؟
في علامة تعريف servlet في web.xml ، على سبيل المثال:
<Sradlet> <Srevlet-Name> Timeservlet </servlet-name> <Servlet-Class> com.allanlxf.servlet.basic.timeservlet </revlet-class> <Ing-param> <par am-name> user </param-name> <Param-value> اسم المستخدم </param-value> </IPT-PARAM> <ING-PARAM> <PARAM-NAME> Blog </arm-name> <Param-value> http: //. . . </param-value> </ith-param> </servlet>
يتم تكوين مستخدم ومدونة المعلمات التهيئة مع قيم اسم المستخدم و HTTP: //. . . ، وبهذه الطريقة ، من أجل تعديل اسم المستخدم وعنوان المدونة في المستقبل ، لا تحتاج إلى تعديل رمز Servlet ، ما عليك سوى تعديل ملف التكوين.
الثاني. كيف تقرأ معلمات التهيئة للخدمة؟
يحدد ServletConfig الطريقة التالية لقراءة معلومات معلمات التهيئة:
السلسلة العامة getInitParameter (اسم السلسلة)
المعلمة: اسم المعلمة التهيئة.
إرجاع: قيمة معلمة التهيئة ، إن لم يتم تكوينها ، تُرجع خالية.
عدد أوقات التنفيذ من طريقة iii.init (servletConfig)
يتم تنفيذ هذه الطريقة مرة واحدة خلال دورة حياة servlet.
iv.init (servletconfig) طريقة وخيط
يتم تنفيذ هذه الطريقة في بيئة واحدة ملولبة ، لذلك لا يحتاج المطورون إلى مراعاة مشكلات سلامة مؤشرات الترابط.
V.init (servletconfig) طريقة واستثناء
أثناء التنفيذ ، يمكن لهذه الطريقة رمي ServleTexception لإخطار خادم الويب بأن مثيل Servlet قد فشل في التهيئة. بمجرد إلقاء ServleTexception ، لن يقوم خادم الويب بتسليم طلب العميل إلى مثيل Servlet للمعالجة ، ولكنه سيقوم بالإبلاغ عن معلومات استثناء فشل التهيئة إلى العميل ، والتي سيتم تدميرها من الذاكرة. إذا تم تقديم طلب جديد ، فسيقوم خادم الويب بإنشاء مثيل Servlet جديد ويقوم بإجراء عملية التهيئة للمثيل الجديد.
3. الخدمة
بمجرد إنشاء مثيل Servlet وتهيئته بنجاح ، يمكن الخادم استخدام مثيل Servlet لخدمة طلب العميل وإنشاء استجابة. أثناء مرحلة الخدمة ، سيقوم خادم الويب بالاتصال بأسلوب الخدمة (ServleTRequest طلب ، استجابة ServleTResponse) للمثال. يتم إنشاء كائن الطلب وكائن الاستجابة بواسطة الخادم وتم نقله إلى مثيل Servlet. يقوم كائن الطلب بتغليف المعلومات التي يرسلها العميل إلى الخادم ، ويغلف كائن الاستجابة المعلومات التي يرسلها الخادم إلى العميل.
1. مسؤوليات طريقة الخدمة ()
طريقة الخدمة () هي الطريقة الأساسية للخدمة. يجب تنفيذ منطق عمل العميل ضمن هذه الطريقة. عملية تطوير طريقة الخدمة النموذجية هي:
تحليل طلب العميل-> تنفيذ منطق العمل-> صفحة استجابة الإخراج إلى العميل
ii.service () طريقة وخيط
من أجل تحسين الكفاءة ، تتطلب مواصفات Servlet أن يكون مثيل Servlet قادرًا على تقديم طلبات متعددة للعميل في نفس الوقت. أي أن طريقة الخدمة () تعمل في بيئة متعددة الخيوط ، ويجب على مطوري Servlet ضمان سلامة مؤشر ترابط الطريقة.
iii.service () الطريقة والاستثناء
يمكن للخدمة () أن ترمي ServleTexception و IoException أثناء التنفيذ. من بينها ، يمكن إلقاء ServleTexception أثناء عملية معالجة طلبات العميل ، مثل المورد المطلوب غير متاح ، وقاعدة البيانات غير متوفرة ، وما إلى ذلك بمجرد إلقاء الاستثناء ، يجب على الحاوية إعادة تدوير كائن الطلب والإبلاغ عن معلومات استثناء العميل. يشير IoException إلى خطأ في الإدخال والإخراج. لا يتعين على المبرمج الاهتمام بالاستثناء والتقارير مباشرة إلى العميل بواسطة الحاوية.
احتياطات البرمجة:
1) عندما يقوم مؤشر ترابط مؤشر ترابط الخادم بتنفيذ طريقة init () لمثيل servlet ، لا يمكن لجميع مؤشرات ترابط مؤشرات ترابط خدمة العميل تنفيذ طريقة Service () للمثيل ، ولا يمكن لأي مؤشر ترابط تنفيذ طريقة Destroy () للمثيل. لذلك ، تعمل طريقة init () لـ servlet في بيئة مؤشر ترابط واحد ، ولا يتعين على المطورين النظر في أي مشكلات في سلامة مؤشرات الترابط.
2) عندما يتلقى الخادم طلبات متعددة من العميل ، سيقوم الخادم بتنفيذ طريقة Service () لمثيل Servlet في مؤشر ترابط خدمة عميل منفصل لخدمة كل عميل. في هذا الوقت ، ستقوم مؤشرات الترابط المتعددة بتنفيذ طريقة Service () لنفس مثيل Servlet في نفس الوقت ، لذلك يجب مراعاة مشكلات سلامة مؤشرات الترابط.
3) يرجى ملاحظة أنه على الرغم من أن طريقة الخدمة () تعمل في بيئة متعددة الخيوط ، فليس من الضروري مزامنة الطريقة. بدلاً من ذلك ، يعتمد ذلك على نوع الموارد التي يتم الوصول إليها بواسطة هذه الطريقة أثناء التنفيذ وكيفية الوصول إلى الموارد. التحليل كما يلي:
أنا. إذا كانت طريقة الخدمة () لا تصل إلى متغيرات أعضاء Servlet أو الموارد العالمية مثل المتغيرات الثابتة والملفات واتصالات قاعدة البيانات ، وما إلى ذلك ، فإنها تستخدم فقط الموارد الخاصة بالموارد الحالية ، مثل المتغيرات المؤقتة والطلبات وكائنات الاستجابة التي لا تشير إلى الموارد العالمية. هذه الطريقة نفسها آمنة لخيط الخيط ولا تتطلب أي تحكم التزامن.
الثاني. إذا وصلت طريقة Service () إلى متغير Servlet Member ، ولكن العملية على المتغير هي عملية للقراءة فقط ، فإن الطريقة نفسها آمنة مؤشرات الترابط ولا تتطلب أي عنصر تحكم التزامن.
ثالثا. إذا تصل طريقة Service () إلى متغير عضو Servlet وتتم قراءة ومكتب تشغيل المتغير ، عادة ما يكون عبارة التحكم في التزامن مطلوبًا.
رابعا. إذا وصلت طريقة Service () إلى متغير ثابت عالمي ، إذا كان هناك مؤشرات ترابط أخرى في النظام تصل إلى المتغير الثابت في نفس الوقت ، إذا كانت هناك عمليات قراءة وكتابة ، عادة ما تكون هناك حاجة إلى عبارة التحكم في التزامن.
v. إذا تصل طريقة Service () إلى الموارد العالمية ، مثل الملفات ، واتصالات قاعدة البيانات ، وما إلى ذلك ، فمن الضروري عادة إضافة عبارات التحكم في المزامنة.
4. الدمار
عندما يعتقد خادم الويب أن مثيل Servlet ليس ضروريًا ، مثل إعادة تحميل التطبيق ، أو إيقاف تشغيل الخادم ، ولم يتم الوصول إلى Servlet لفترة طويلة. يمكن أن يدمر الخادم (يسمى أيضًا إلغاء تثبيت) المثيل من الذاكرة. يجب أن يضمن خادم الويب أن يتم استدعاء طريقة Dorder () لمثيل Servlet قبل إلغاء تثبيت مثيل Servlet ، من أجل إعادة تدوير الموارد المطلوبة من قبل Servlet أو إجراء معالجة مهمة أخرى.
يجب على خادم الويب التأكد من أنه قبل استدعاء طريقة Dorder () ، يتم تشغيل جميع مؤشرات الترابط في طريقة Service () من مخرج المثيل أو انتظر هذه المواضيع لفترة من الوقت. بمجرد تنفيذ طريقة التدمير () ، سيرفض خادم الويب جميع الطلبات الجديدة لمثيل Servlet. مخرج طريقة التدمير () ويمكن جمع مثيل servlet.
4.
1. عميل الويب يصدر طلب HTTP إلى حاوية Servlet ؛
2. حاوية Servlet تتوصل إلى طلب الويب HTTP.
3. تنشئ حاوية Servlet كائن HttPrequest ، ويغلف معلومات طلب HTTP في هذا الكائن ؛
4. حاوية Servlet تنشئ كائن HttPresponse ؛
5. حاوية servlet (إذا لم يتم إنشاء servlet التي تم الوصول إليها عند بدء تشغيل الخادم ، قم أولاً بإنشاء مثيل Servlet واستدعاء طريقة init () لتهيئة الكائن) استدعاء طريقة Service () لكائن HttPservlet ، وتمرير معلمات httprequest و httpresponse ككائن خدمة to to to to to to to to to to to to to to to to to to to to to to to to to the htttppled conject ؛
6. Httpservlet يدعو الأساليب ذات الصلة من httprequest للحصول على معلومات طلب HTTP ؛
7. HTTPSERVELT يدعو الطرق ذات الصلة من HTTPRESSERNED لإنشاء بيانات الاستجابة ؛
8. حاوية servlet تمرر نتيجة استجابة HTTPSERVELT لعميل الويب.
تستند المقالة أعلاه إلى مبدأ تنفيذ Servlet ودورة الحياة (تحليل شامل) هو كل المحتوى الذي أشاركه معك. آمل أن يعطيك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.