JavaRush /مدونة جافا /Random-AR /بدون شفقة. دعونا نتحدث عن Java EE، والسيرفلتس وحاوياتها
eGarmin
مستوى

بدون شفقة. دعونا نتحدث عن Java EE، والسيرفلتس وحاوياتها

نشرت في المجموعة
في هذا الموضوع، أود أن أتحدث بصراحة عن فهمي لـ servlet، وما هي حاويات servlet، وما هي معظم أطر عمل الواجهة الأمامية للويب، إن لم يكن كلها، كما أتطرق أيضًا إلى موضوع كيفية ارتباط حاويات servlet وخوادم التطبيقات بـ بعضها البعض، وحاويات servlet وخادم الويب. بدون شفقة.  دعونا نتحدث عن Java EE، والسيرفلتس وحاوياتها - 1قبل أن أبدأ المحادثة، أريد أن أشير إلى أنني أتوقع حقًا أنه سيكون هناك نقاش، لأن... هنا لا أريد أن أعطي جزءًا واحدًا من التعليمات البرمجية، ولكن أريد فقط أن أتطرق إلى الجوهر، والذي يمكن دائمًا ذكره بالكلمات. سأحاول أن ألخص كل تلك النقاط التي لم تكن واضحة بالنسبة لي عندما بدأت لأول مرة. عندما طرحت أسئلة في منتديات مختلفة حول موضوع كيفية اختلاف حاوية Tomcat servlet عن أي خادم تطبيقات، مثل WebSphere أو Geronimo، كان الأشخاص الوحيدون الذين تجرأوا على الإجابة هم المتسكعون الذين لم يتمكنوا من قول أي شيء آخر غير "أنظر إلى ويكيبيديا" أو " من الصعب القول، تطبيقات الخادم - هذه بنية تحتية معقدة لتطبيقات الشركات، والتي..." بلاه بلاه بلاه. لا أستطيع أن أتحمل أشخاصًا مثل هؤلاء، وأعتقد أن معظمكم لا يفعل ذلك أيضًا. سوف نقوم بتصحيح الظلم التاريخي. يذهب…

الخدمات

بغض النظر عما يقوله أي شخص، فإن servlet عبارة عن صفحة ويب مكتوبة بلغة Java. سيقول البعض أنني مخطئ وأن servlet هو تطبيق ويب وأن هناك اختلافًا في هذه المفاهيم، لكن الأمر ليس كذلك. الآن لا يوجد فرق، ويمكن أيضًا تسمية المواقع المكتوبة بلغة PHP بتطبيقات الويب بأمان. الآن هذا أمر طبيعي تماما، لأنه... php يدعم بشكل كامل OOP، وتستخدم أنظمة إدارة المحتوى مثل Joomla هذا بشكل نشط. ما هو servlet على مستوى الكود؟ هذه فئة تحتوي على عدد من الأساليب التي تنام وترى ما إذا كان شخص ما يصل إليها عبر طلبات GET أو POST HTTP. أولئك. لقد كتبنا بعض طلبات GET في المتصفح، وتقبلها الطريقة المقابلة لفئة servlet ثم تنشئ استجابة لها في شكل صفحة HTML. بالمعنى الكلاسيكي لـ servlet، كما تصورها Sun، تم إرسال هذه الصفحة إلى العميل سطرًا تلو الآخر، بدءًا من السطر <!DOCTYPE htm>> وانتهاءً بالسطر </html>. لذلك يوجد في Java فئة servlet أساسية تسمى Servlet. بالإضافة إلى ذلك، هناك مجموعة من الفئات الأخرى التي ترث من هذه الفئة الأساسية وبالتالي توسيع وظائفها. هذا هو servlet - لا أكثر. إنه مجرد نظير جافا لكود PHP، والذي يتم تنفيذه أيضًا على الخادم، ويتم إرسال الاستجابة لطلب متصفح الويب فقط في شكل صفحة ويب إلى العميل. الجميع.

أطر الواجهة الأمامية للويب

العنوان الفرعي معقد وعادة ما يكتبون فقط إطار عمل للواجهة الأمامية أو حتى كمامة ويب ، لكنني قررت التأكيد هنا على أننا عندما نتحدث عن أطر عمل الواجهة الأمامية، فإننا نتحدث عن واجهة المستخدم الرسومية للعمل مع Java من خلال متصفح الويب. أولئك. نحن هنا نتحدث مرة أخرى عن مواقع الويب في جافا، أي. حول السيرفلتس. ما هو تقريبًا أي إطار عمل للواجهة الأمامية، على سبيل المثال Apache Struts. إنها ببساطة مجموعة من الفئات التي توسع الفئة الأساسية Servlet. لا شيء آخر. أولئك. إنها مجرد طريقة مختلفة لإنشاء نفس servlet العادي. كل ما في الأمر أن مطوري هذا الإطار (أو بمعنى آخر مطوري هذه التقنية) اعتبروا أن إضافتهم للفئة الأساسية Servletمع بعض الأساليب ستكون أكثر ملاءمة للمبرمج من الوظيفة الهزيلة التي يوفرها servlet الكلاسيكي من Sun/Oracle لديه.

