जकार्ता सर्वलेट

From Vigyanwiki
Revision as of 18:37, 20 March 2023 by Manidh (talk | contribs)
Original author(s)पावनी दीवान जी
Developer(s)एक्लिप्स फाउंडेशन
Initial releaseDecember 1996; 27 years ago (1996-12)
Stable release
6.0 / May 31, 2022; 2 years ago (2022-05-31)
Written inजावा
PlatformJakarta EE
Size2.56 MB
Typeसॉफ्टवेयर घटक वेब एपीआई के लिए
Licenseएक्लिप्स पब्लिक लाइसेंस
Websitejakarta.ee/specifications/servlet/
जावा सर्वर पेज फ़ाइल का जीवन

जकार्ता सर्वलेट (पूर्व में जावा सर्वलेट) एक जावा सॉफ्टवेयर घटक है जो सर्वर की क्षमताओं का विस्तार करता है। हालांकि सर्वलेट्स कई प्रकार के अनुरोधों का जवाब दे सकते हैं, वे वेब सर्वर पर वेब अनुप्रयोगों को होस्ट करने के लिए सामान्यतः वेब कंटेनरों को लागू करते हैं और इस प्रकार सर्वर-साइड सर्वलेट वेब एपीआई के रूप में अर्हता प्राप्त करते हैं। ऐसे वेब सर्वलेट PHP और ASP.NET जैसी अन्य गतिशील वेब सामग्री प्रौद्योगिकियों के जावा समकक्ष हैं।

परिचय

जकार्ता सर्वलेट जकार्ता ईई में एक जावा क्लास को प्रोसेस या स्टोर करता है जो जकार्ता सर्वलेट एपीआई के अनुरूप है,[1] जावा क्लासेस को लागू करने के लिए एक मानक है जो अनुरोधों का जवाब देता है। सिद्धांत रूप में सर्वलेट्स किसी भी क्लाइंट-सर्वर प्रोटोकॉल पर संचार कर सकते हैं, लेकिन वे अक्सर एचटीटीपी के साथ उपयोग किए जाते हैं। इस प्रकार "सर्वलेट" को अक्सर "एचटीटीपी सर्वलेट" के लिए आशुलिपि के रूप में प्रयोग किया जाता है।[2] इस प्रकार, एक सॉफ्टवेयर डेवलपर जावा प्लेटफॉर्म का उपयोग करके वेब सर्वर में गतिशील सामग्री जोड़ने के लिए एक सर्वलेट का उपयोग कर सकता है। उत्पन्न सामग्री सामान्यतः एचटीएमएल है, लेकिन अन्य डेटा जैसे एक्सएमएल और अधिक सामान्यतः JSON हो सकती है। सर्वलेट एचटीटीपी कुकीज़, या यूआरएल मैपिंग का उपयोग करके कई सर्वर लेन-देन में सत्र चर में स्थिति बनाए रख सकते हैं।

जकार्ता सर्वलेट एपीआई, कुछ हद तक, वेब सेवाओं के लिए दो मानक जावा प्रौद्योगिकियों द्वारा अधिगृहीत की गई है:

  • जकार्ता रेस्टफुल वेब सर्विसेज (JAX-RS 2.0) AJAX, JSON और REST सेवाओं के लिए उपयोगी, और
  • जकार्ता XML वेब सर्विसेज (JAX-WS) SOAP वेब सर्विसेज के लिए उपयोगी है।

सर्वलेट को तैनात करने और चलाने के लिए, एक वेब कंटेनर का उपयोग किया जाना चाहिए। एक वेब कंटेनर (सर्वलेट कंटेनर के रूप में भी जाना जाता है) अनिवार्य रूप से एक वेब सर्वर का घटक है जो सर्वलेट्स के साथ इंटरैक्ट करता है। वेब कंटेनर सर्वलेट्स के जीवनचक्र को प्रबंधित करने, किसी विशेष सर्वलेट के लिए URL मैप करने और यह सुनिश्चित करने के लिए ज़िम्मेदार है कि URL अनुरोधकर्ता के पास सही पहुँच अधिकार हैं।

जावा पैकेज पदानुक्रम जावैक्स.सर्वलेट में निहित सर्वलेट एपीआई, वेब कंटेनर और एक सर्वलेट की अपेक्षित बातचीत को परिभाषित करता है।[2]

एक सर्वलेट एक वस्तु है जो अनुरोध प्राप्त करती है और उस अनुरोध के आधार पर प्रतिक्रिया उत्पन्न करती है। मूल सर्वलेट पैकेज जावा ऑब्जेक्ट्स को सर्वलेट अनुरोधों और प्रतिक्रियाओं का प्रतिनिधित्व करने के साथ-साथ सर्वलेट के विन्यास पैरामीटर और निष्पादन पर्यावरण को प्रतिबिंबित करने के लिए परिभाषित करता है। पैकेज javax.servlet.http सामान्य सर्वलेट तत्वों के HTTP-विशिष्ट उपवर्गों को परिभाषित करता है, जिसमें सत्र प्रबंधन ऑब्जेक्ट शामिल हैं जो वेब सर्वर और क्लाइंट के बीच कई अनुरोधों और प्रतिक्रियाओं को ट्रैक करते हैं। सर्वलेट्स को WAR फ़ाइल में वेब एप्लिकेशन के रूप में पैक किया जा सकता है।

जकार्ता सर्वर पेज कंपाइलर द्वारा जकार्ता सर्वर पेज (जेएसपी) से स्वचालित रूप से सर्वलेट्स उत्पन्न किए जा सकते हैं। सर्वलेट्स और जेएसपी के बीच अंतर यह है कि सर्वलेट सामान्यतः जावा कोड के अंदर एचटीएमएल एम्बेड करता है, जबकि जेएसपी एचटीएमएल में जावा कोड एम्बेड करता है। जबकि एचटीएमएल उत्पन्न करने के लिए सर्वलेट्स का प्रत्यक्ष उपयोग (जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है) दुर्लभ हो गया है, जकार्ता ईई (जेएसएफ) में उच्च-स्तरीय एमवीसी वेब फ्रेमवर्क अभी भी स्पष्ट रूप से सर्वलेट तकनीक का उपयोग करता है। फेससर्वलेट के माध्यम से निम्न-स्तरीय अनुरोध/प्रतिक्रिया प्रबंधन के लिए। "मॉडल 2" नामक एक पैटर्न में जेएसपी के संयोजन के साथ सर्वलेट का उपयोग करने के लिए कुछ पुराना उपयोग है, जो मॉडल-व्यू-कंट्रोलर का झुकाव है।

इतिहास

जावा सर्वलेट एपीआई की पहली सार्वजनिक घोषणा मई 1996 में उद्घाटन जावावन सम्मेलन में की गई थी।[3][4] सम्मेलन में घोषणाओं के लगभग दो महीने बाद, जावासॉफ्ट वेबसाइट पर पहला सार्वजनिक कार्यान्वयन उपलब्ध कराया गया था। यह जावा वेब सर्वर (JWS; तब इसके कोडनेम जीव्स द्वारा जाना जाता था) का पहला अल्फा था[5] जिसे अंततः 5 जून, 1997 को एक उत्पाद के रूप में भेज दिया जाएगा।[6]

Java.net पर अपने ब्लॉग में सन दिग्गज और ग्लासफिश के प्रमुख जिम ड्रिस्कॉल ने सर्वलेट प्रौद्योगिकी के इतिहास का विवरण दिया है।[7] जेम्स गोस्लिंग ने पहली बार जावा के शुरुआती दिनों में सर्वलेट्स के बारे में सोचा था, लेकिन यह अवधारणा दिसंबर 1996 तक एक उत्पाद नहीं बन पाई जब सन ने जेडब्ल्यूएस को भेज दिया। [8][9][10] यह पहले था जो अब जकार्ता ईई को एक विनिर्देश में बनाया गया था।

सर्वलेट1 विनिर्देश पावनी दीवानजी द्वारा बनाया गया था[11][12] जब उसने सन माइक्रोसिस्टम्स में काम किया, जून 1997 में संस्करण 1.0 को अंतिम रूप दिया गया। संस्करण 2.2 के साथ शुरू करते हुए, विनिर्देश जावा सामुदायिक प्रक्रिया के तहत विकसित किया गया था।

सर्वलेट एपीआई इतिहास

सर्वलेट एपीआई संस्करण मुक्त विनिर्देश प्लैटफ़ॉर्म महत्वपूर्ण परिवर्तन
जकार्ता सर्वलेट 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 "जावा" ट्रेडमार्क से नाम बदला गया
जावा सर्वलेट 4.0 सितंबर 2017 जेएसआर 369 जावा ईई 8 एचटीटीपी/2
जावा सर्वलेट 3.1 मई 2013 जेएसआर 340 जावा ईई 7 नॉन-ब्लॉकिंग I/O, HTTP प्रोटोकॉल अपग्रेड मैकेनिज्म ( वेबसॉकेट )[13]
जावा सर्वलेट 3.0 दिसंबर 2009 जेएसआर 315 जावा ईई 6, जावा एसई 6 प्लग करने की क्षमता, विकास में आसानी, Async सर्वलेट, सुरक्षा, फ़ाइल अपलोडिंग
जावा सर्वलेट 2.5 सितंबर 2005 जेएसआर 154 जावा ईई 5, जावा एसई 5 जावा एसई 5 की आवश्यकता है, एनोटेशन का समर्थन करता है
जावा सर्वलेट 2.4 नवंबर 2003 जेएसआर 154 जे2ईई 1.4, जे2एसई 1.3 web.xml XML स्कीमा का उपयोग करता है
जावा सर्वलेट 2.3 अगस्त 2001 जेएसआर 53 जे2ईई 1.3, जे2एसई 1.2 इसका जोड़Filter
जावा सर्वलेट 2.2 अगस्त 1999 जेएसआर 902 , जेएसआर 903 जे2ईई 1.2, जे2एसई 1.2 J2EE का हिस्सा बना, .war फ़ाइलों में स्वतंत्र वेब एप्लिकेशन पेश किए
जावा सर्वलेट 2.1 नवंबर 1998 2.1a अनिर्दिष्ट पहला आधिकारिक विनिर्देश, जोड़ा गया RequestDispatcher,ServletContext
जावा सर्वलेट 2.0 दिसंबर 1997 जेडीके 1.1 अप्रैल 1998 का हिस्सा जावा सर्वलेट डेवलपमेंट किट 2.0[14]
जावा सर्वलेट 1.0 दिसंबर 1996 जून 1997 जावा सर्वलेट डेवलपमेंट किट (जेएसडीके) 1.0 [8]

सर्वलेट का जीवन चक्र

सर्वलेट के जीवन चक्र के लिए तीन विधियाँ केंद्रीय हैं। ये init(), service(), और destroy() वे प्रत्येक सर्वलेट द्वारा कार्यान्वित किए जाते हैं और सर्वर द्वारा विशिष्ट समय पर लागू किए जाते हैं।

  • सर्वलेट जीवन चक्र के प्रारंभिक चरण के दौरान, वेब कंटेनर init() विधि को कॉल करके सर्वलेट उदाहरण को प्रारंभ करता है, javax.servlet.ServletConfig इंटरफ़ेस को लागू करने वाली वस्तु को पारित करता है। यह कॉन्फ़िगरेशन ऑब्जेक्ट सर्वलेट को वेब एप्लिकेशन से नाम-मूल्य आरंभीकरण मापदंडों तक पहुंचने की अनुमति देता है।
  • आरंभीकरण के बाद, सर्वलेट उदाहरण क्लाइंट अनुरोधों को पूरा कर सकता है। प्रत्येक एचटीटीपी अनुरोध संदेश को अपने अलग थ्रेड में सेवित किया जाता है। वेब कंटेनर कॉल करता है service() प्रत्येक अनुरोध के लिए सर्वलेट की विधि। service() विधि अनुरोध के प्रकार को निर्धारित करती है और अनुरोध को संभालने के लिए उपयुक्त विधि को भेजती है। सर्वलेट के विकासकर्ता को इन विधियों के लिए कार्यान्वयन प्रदान करना चाहिए। यदि किसी ऐसी विधि के लिए अनुरोध किया जाता है जो सर्वलेट द्वारा लागू नहीं की जाती है, तो मूल वर्ग की विधि को कहा जाता है, जिसके परिणामस्वरूप सामान्यतः अनुरोधकर्ता को त्रुटि वापस आ जाती है।
  • अंत में, वेब कंटेनर कॉल करता है destroy() विधि जो सर्वलेट को सेवा से बाहर ले जाती है। destroy()विधि, जैसे init()सर्वलेट के जीवन चक्र में केवल एक बार कॉल किया जाता है।

निम्नलिखित इन विधियों का एक विशिष्ट उपयोगकर्ता परिदृश्य है।

  1. मान लें कि एक उपयोगकर्ता एक समान संसाधन लोकेटर पर जाने का अनुरोध करता है।
    • ब्राउज़र तब इस यूआरएल के लिए एक एचटीटीपी अनुरोध उत्पन्न करता है।
    • यह अनुरोध तब उपयुक्त सर्वर को भेजा जाता है।
  2. एचटीटीपी अनुरोध वेब सर्वर द्वारा प्राप्त किया जाता है और सर्वलेट कंटेनर को अग्रेषित किया जाता है।
    • कंटेनर इस अनुरोध को एक विशेष सर्वलेट में मैप करता है।
    • सर्वलेट को गतिशील रूप से पुनर्प्राप्त किया जाता है और कंटेनर के पता स्थान में लोड किया जाता है।
  3. कंटेनर आह्वान करता है init() सर्वलेट की विधि।
    • यह विधि तभी शुरू की जाती है जब सर्वलेट को पहली बार मेमोरी में लोड किया जाता है।
    • सर्वलेट को इनिशियलाइज़ेशन पैरामीटर पास करना संभव है ताकि वह खुद को कॉन्फ़िगर कर सके।
  4. कंटेनर आह्वान करता है service() सर्वलेट की विधि।
    • एचटीटीपी अनुरोध को संसाधित करने के लिए इस विधि को कहा जाता है।
    • सर्वलेट एचटीटीपी अनुरोध में प्रदान किए गए डेटा को पढ़ सकता है।
    • सर्वलेट क्लाइंट के लिए एचटीटीपी प्रतिक्रिया भी तैयार कर सकता है।
  5. सर्वलेट कंटेनर के एड्रेस स्पेस में रहता है और क्लाइंट से प्राप्त किसी अन्य एचटीटीपी अनुरोध को संसाधित करने के लिए उपलब्ध होता है।
    • service() विधि प्रत्येक एचटीटीपी अनुरोध के लिए कहा जाता है।
  6. कंटेनर, किसी बिंदु पर, सर्वलेट को उसकी मेमोरी से अनलोड करने का निर्णय ले सकता है।
    • एल्गोरिदम जिसके द्वारा यह निर्णय लिया जाता है, प्रत्येक कंटेनर के लिए विशिष्ट होता है।
  7. कंटेनर सर्वलेट्स को कॉल करता है destroy() सर्वलेट के लिए आवंटित फ़ाइल हैंडल जैसे किसी भी संसाधन को छोड़ने की विधि; महत्वपूर्ण डेटा को लगातार स्टोर में सहेजा जा सकता है।
  8. सर्वलेट और उसकी वस्तुओं के लिए आवंटित मेमोरी को तब कचरा एकत्र किया जा सकता है।

उदाहरण

निम्न उदाहरण सर्वलेट कितनी बार प्रिंट करता है service() विधि कहा जाता था।

ध्यान दें कि HttpServlet, GenericServlet का एक उपवर्ग है, जो सर्वलेट इंटरफ़ेस का कार्यान्वयन है।

service() की विधि HttpServlet वर्ग तरीकों के लिए अनुरोध भेजता है doGet(), doPost(), doPut(), doDelete(), और इसी तरह; एचटीटीपी अनुरोध के अनुसार। नीचे दिए गए उदाहरण में service() अधिलेखित है और यह भेद नहीं करता है कि यह कौन सी एचटीटीपी अनुरोध विधि प्रदान करता है।

import java.io.IOException;

import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import 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("Incrementing the count to " + localCounter);  // accessing a local variable
    }

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

कंटेनर सर्वर

कई उत्पादों में सर्वलेट तकनीक के विनिर्देश लागू किए गए हैं। वेब कंटेनर पृष्ठ पर कार्यान्वयनों की सूची देखें।

अन्य प्रकार के सर्वलेट कंटेनर भी हैं जैसे एसआईपी सर्वलेट्स के लिए, उदाहरण के लिए, सेलफिन हैं।

संदर्भ

  1. "Servlet (Java(TM) EE 7 Specification APIs)". oracle.com. Retrieved 2018-07-25.
  2. 2.0 2.1 "Servlet Essentials - Chapter 1". novocode.com. Archived from the original on 2017-12-18.
  3. Freedman, Matt (June 26, 1996). "JavaOne conference report". JavaWorld.
  4. Diwanji, Pavani; Connelly, Dave; Wagle, Prasad (May 29, 1996). "Java Server and Servlets" (PDF). Servers and Server Extensions. JavaOne 1996. Archived (PDF) from the original on 2000-08-16. Retrieved 2020-02-01.
  5. Chang, Phil Inje (July 1, 1997). "Interview: The Java Web Server team gives you the skinny". JavaWorld. Retrieved 2018-07-25.
  6. Chang, Phil Inje (June 1, 1997). "Java Web Server ships!". JavaWorld. Retrieved 2018-07-25.
  7. "Servlet History | community.oracle.com". Weblogs.java.net. 2005-12-10. Retrieved 2013-06-14.
  8. 8.0 8.1 Hunter, Jason (March 2000). "Servlet Timeline". Beyond Java Servlet Programming. O'Reilly Conference on Java. O'Reilly Media.
  9. "Java Web Server". Javasoft. Sun Microsystems. Archived from the original on 1998-01-11. Retrieved 2020-02-01.
  10. "Java Web Server(tm)". Sun Microsystems. Archived from the original on 2002-02-06. Retrieved 2020-02-01.
  11. "Pavni Diwanji". Family Online Safety Institute. Retrieved 12 November 2016.
  12. US patent 5928323, Gosling, James A.; Diwanji, Pavni & Connelly, David W., "Apparatus and method for dynamically generating information with server-side software objects", published 1999-07-27, issued 1999-07-27, assigned to Sun Microsystems 
  13. "What's new in Servlet 3.1 ? - Java EE 7 moving forward (Arun Gupta, Miles to go ...)". oracle.com. Retrieved 22 November 2016.
  14. Crawford, William; Hunter, Jason (November 1998). "Preface". Java Servlet Programming (1st ed.). O'Reilly Media. p. ix–x. ISBN 978-1-56592-391-1. We cover Version 2.0 of the Servlet API, which was introduced as part of the Java Web Server 1.1 in December 1997 and clarified by the release of the Java Servlet Development Kit 2.0 in April 1998.

बाहरी संबंध