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

المؤلف(ون) الأصلي(ون)بافني ديوانجي
المطور(ون)مؤسسة إكليبس
الإصدار الأوليديسمبر 1996 ؛ منذ 27 عامًا (1996-12)
إصدار مستقر
6.0 / 31 مايو 2022 ؛ منذ عامين (2022-05-31)
مستودع
  • github.com/jakartaee/servlet
مكتوب فيجافا
منصةجاكرتا اي اي
مقاس2.56 ميجابايت
يكتبمكون برمجي لواجهة برمجة التطبيقات على الويب
رخصةرخصة Eclipse العامة
موقع إلكترونيjakarta.ee/مواصفات/servlet/
حياة ملف JSP

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

مقدمة

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

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

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

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

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

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

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

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

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

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

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

تاريخ

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

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

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

تاريخ واجهة برمجة التطبيقات Servlet
إصدار API Servlet مطلق سراحه مواصفة منصة تغييرات هامة
جاكرتا سيرفليت 6.0 31 مايو 2022 6.0 جاكرتا EE 10 إزالة الميزات القديمة وتنفيذ التحسينات المطلوبة
جاكرتا سيرفليت 5.0 9 أكتوبر 2020 5.0 جاكرتا EE 9 تم نقل واجهة برمجة التطبيقات من الحزمة javax.servletإلىjakarta.servlet
جاكرتا سيرفليت 4.0.3 10 سبتمبر 2019 4.0 جاكرتا EE 8 تمت إعادة تسميته من العلامة التجارية "Java"
جافا سيرفليت 4.0 سبتمبر 2017 جيه إس آر 369 جافا EE 8 HTTP/2
جافا سيرفليت 3.1 مايو 2013 جيه إس آر 340 جافا EE 7 آلية ترقية بروتوكول HTTP، الإدخال/الإخراج غير الحظري ( WebSocket ) [19]
جافا سيرفليت 3.0 ديسمبر 2009 جيه إس آر 315 جافا EE 6، جافا SE 6 إمكانية التوصيل، سهولة التطوير، Servlet غير المتزامن، الأمان، تحميل الملفات
جافا سيرفليت 2.5 سبتمبر 2005 جيه إس آر 154 جافا EE 5، جافا SE 5 يتطلب Java SE 5، ويدعم التعليقات التوضيحية
جافا سيرفليت 2.4 نوفمبر 2003 جيه إس آر 154 J2EE 1.4، J2SE 1.3 يستخدم web.xml مخطط XML
جافا سيرفليت 2.3 أغسطس 2001 جيه إس آر 53 J2EE 1.3، J2SE 1.2 إضافةFilter
جافا سيرفليت 2.2 أغسطس 1999 جيه إس آر 902، جيه إس آر 903 J2EE 1.2، J2SE 1.2 يصبح جزءًا من J2EE، ويقدم تطبيقات ويب مستقلة في ملفات .war
جافا سيرفليت 2.1 نوفمبر 1998 2.1أ غير محدد أول مواصفات رسمية، تمت إضافتها RequestDispatcher،ServletContext
جافا سيرفليت 2.0 ديسمبر 1997 JDK 1.1 جزء من مجموعة تطوير Java Servlet 2.0 لشهر أبريل 1998 [20]
جافا سيرفليت 1.0 ديسمبر 1996 جزء من مجموعة تطوير Java Servlet (JSDK) 1.0 لشهر يونيو 1997 [14]

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

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

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

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

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

مثال

يقوم المثال التالي بطباعة عدد المرات service()التي تم فيها استدعاء الطريقة الخاصة به.

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

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

استيراد 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() called" ); sharedCounter = 0 ; }           
        
        
          
    

    @Override 
protected void service ( final HttpServletRequest request , final HttpServletResponse response ) throws ServletException , IOException { getServletContext (). log ( "service() called" ); int localCounter ; synchronized ( sharedCounter ) { sharedCounter ++ ; localCounter = sharedCounter ; } response . getWriter (). write ( "زيادة العدد إلى " + localCounter ); // الوصول إلى متغير محلي response . getWriter (). flush (); // flush response }               
        
         
          
            
              
        
            
           
    

    @Override 
public void destroy () { getServletContext (). log ( "destroy() called" ); } }       
        
    

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

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

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

انظر أيضا

الاستشهادات

  1. ^ من تأليف Murach & Urban 2014، ص 170-171، §2 المهارات الأساسية في servlet وJSP - المنظور - الملخص.
  2. ^ "Servlet (Java(TM) EE 7 Specification APIs)". oracle.com . تم الاسترجاع في 2018-07-25 .
  3. ^ Murach & Urban 2014، ص 128-129، §2 المهارات الأساسية في servlet وJSP - كيفية إنشاء servlet وتعيينه.
  4. ^ "Servlet Essentials - Chapter 1". novocode.com . مؤرشف من الأصل في 2017-12-18.
  5. ^ Murach & Urban 2014، ص 40-42، §1 ابدأ بشكل صحيح - البرنامج النصي للمعالجة الخلفية.
  6. ^ Murach & Urban 2014، ص 87، §2 المهارات الأساسية في servlet وJSP.
  7. ^ Murach & Urban 2014، ص 74، §1 البدء بشكل صحيح - مهارات أخرى للعمل مع تطبيقات الويب.
  8. ^ abc Murach & Urban 2014، ص 46-47، §1 ابدأ بشكل صحيح - خطة العمل المشتركة للصفحة الثانية.
  9. ^ فريدمان، مات (26 يونيو 1996). "تقرير مؤتمر JavaOne". JavaWorld . مؤرشف من الأصل في 2018-07-26 . تم الاسترجاع في 2018-07-25 .
  10. ^ Diwanji, Pavani; Connelly, Dave; Wagle, Prasad (May 29, 1996). "Java Server and Servlets" (PDF) . الخوادم وإضافات الخوادم . JavaOne 1996. مؤرشف (PDF) من الأصل في 2000-08-16 . تم الاسترجاع في 2020-02-01 .
  11. ^ تشانج، فيل إنجي (1 يوليو 1997). "مقابلة: فريق Java Web Server يقدم لك ملخصًا موجزًا". JavaWorld . مؤرشف من الأصل في 2018-07-26 . تم الاسترجاع في 2018-07-25 .
  12. ^ تشانج، فيل إنجي (1 يونيو 1997). "Java Web Server Ships!". JavaWorld . مؤرشف من الأصل في 2018-07-26 . تم الاسترجاع في 2018-07-25 .
  13. ^ "Servlet History | community.oracle.com". Weblogs.java.net. 2005-12-10. مؤرشف من الأصل في 2020-08-15 . تم الاسترجاع في 2013-06-14 .
  14. ^ أ ب هانتر، جيسون (مارس 2000). "الخط الزمني لـ Servlet". ما وراء برمجة Java Servlet . مؤتمر O'Reilly حول Java. O'Reilly Media .[ رابط ميت دائم ]
  15. ^ "خادم ويب جافا". Javasoft . Sun Microsystems . مؤرشف من الأصل في 11 يناير 1998 . تم الاسترجاع 01 فبراير 2020 .
  16. ^ "Java Web Server(tm)". Sun Microsystems . مؤرشف من الأصل في 2002-02-06 . تم الاسترجاع في 2020-02-01 .
  17. ^ "Pavni Diwanji". معهد سلامة الأسرة على الإنترنت . مؤرشف من الأصل في 26 يوليو 2018. تم الاسترجاع 12 نوفمبر 2016 .
  18. ^ براءة اختراع أمريكية رقم 5928323، جوسلينج، جيمس أ .؛ ديوانجي، بافني وكونيلي، ديفيد دبليو، "جهاز وطريقة لتوليد المعلومات ديناميكيًا باستخدام كائنات برمجية من جانب الخادم"، نُشرت في 27 يوليو 1999، صدرت في 27 يوليو 1999، وتم تخصيصها لشركة صن مايكروسيستمز 
  19. ^ "ما الجديد في Servlet 3.1؟ - Java EE 7 يتقدم للأمام (Arun Gupta، Miles to go ...)". oracle.com . تم الاسترجاع في 22 نوفمبر 2016 .
  20. ^ Crawford, William; Hunter, Jason (November 1998). "Preface". Java Servlet Programming (1st ed.). O'Reilly Media . p. ix–x. ISBN 978-1-56592-391-1نحن نغطي الإصدار 2.0 من واجهة برمجة تطبيقات Servlet ، والتي تم تقديمها كجزء من Java Web Server 1.1 في ديسمبر 1997 وتم توضيحها من خلال إصدار Java Servlet Development Kit 2.0 في أبريل 1998.
  21. ^ Murach & Urban 2014، ص 160-163، §15 كيفية تطوير servlet - المزيد من المهارات للعمل مع servlet.

مراجع

  • موراش، جويل؛ أوربان، مايكل (2014). موراش، Java Servlets وJSP . ISBN 978-1-890774-78-3.
  • الموقع الرسمي
  • تم أرشفة Servlets.com في 2018-07-25 على موقع Wayback Machine
Retrieved from "https://en.wikipedia.org/w/index.php?title=Jakarta_Servlet&oldid=1245559183"
Original text
Rate this translation
Your feedback will be used to help improve Google Translate