صفحات جي إس بي

على الفور تقريبًا، خطرت فكرة أخرى في أذهان مطوري مفهوم Java servlet. نظرًا لأننا نكتب servlet، وتتمثل مهمتها في إرسال صفحة html إلى العميل، فقد يكون من الأصح كتابة صفحة html هذه على الفور، وإذا كنت بحاجة إلى نوع من المنطق في Java، فما عليك سوى إدراجها مباشرة في HTML. إذا لم يصبح الأمر أكثر وضوحًا، فقد تساعد العبارة: صفحة jsp هي نظير لصفحة php. صعب؟ ثم سأشرح مرة أخرى. ماذا نفعل عند كتابة صفحة بلغة PHP؟ لدينا لغة HTML ثابتة، وعندما نحتاج إلى إدراج أي منطق في PHP مثل الحلقات والشروط، فإننا نقوم بإدراجه في نص العلامة <?php … ?>. مع jsp، كل شيء هو نفسه، فقط المنطق مكتوب بلغة Java خالصة، ويتم إدراج الكود الخاص به في نص العلامة <% … %>. دعنا نعود إلى مفهوم servlet مرة أخرى. في جوهرها، صفحة JSP عبارة عن servlet، ولكنها مكتوبة بشكل مختلف قليلاً. في servlet العادي، نكتب طريقة تؤدي بعض المنطق، وبناءً على نتائجها، نقوم بإنشاء صفحة HTML للعميل. لقد بدأ مطورو servlet بعد مرور بعض الوقت في التفكير: ماذا لو لم يكن هناك أي منطق عمليًا في الطريقة، وحدث تكوين صفحة html فقط تقريبًا، ألن يكون من الأسهل كتابة صفحة html على الفور والتي تجعل الحد الأدنى من إدراجات جافا؟ حسنًا، شيء أخير يتعلق بصفحات jsp. في المرة الأولى التي يتم فيها الوصول إلى مثل هذه الصفحة، يتم تجميعها في servlet ثم تنفيذها. ستكون الطلبات اللاحقة لصفحة jsp هذه أسرع لأن سيتم تجميعه بالفعل وسيحتاج فقط إلى التنفيذ.

حاوية سيرفلت

لذلك قمنا بكتابة فئة servlet أو صفحة JSP. ماذا بعد؟ كيف يمكن دفعها إلى خادم الويب، مثل apache، حتى يتمكن من إرسالها إلى متصفح الويب الخاص بالمستخدم؟ يمكن لخادم الويب إرسال HTML فقط، وإذا كانت صفحتنا تحتوي على رمز PHP، على سبيل المثال، فإن خادم الويب يقوم أولاً بتمرير الصفحة من خلال مترجم يترجم php إلى html، وعندها فقط يتم إرسال النتيجة إلى العميل. يحدث نفس الشيء تقريبًا مع servlet - قبل الإرسال، يجب تنفيذها حتى يتم إنشاء صفحة HTML، وحاوية servlet هي بالضبط الشيء المسؤول عن تنفيذ servlet ورمز صفحة jsp. أولئك. تعد حاوية servlet الخاصة بـ Java بمثابة نظير لوحدة مترجم PHP في خادم الويب. وبالتالي، عندما يقوم المستخدم بإدخال عنوان في متصفح الويب، يتم إرسال الطلب إلى خادم الويب، ويفهم خادم الويب أنه يتم طلب servlet ويمرر الطلب إلى حاوية servlet. بعد ذلك، تقوم حاوية servlet بتنفيذ servlet، وإرسال صفحة HTML الناتجة إلى خادم الويب، والذي بدوره يعيدها إلى العميل. هل يمكن لحاوية servlet أن تعمل من تلقاء نفسها، على سبيل المثال؟ بدون خادم الويب؟ شيء مثل Tomcat يمكنه ذلك بالتأكيد. وإذا أردنا إنشاء موقع لن يحتوي على أي صفحات HTML أخرى، باستثناء الصفحات المستندة إلى servlet، فإن حاوية servlet ستكون كافية بالنسبة لنا. ولكن إذا أردنا دمج موقع من servlets وصفحات PHP على سبيل المثال، فسيتعين علينا تثبيت خادم ويب. علاوة على ذلك، لا تحتوي جميع خوادم الويب على حاوية servlet مضمنة بشكل افتراضي، ولكن جميعها تقريبًا تسمح لك بتثبيتها كمكون إضافي. لذلك، إذا أردنا إطلاق موقعنا على بعض الاستضافة على الإنترنت، حيث يعمل Apache على الأرجح، فسيتعين علينا أن نسأل المزود ما إذا كانت حاوية servlet متصلة أم لا.

جافا إي

