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

يُعدّ 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 لخدمات الويب:
- خدمات الويب RESTful في جاكرتا ( JAX-RS 2.0) مفيدة لخدمات AJAX وJSON وREST، و
- تُعد خدمات الويب XML من جاكرتا (JAX-WS) مفيدة لخدمات الويب SOAP .
الكائن 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 | مطلق سراحه | مواصفة | منصة | تغييرات مهمة |
|---|---|---|---|---|
| جاكرتا سيرفليت 6.1 | 28 مارس 2024 | 6.1 | جاكرتا إي إي 11 | تحسين دعم رمز حالة HTTP وتشفير الأحرف |
| جاكرتا سيرفليت 6.0 | 31 مايو 2022 | 6.0 | جاكرتا إي إي 10 | إزالة الميزات المهملة وتنفيذ التحسينات المطلوبة |
| جاكرتا سيرفليت 5.0 | 9 أكتوبر 2020 | 5.0 | جاكرتا إي إي 9 | تم نقل واجهة برمجة التطبيقات من الحزمة javax.servletإلىjakarta.servlet |
| جاكرتا سيرفلت 4.0.3 | 10 سبتمبر 2019 | 4.0 | جاكرتا إي إي 8 | تمت إعادة تسميتها من علامة "Java" التجارية |
| جافا سيرفلت 4.0 | سبتمبر 2017 | JSR 369 | جافا إي إي 8 | HTTP/2 |
| جافا سيرفلت 3.1 | مايو 2013 | JSR 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 154 | J2EE 1.4 | يستخدم ملف web.xml مخطط XML |
| جافا سيرفلت 2.3 | أغسطس 2001 [ 23 ] | JSR 53 | J2EE 1.3 | إضافةFilter |
| جافا سيرفلت 2.2 | أغسطس 1999 [ 24 ] | JSR 902 ، JSR 903 | J2EE 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()، تُستدعى مرة واحدة فقط خلال دورة حياة السيرفلت.
فيما يلي سيناريو نموذجي لاستخدام هذه الطرق.
- لنفترض أن المستخدم يطلب زيارة عنوان URL .
- ثم يقوم المتصفح بإنشاء طلب HTTP لهذا الرابط.
- ثم يتم إرسال هذا الطلب إلى الخادم المناسب.
- يتم استقبال طلب HTTP بواسطة خادم الويب وإعادة توجيهه إلى حاوية servlet.
- تقوم الحاوية بربط هذا الطلب بخادم معين.
- يتم استرجاع السيرفلت ديناميكيًا وتحميله في مساحة عنوان الحاوية.
- يقوم الحاوية باستدعاء
init()طريقة السيرفلت.- يتم استدعاء هذه الطريقة فقط عند تحميل السيرفلت لأول مرة في الذاكرة.
- من الممكن تمرير معلمات التهيئة إلى السيرفلت حتى يتمكن من تهيئة نفسه.
- يقوم الحاوية باستدعاء
service()طريقة السيرفلت.- يتم استدعاء هذه الطريقة لمعالجة طلب HTTP.
- قد يقرأ السيرفلت البيانات التي تم توفيرها في طلب HTTP.
- قد يقوم البرنامج المساعد أيضًا بصياغة استجابة HTTP للعميل.
- يبقى الخادم الصغير في مساحة عنوان الحاوية وهو متاح لمعالجة أي طلبات HTTP أخرى يتم تلقيها من العملاء.
- يتم استدعاء هذه
service()الطريقة لكل طلب HTTP.
- يتم استدعاء هذه
- قد يقرر الحاوية، في مرحلة ما، إلغاء تحميل السيرفلت من ذاكرته.
- تختلف الخوارزميات التي يتم من خلالها اتخاذ هذا القرار باختلاف كل حاوية.
- يستدعي الحاوية طريقة servlet
destroy()للتخلي عن أي موارد مثل مقابض الملفات المخصصة لـ servlet؛ قد يتم حفظ البيانات المهمة في مخزن دائم. - يمكن بعد ذلك جمع البيانات المهملة من الذاكرة المخصصة للخادم البرمجي وكائناته.
مثال
يطبع المثال التالي لـ 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 .
انظر أيضاً
- بروتوكول أباتشي جيه سيرف (AJP)
الاقتباسات
- 1 2 Murach & Urban 2014 ، ص 170-171 ، §2 مهارات أساسية في servlet و JSP - منظور - ملخص.
- ↑ "Servlet (Java(TM) EE 7 Specification APIs)" . oracle.com . تم الاطلاع عليه بتاريخ 25-07-2018 .
- ↑ Murach & Urban 2014 ، ص 128-129 ، §2 مهارات أساسية في servlet و JSP - كيفية إنشاء وتعيين servlet.
- 1 2 "أساسيات سيرفلت - الفصل 1" . novocode.com . مؤرشف من الأصل بتاريخ 18-12-2017.
- ↑ موراش وأوربان 2014 ، ص 40-42، §1 ابدأ بشكل صحيح - سيرفلت لمعالجة الواجهة الخلفية.
- ↑ Murach & Urban 2014 ، ص 87 ، §2 مهارات أساسية في servlet و JSP.
- ↑ موراش وأوربان 2014 ، ص 74، §1 ابدأ بشكل صحيح - مهارات أخرى للعمل مع تطبيقات الويب.
- 1 2 3 موراش وأوربان 2014 ، ص 46-47، §1 ابدأ بشكل صحيح - JSP للصفحة الثانية.
- ↑ فريدمان، مات (26 يونيو 1996). "تقرير مؤتمر JavaOne" . JavaWorld . مؤرشف من الأصل في 26 يوليو 2018. تم الاطلاع عليه في 25 يوليو 2018 .
- ↑ ديوانجي، بافاني؛ كونلي، ديف؛ واغل، براساد (29 مايو 1996). "خادم جافا وسيرفلت" (ملف PDF) . الخوادم وملحقات الخادم . JavaOne 1996. مؤرشف (ملف PDF) من الأصل بتاريخ 16 أغسطس 2000. تم الاطلاع عليه بتاريخ 1 فبراير 2020 .
- ↑ تشانغ، فيل إنجي (1 يوليو 1997). "مقابلة: فريق خادم الويب جافا يُطلعكم على التفاصيل" . جافا وورلد . مؤرشف من الأصل في 26 يوليو 2018. تم الاطلاع عليه في 25 يوليو 2018 .
- ↑ تشانغ، فيل إنجي (1 يونيو 1997). "إصدار خادم الويب جافا!" . جافا وورلد . مؤرشف من الأصل في 26 يوليو 2018. تم الاطلاع عليه في 25 يوليو 2018 .
- ↑ "تاريخ سيرفلت | community.oracle.com" . Weblogs.java.net. 10-12-2005. مؤرشف من الأصل في 15-08-2020 . تم الاطلاع عليه في 14-06-2013 .
- 1 2 هانتر، جيسون (مارس 2000). "الجدول الزمني لسيرفلت" . ما وراء برمجة سيرفلت جافا . مؤتمر أورايلي حول جافا. أورايلي ميديا - عبر SlidePlayer.com.
- ↑ "خادم ويب جافا" . جافا سوفت . صن مايكروسيستمز . مؤرشف من الأصل بتاريخ 11 يناير 1998. تم الاطلاع عليه بتاريخ 1 فبراير 2020 .
- ↑ "خادم ويب جافا" . صن مايكروسيستمز . مؤرشف من الأصل بتاريخ 2002-02-06 . تم الاطلاع عليه بتاريخ 2020-02-01 .
- ↑ "بافني ديوانجي" . معهد سلامة الأسرة على الإنترنت . مؤرشف من الأصل في 26 يوليو 2018. تم الاطلاع عليه في 12 نوفمبر 2016 .
- ↑ براءة الاختراع الأمريكية رقم 5928323 ، جوسلينج، جيمس أ .؛ ديوانجي، بافني ؛ وكونيلي، ديفيد و.، "جهاز وطريقة لتوليد المعلومات ديناميكيًا باستخدام كائنات برمجية من جانب الخادم"، نُشرت في 27 يوليو 1999، وصدرت في 27 يوليو 1999، ومُسجلة باسم شركة صن مايكروسيستمز .
- ↑ "ما الجديد في Servlet 3.1 ؟ - Java EE 7 يمضي قدمًا (أرون غوبتا، ما زال الطريق طويلًا...)" . oracle.com . تم الاطلاع عليه بتاريخ 22 نوفمبر 2016 .
- ↑ ليو، شينيو (19 فبراير 2009). "دعم المعالجة غير المتزامنة في سيرفلت 3.0" . إنفوورلد . تم الاسترجاع في 27 ديسمبر 2025 .
- ↑ هانتر، جيسون (2 يناير 2006). "ميزات جديدة أضيفت إلى سيرفلت 2.5" . إنفوورلد . تم الاسترجاع في 27 ديسمبر 2025 .
- ↑ هانتر، جيسون (28 مارس 2003). "سيرفلت 2.4: ما الجديد؟" . إنفوورلد . تم الاسترجاع في 27 ديسمبر 2025 .
- ↑ هانتر، جيسون (26 يناير 2001). "سيرفلت 2.3: الكشف عن الميزات الجديدة" . إنفوورلد . تم الاسترجاع في 27 ديسمبر 2025 .
- ↑ هانتر، جيسون (15 أكتوبر 1999). "ما الجديد في واجهة برمجة تطبيقات جافا سيرفلت 2.2؟" . إنفوورلد . تم الاسترجاع في 27 ديسمبر 2025 .
- ↑ هانتر، جيسون (1 ديسمبر 1998). "تقديم واجهة برمجة تطبيقات Servlet الجديدة 2.1" . إنفوورلد . تم الاسترجاع في 27 ديسمبر 2025 .
- ↑ كروفورد، ويليام؛ هنتر، جيسون (نوفمبر 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.
- ↑ موراش وأوربان 2014 ، ص 160-163، §15 كيفية تطوير سيرفلت - المزيد من المهارات للعمل مع السيرفلت.
مراجع
- موراش، جويل؛ أوربان، مايكل (2014). تطبيقات جافا سيرفلت وJSP لموراش . ISBN 978-1-890774-78-3.
دروس تعليمية
روابط خارجية
- الموقع الرسمي

- موقع Servlets.com مؤرشف بتاريخ 25 يوليو 2018 على موقع Wayback Machine
- منصة جافا للمؤسسات
- طلبات مواصفات جافا
