جاكرتا سيرفليت

دورة حياة ملف JSP

يُعدّ Jakarta Servlet ، المعروف سابقًا باسم Java Servlet، مكونًا برمجيًا بلغة Java يُوسّع إمكانيات الخادم . ورغم قدرة Servlet على الاستجابة لأنواع عديدة من الطلبات، إلا أنها تُستخدم غالبًا لتنفيذ حاويات الويب لاستضافة تطبيقات الويب على خوادم الويب ، وبالتالي تُصنّف كواجهة برمجة تطبيقات ويب Servlet من جانب الخادم . وتُعتبر هذه الـ Servletات نظيرًا بلغة Java لتقنيات محتوى الويب الديناميكي الأخرى مثل PHP و ASP.NET .

مقدمة

جاكارتا سيرفلت هي فئة جافا [ 1 ] في جاكارتا إي إي ، تتوافق مع واجهة برمجة تطبيقات جاكارتا سيرفلت [ 2 وهي معيار لتنفيذ فئات جافا التي تستجيب للطلبات. من حيث المبدأ، يمكن للسيرفلت التواصل عبر أي بروتوكول عميل-خادم ، ولكنها تُستخدم غالبًا مع بروتوكول HTTP . من حيث المبدأ، يمكن لأي سيرفلت أن يرث من GenericServletالفئة؛ ومع ذلك، عمليًا، جميع السيرفلت ترث من HttpServletالفئة. [ 3 ] لذلك، يُستخدم مصطلح "سيرفلت" غالبًا كاختصار لـ "سيرفلت HTTP". [ 4 ] وبالتالي، يمكن استخدام السيرفلت لإضافة محتوى ديناميكي إلى خادم ويب باستخدام منصة جافا . [ 5 ] عادةً ما يكون المحتوى المُنشأ بتنسيق HTML ، ولكنه قد يكون بيانات أخرى مثل XML ، والأكثر شيوعًا، JSON .

تم استبدال واجهة برمجة تطبيقات Jakarta Servlet، إلى حد ما، بتقنيتين قياسيتين من تقنيات Java لخدمات الويب:

الكائن A Servletهو كائن يستقبل طلبًا ويُنشئ استجابة بناءً على ذلك الطلب. Servletتُعرّف الحزمة الأساسية كائنات Java لتمثيل طلبات واستجابات servlet، بالإضافة إلى كائنات تعكس معلمات تكوين servlet وبيئة التنفيذ.

تحدد واجهة برمجة تطبيقات Servlet ، الموجودة في التسلسل الهرمي لحزم Javajavax.servlet ، التفاعلات المتوقعة بين حاوية الويب و servlet. [ 4 ]

javax.servlet.httpتُعرّف هذه الحزمة فئات فرعية خاصة ببروتوكول HTTPGenericServlet . وتتضمن هذه الحزمة كائنات إدارة الجلسات التي تتعقب الطلبات والاستجابات المتعددة بين خادم الويب والعميل.

تستطيع السيرفلتات الاحتفاظ بحالة متغيرات الجلسة عبر العديد من معاملات الخادم باستخدام ملفات تعريف الارتباط HTTP أو ربط عناوين URL . [ 6 ] توجد عدة طرق لإنشاء سيرفلت واستخدام ربط عناوين URL معه. قبل مواصفات السيرفلت 3.0 (Tomcat 7.0)، كان الخيار الوحيد هو تهيئة ملف web.xml لربط السيرفلت بعنوان URL. أما بالنسبة للتطبيقات التي تستخدم مواصفات السيرفلت 3.0 أو أحدث، @WebServletفيمكن استخدام التعليق التوضيحي لربط أي سيرفلت بنمط واحد أو أكثر من أنماط عناوين URL.

يمكن تجميع تطبيقات الويب (Servlets) في ملف WAR كتطبيق ويب . [ 7 ]

يُعدّ حاوية الويب ضرورية لنشر وتشغيل السيرفلت. حاوية الويب (المعروفة أيضًا باسم حاوية السيرفلت) هي في الأساس مُكوّن خادم الويب الذي يتفاعل مع السيرفلت. [ 1 ] تتولى حاوية الويب مسؤولية إدارة دورة حياة السيرفلت، وربط عنوان URL بسيرفلت مُحدد، والتأكد من أن مُرسل طلب عنوان URL لديه صلاحيات الوصول الصحيحة.

يمكن إنشاء سيرفلت تلقائيًا من صفحات خادم جاكرتا (JSP) بواسطة مُجمِّع صفحات خادم جاكرتا . يكمن الفرق بين السيرفلت وJSP في أن السيرفلت عادةً ما تُضمِّن كود HTML داخل كود جافا، بينما تُضمِّن صفحات JSP كود جافا في HTML. عمومًا، عند استخدام صفحات JSP، يُعتبر تضمين كود جافا في JSP ممارسةً سيئة. [ 8 ] بدلًا من ذلك، يُفضَّل نقل منطق الواجهة الخلفية من JSP إلى كود جافا في [8 ]Servlet ، مما يضمن أن يكون [ 8Servlet ] مسؤولًا فقط عن المعالجة، وأن تكون JSP مسؤولة فقط عن عرض HTML، [ 8 ] مما يسمح بفصل واضح للمهام والامتثال لمبدأ المسؤولية الواحدة .

في حين أن الاستخدام المباشر لـ servlets لإنشاء HTML (كما هو موضح في المثال أدناه) أصبح نادرًا، فإن إطار عمل الويب MVC عالي المستوى في Jakarta EE ( Faces ) لا يزال يستخدم تقنية servlet بشكل صريح لمعالجة الطلبات/الاستجابات منخفضة المستوى عبر FacesServlet.

الاستخدام الأقدم نوعًا ما هو استخدام servlets بالتزامن مع JSPs في نمط يسمى " النموذج 2 "، وهو نوع من أنواع نموذج العرض والتحكم .

تاريخ

أُعلن عن واجهة برمجة تطبيقات Java Servlet لأول مرة علنًا في مؤتمر JavaOne الافتتاحي في مايو 1996. [ 9 ] [ 10 ] بعد حوالي شهرين من الإعلان في المؤتمر، أُتيحت أول نسخة تجريبية عامة على موقع JavaSoft الإلكتروني. كانت هذه النسخة التجريبية الأولى من خادم Java Web Server (JWS؛ المعروف آنذاك باسمه الرمزي Jeeves ) [ 11 ] والذي طُرح كمنتج في 5 يونيو 1997. [ 12 ]

في مدونته على موقع java.net ، يُفصّل جيم دريسكول، أحد المخضرمين في شركة صن وقائد مشروع GlassFish ، تاريخ تقنية السيرفلت. [ 13 ] كان جيمس جوسلينج أول من فكّر في السيرفلت في بدايات جافا ، لكن المفهوم لم يتحوّل إلى منتج حتى ديسمبر 1996 عندما أطلقت صن JWS. [ 14 ] [ 15 ] [ 16 ] كان ذلك قبل أن تُصبح Jakarta EE، التي تُعرف الآن باسمها، مواصفةً رسمية.

تم إنشاء مواصفات Servlet1 بواسطة بافني ديوانجي [ 17 ] [ 18 ] أثناء عملها في شركة صن مايكروسيستمز ، وتم الانتهاء من الإصدار 1.0 في يونيو 1997. بدءًا من الإصدار 2.2، تم تطوير المواصفات في إطار عملية مجتمع جافا .

سجل واجهة برمجة تطبيقات Servlet
إصدار واجهة برمجة تطبيقات Servletمطلق سراحهمواصفةمنصةتغييرات مهمة
جاكرتا سيرفليت 6.128 مارس 20246.1جاكرتا إي إي 11تحسين دعم رمز حالة HTTP وتشفير الأحرف
جاكرتا سيرفليت 6.031 مايو 20226.0جاكرتا إي إي 10إزالة الميزات المهملة وتنفيذ التحسينات المطلوبة
جاكرتا سيرفليت 5.09 أكتوبر 20205.0جاكرتا إي إي 9تم نقل واجهة برمجة التطبيقات من الحزمة javax.servletإلىjakarta.servlet
جاكرتا سيرفلت 4.0.310 سبتمبر 20194.0جاكرتا إي إي 8تمت إعادة تسميتها من علامة "Java" التجارية
جافا سيرفلت 4.0سبتمبر 2017JSR 369جافا إي إي 8HTTP/2
جافا سيرفلت 3.1مايو 2013JSR 340جافا إي إي 7آلية ترقية بروتوكول HTTP ( WebSocket ) [ 19 ]
جافا سيرفلت 3.0ديسمبر 2009 [ 20 ]JSR 315جافا إي إي 6قابلية التوصيل، سهولة التطوير، سيرفلت غير متزامن، الأمان، تحميل الملفات
جافا سيرفلت 2.5سبتمبر 2005 [ 21 ]JSR 154جافا إي إي 5يتطلب Java SE 5، ويدعم التعليقات التوضيحية
جافا سيرفلت 2.4نوفمبر 2003 [ 22 ]JSR 154J2EE 1.4يستخدم ملف web.xml مخطط XML
جافا سيرفلت 2.3أغسطس 2001 [ 23 ]JSR 53J2EE 1.3إضافةFilter
جافا سيرفلت 2.2أغسطس 1999 [ 24 ]JSR 902 ، JSR 903J2EE 1.2أصبح جزءًا من J2EE، وقدم تطبيقات ويب مستقلة في ملفات .war
جافا سيرفلت 2.1نوفمبر 1998 [ 25 ]2.1أغير محددأول مواصفات رسمية، تمت إضافتها RequestDispatcher،ServletContext
جافا سيرفلت 2.0ديسمبر 1997غير متوفرJDK 1.1جزء من مجموعة تطوير جافا سيرفلت 2.0 الصادرة في أبريل 1998 [ 26 ]
جافا سيرفلت 1.0ديسمبر 1996غير متوفرجزء من مجموعة تطوير جافا سيرفلت (JSDK) 1.0 الصادرة في يونيو 1997 [ 14 ]

دورة حياة سيرفلت

تُعدّ ثلاث طرق أساسية لدورة حياة السيرفلت. وهي init(): ، service()، و destroy(). يتم تنفيذها بواسطة كل سيرفلت ويتم استدعاؤها في أوقات محددة بواسطة الخادم.

  • خلال مرحلة تهيئة دورة حياة السيرفلت ، يقوم حاوية الويب بتهيئة مثيل السيرفلت عن طريق استدعاء الدالة init()[ 27 ] ، مع تمرير كائن يُنفذ javax.servlet.ServletConfigالواجهة. يسمح كائن التهيئة هذا للسيرفلت بالوصول إلى معلمات التهيئة من نوع الاسم والقيمة من تطبيق الويب.
  • بعد التهيئة، يمكن لنسخة السيرفلت معالجة طلبات العميل. تتم معالجة كل طلبservice() في سلسلة عمليات منفصلة. يستدعي حاوية الويب دالة السيرفلت لكل طلب. service()تحدد هذه الدالة نوع الطلب وتُحيله إلى الدالة المناسبة لمعالجته. يجب على مطور السيرفلت توفير تنفيذ لهذه الدوال. إذا طُلب استخدام دالة غير مُنفذة في السيرفلت، يتم استدعاء دالة الفئة الأصلية، مما يؤدي عادةً إلى إرجاع خطأ إلى مُرسل الطلب.
  • وأخيرًا، يستدعي حاوية الويب destroy()الدالة التي تُخرج السيرفلت من الخدمة. هذه destroy()الدالة، مثلها مثل غيرها init()، تُستدعى مرة واحدة فقط خلال دورة حياة السيرفلت.

فيما يلي سيناريو نموذجي لاستخدام هذه الطرق.

  1. لنفترض أن المستخدم يطلب زيارة عنوان URL .
    • ثم يقوم المتصفح بإنشاء طلب HTTP لهذا الرابط.
    • ثم يتم إرسال هذا الطلب إلى الخادم المناسب.
  2. يتم استقبال طلب HTTP بواسطة خادم الويب وإعادة توجيهه إلى حاوية servlet.
    • تقوم الحاوية بربط هذا الطلب بخادم معين.
    • يتم استرجاع السيرفلت ديناميكيًا وتحميله في مساحة عنوان الحاوية.
  3. يقوم الحاوية باستدعاء init()طريقة السيرفلت.
    • يتم استدعاء هذه الطريقة فقط عند تحميل السيرفلت لأول مرة في الذاكرة.
    • من الممكن تمرير معلمات التهيئة إلى السيرفلت حتى يتمكن من تهيئة نفسه.
  4. يقوم الحاوية باستدعاء service()طريقة السيرفلت.
    • يتم استدعاء هذه الطريقة لمعالجة طلب HTTP.
    • قد يقرأ السيرفلت البيانات التي تم توفيرها في طلب HTTP.
    • قد يقوم البرنامج المساعد أيضًا بصياغة استجابة HTTP للعميل.
  5. يبقى الخادم الصغير في مساحة عنوان الحاوية وهو متاح لمعالجة أي طلبات HTTP أخرى يتم تلقيها من العملاء.
    • يتم استدعاء هذه service()الطريقة لكل طلب HTTP.
  6. قد يقرر الحاوية، في مرحلة ما، إلغاء تحميل السيرفلت من ذاكرته.
    • تختلف الخوارزميات التي يتم من خلالها اتخاذ هذا القرار باختلاف كل حاوية.
  7. يستدعي الحاوية طريقة servlet destroy()للتخلي عن أي موارد مثل مقابض الملفات المخصصة لـ servlet؛ قد يتم حفظ البيانات المهمة في مخزن دائم.
  8. يمكن بعد ذلك جمع البيانات المهملة من الذاكرة المخصصة للخادم البرمجي وكائناته.

مثال

يطبع المثال التالي لـ servlet عدد مرات service()استدعاء طريقته.

لاحظ أن هذا HttpServletهو فئة فرعية من GenericServlet، وهو تطبيق للواجهة Servlet.

تقوم دالة service()الفئة HttpServletبتوجيه الطلبات إلى الدوال doGet()و doPost()و و وهكذا، وفقًا لطلب HTTP. في المثال أدناه، doPut()تم تجاوز هذه الدالة ولا تميز بين دوال طلب HTTP التي تخدمها.doDelete()service()

package org.wikipedia.examples ;استيراد java.io.IOException ؛استيراد jakarta.servlet.ServletConfig ؛ استيراد jakarta.servlet.ServletException ؛ استيراد jakarta.servlet.http.HttpServlet ؛ استيراد jakarta.servlet.http.HttpServletRequest ؛ استيراد jakarta.servlet.http.HttpServletResponse ؛public class ServletLifeCycleExample extends HttpServlet { private Integer sharedCounter ;@Override public void init ( final ServletConfig config ) throws ServletException { super . init ( config ); getServletContext (). log ( "تم استدعاء init()" ); sharedCounter = 0 ; }@Override protected void service ( final HttpServletRequest request , final HttpServletResponse response ) throws ServletException , IOException { getServletContext (). log ( " تم استدعاء service()" ); int localCounter ; synchronized ( sharedCounter ) { sharedCounter ++ ; localCounter = sharedCounter ; } response.getWriter (). write ( "زيادة العدد إلى " + localCounter ) ; // الوصول إلى متغير محلي response.getWriter ( ). flush (); // مسح الاستجابة }@Override public void destroy () { getServletContext (). log ( "تم استدعاء destroy()" ); } }

خوادم الحاويات

تم تطبيق مواصفات تقنية Servlet في العديد من المنتجات. اطلع على قائمة التطبيقات في صفحة حاوية الويب .

توجد أيضًا أنواع أخرى من حاويات servlet مثل تلك الخاصة بـ SIP servlets، على سبيل المثال، SailFin .

انظر أيضاً

الاقتباسات

  1. 1 2 Murach & Urban 2014 ، ص 170-171 ، §2 مهارات أساسية في servlet و JSP - منظور - ملخص.
  2. "Servlet (Java(TM) EE 7 Specification APIs)" . oracle.com . تم الاطلاع عليه بتاريخ 25-07-2018 .
  3. Murach & Urban 2014 ، ص 128-129 ، §2 مهارات أساسية في servlet و JSP - كيفية إنشاء وتعيين servlet.
  4. 1 2 "أساسيات سيرفلت - الفصل 1" . novocode.com . مؤرشف من الأصل بتاريخ 18-12-2017.
  5. موراش وأوربان 2014 ، ص 40-42، §1 ابدأ بشكل صحيح - سيرفلت لمعالجة الواجهة الخلفية.
  6. Murach & Urban 2014 ، ص 87 ، §2 مهارات أساسية في servlet و JSP.
  7. موراش وأوربان 2014 ، ص 74، §1 ابدأ بشكل صحيح - مهارات أخرى للعمل مع تطبيقات الويب.
  8. 1 2 3 موراش وأوربان 2014 ، ص 46-47، §1 ابدأ بشكل صحيح - JSP للصفحة الثانية.
  9. فريدمان، مات (26 يونيو 1996). "تقرير مؤتمر JavaOne" . JavaWorld . مؤرشف من الأصل في 26 يوليو 2018. تم الاطلاع عليه في 25 يوليو 2018 .
  10. ديوانجي، بافاني؛ كونلي، ديف؛ واغل، براساد (29 مايو 1996). "خادم جافا وسيرفلت" (ملف PDF) . الخوادم وملحقات الخادم . JavaOne 1996. مؤرشف (ملف PDF) من الأصل بتاريخ 16 أغسطس 2000. تم الاطلاع عليه بتاريخ 1 فبراير 2020 .
  11. تشانغ، فيل إنجي (1 يوليو 1997). "مقابلة: فريق خادم الويب جافا يُطلعكم على التفاصيل" . جافا وورلد . مؤرشف من الأصل في 26 يوليو 2018. تم الاطلاع عليه في 25 يوليو 2018 .
  12. تشانغ، فيل إنجي (1 يونيو 1997). "إصدار خادم الويب جافا!" . جافا وورلد . مؤرشف من الأصل في 26 يوليو 2018. تم الاطلاع عليه في 25 يوليو 2018 .
  13. "تاريخ سيرفلت | community.oracle.com" . Weblogs.java.net. 10-12-2005. مؤرشف من الأصل في 15-08-2020 . تم الاطلاع عليه في 14-06-2013 .
  14. 1 2 هانتر، جيسون (مارس 2000). "الجدول الزمني لسيرفلت" . ما وراء برمجة سيرفلت جافا . مؤتمر أورايلي حول جافا. أورايلي ميديا ​​- عبر SlidePlayer.com.
  15. "خادم ويب جافا" . جافا سوفت . صن مايكروسيستمز . مؤرشف من الأصل بتاريخ 11 يناير 1998. تم الاطلاع عليه بتاريخ 1 فبراير 2020 .
  16. "خادم ويب جافا" . صن مايكروسيستمز . مؤرشف من الأصل بتاريخ 2002-02-06 . تم الاطلاع عليه بتاريخ 2020-02-01 .
  17. "بافني ديوانجي" . معهد سلامة الأسرة على الإنترنت . مؤرشف من الأصل في 26 يوليو 2018. تم الاطلاع عليه في 12 نوفمبر 2016 .
  18. ↑ براءة الاختراع الأمريكية رقم 5928323 ، جوسلينج، جيمس أ .؛ ديوانجي، بافني ؛ وكونيلي، ديفيد و.، "جهاز وطريقة لتوليد المعلومات ديناميكيًا باستخدام كائنات برمجية من جانب الخادم"، نُشرت في 27 يوليو 1999، وصدرت في 27 يوليو 1999، ومُسجلة باسم شركة صن مايكروسيستمز . 
  19. "ما الجديد في Servlet 3.1 ؟ - Java EE 7 يمضي قدمًا (أرون غوبتا، ما زال الطريق طويلًا...)" . oracle.com . تم الاطلاع عليه بتاريخ 22 نوفمبر 2016 . 
  20. ليو، شينيو (19 فبراير 2009). "دعم المعالجة غير المتزامنة في سيرفلت 3.0" . إنفوورلد . تم الاسترجاع في 27 ديسمبر 2025 .
  21. هانتر، جيسون (2 يناير 2006). "ميزات جديدة أضيفت إلى سيرفلت 2.5" . إنفوورلد . تم الاسترجاع في 27 ديسمبر 2025 .
  22. هانتر، جيسون (28 مارس 2003). "سيرفلت 2.4: ما الجديد؟" . إنفوورلد . تم الاسترجاع في 27 ديسمبر 2025 .
  23. هانتر، جيسون (26 يناير 2001). "سيرفلت 2.3: الكشف عن الميزات الجديدة" . إنفوورلد . تم الاسترجاع في 27 ديسمبر 2025 .
  24. هانتر، جيسون (15 أكتوبر 1999). "ما الجديد في واجهة برمجة تطبيقات جافا سيرفلت 2.2؟" . إنفوورلد . تم الاسترجاع في 27 ديسمبر 2025 .
  25. هانتر، جيسون (1 ديسمبر 1998). "تقديم واجهة برمجة تطبيقات Servlet الجديدة 2.1" . إنفوورلد . تم الاسترجاع في 27 ديسمبر 2025 .
  26. كروفورد، ويليام؛ هنتر، جيسون (نوفمبر 1998). "مقدمة". برمجة جافا سيرفلت ( الطبعة الأولى). أورايلي ميديا . ص. 9-10. ISBN   978-1-56592-391-1. نحن نغطي الإصدار 2.0 من واجهة برمجة تطبيقات Servlet، والتي تم تقديمها كجزء من Java Web Server 1.1 في ديسمبر 1997 وتم توضيحها من خلال إصدار Java Servlet Development Kit 2.0 في أبريل 1998.
  27. موراش وأوربان 2014 ، ص 160-163، §15 كيفية تطوير سيرفلت - المزيد من المهارات للعمل مع السيرفلت.

مراجع

  • موراش، جويل؛ أوربان، مايكل (2014). تطبيقات جافا سيرفلت وJSP لموراش . ISBN 978-1-890774-78-3.

دروس تعليمية