يوجد ما يسمى JavaSE (Java Standard Edition). يتضمن هذا المفهوم جميع الفئات java، لاستخدامها نحتاج فقط إلى استيرادها (على سبيل المثال، java.util.Date) أو حتى لا نحتاج إلى القيام بذلك (على سبيل المثال، Stringلأنها موجودة في الحزمة java.lang). وهناك Java EE (Java Enterprise Edition). تنتمي هذه الفئات أيضًا إلى Sun/Oracle، لكن الاختلاف الوحيد هو صعوبة البدء في استخدامها في المشروع. سطر بسيط import…لن يكفي، لأن... لن يتم تجميع المشروع. من أجل تصحيح الوضع، سوف تحتاج إلى العثور على ملف مكتبة javaee.jar وإدراجه في المشروع. ويمكن القيام بذلك من خلال خصائص المشروع في بيئة التطوير. يُقال غالبًا أن عملية الاتصال هذه تسمى: تسجيل لقب الجرة في مسار البناء أو مسار الفصل الخاص بالمشروع.

خادم التطبيقات

تخيل الآن أننا قمنا بتجميع مشروع servlet الخاص بنا الذي يستخدم Java EE. كل شيء على ما يرام، ولكننا الآن بحاجة إلى وضع فئاتنا المجمعة في حاوية servlet. لنفترض أنهم فعلوا ذلك. هل سيعمل تطبيقنا؟ الجواب هو لا. عند الوصول إلى servlet، سيتم طرح استثناءات تشير إلى عدم العثور على بعض الفئات. لماذا؟ لأننا "خدعنا" المترجم بالانزلاق javaee.jar в classpath، أي. رأى المترجم أن الفئات من Java EE كانت في مكانها وهدأت، لكن حاوية servlet لا ترى هذه الفئات، ولكنها ترى روابط لها من servlet الخاص بنا. هل هذا الموقف قابل للحل داخل حاوية servlet؟ بالطبع نعم، تحتاج فقط إلى إضافة ملف مكتبة javaee.jar إلى المجلد باستخدام servlet الخاص بنا في حاوية servlet . تخيل الآن أنه سيكون هناك العديد من هذه المشاريع وأنها تعمل جميعًا في حاوية Tomcat servlet واحدة. هذا يعني أنه سيتعين عليك نسخ ملف الجرة هذا إلى مجلد كل servlet. هذا غير مريح وخاطئ. تم حل الموقف من خلال تقديم مفهوم خادم التطبيق، حيث كان هذا الملف منذ فترة طويلة في نسخة واحدة، ويمكن لجميع servlets الوصول إليه، وليس لها نسخة خاصة بها. في رأيي، أنها مريحة للغاية ومنطقية. بطبيعة الحال، كل هذه الضجة ليست بسبب ملف جرة واحد (أعطيته كمثال) - هناك العديد من هذه الملفات. ولكن هذا ليس كل ما تقدمه لنا خوادم التطبيقات. يمكن لخوادم التطبيقات نفسها الحفاظ على الاتصالات بالعديد من الموارد، على سبيل المثال، قاعدة البيانات. في هذه الحالة، قد لا يفتح servlet الخاص بنا مثل هذا الاتصال بنفسه، ولكن ببساطة يأخذه من خادم التطبيق. في حاوية servlet، هذا مستحيل، لأن... الحاوية هي، إلى حد ما، خادم تطبيقات تم تجريدها. في الحاوية، يجب على servlet دائمًا إنشاء اتصالات بقاعدة البيانات نفسها. شيء من هذا القبيل... أرشيف الحرب ما هو أرشيف الحرب؟ WAR هو أرشيف الويب. في الواقع، إنه مجرد ملف مضغوط، مثل أي جرة. في الأساس، هذه مجرد طريقة لحشر موقعنا الإلكتروني، الذي يتكون من العديد من صفحات الويب وصفحات jsp وفئات servlet، في ملف مضغوط واحد. web.xml web.xml هو ما يسمى بواصف النشر. هذا ملف يصف بغباء طلب سطر متصفح الويب الذي سيتم إرساله إلى أي فئة servlet للمعالجة، حتى لا يتم الخلط بين حاوية servlet وأي servlet مسؤول عن ماذا. بشكل عام، في Java، من المألوف للغاية وصف الإعدادات في جميع أنواع ملفات XML، ولكن في الآونة الأخيرة كان هناك ميل للابتعاد عن هذا التقليد. كيف تسأل؟ ومن خلال الشروح. فئات التعليقات التوضيحية نفسها لا تفعل أي شيء، فقد تم إنشاؤها فقط لوصف جميع أنواع الإعدادات (بيانات التعريف) ليس في ملف XML منفصل، ولكن مباشرة في التعليمات البرمجية. بشكل مريح للغاية. ومع ذلك، هناك الآن مرحلة وسيطة معينة، عندما يتم تحديد بعض الإعدادات عن طريق التعليقات التوضيحية، وبعضها عن طريق XML، وقد يكون هذا مربكًا، لأن تنظر إلى ملف XML وترى إعدادًا واحدًا، ولكن وفقًا للتعليقات التوضيحية، يوجد إعداد آخر. أيهما له الأولوية القصوى؟ من تعرف…

خاتمة

بعد أن كتبت هذا، اعتقدت أن مثل هذه المراجعة السريعة لن تساعد أي شخص، لأن ... لا يحتوي على أي تفاصيل ولا أمثلة، ولكن في المقابل لا تمحى ما هو مكتوب، فليكن.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION