1.1 इंटरफ़ेस सर्वलेट
आज हम एक नया और दिलचस्प विषय - सर्वलेट्स शुरू कर रहे हैं । यह जावा में सर्वलेट्स का जोड़ था जिसके कारण जावा बड़े सर्वर अनुप्रयोगों के लिए वास्तविक मानक बन गया। दुनिया के सभी एंटरप्राइज़ सॉफ़्टवेयर का 80% जावा में लिखा गया है। और चीन में सब कुछ 100% है। तो सर्वलेट्स क्या हैं?
एक सर्वलेट वास्तव में एक जावा प्रोग्राम को वेब सेवा में बदल देता है और इसे ग्राहकों से अनुरोधों को संसाधित करने की अनुमति देता है। और ऐसा था...
90 के दशक में, वर्ल्ड वाइड वेब के आगमन के तुरंत बाद, वेब क्लाइंट (ब्राउज़र) और वेब सर्वर दिखाई दिए। वेब सर्वर आमतौर पर उस फ़ाइल को वितरित करते हैं जिसे उन्होंने इंटरनेट पर संग्रहीत किया था: html पृष्ठ, स्क्रिप्ट, चित्र, आदि।
किसी बिंदु पर, हर कोई इस निष्कर्ष पर पहुंचा कि दोनों पक्षों को स्मार्ट बनाना आवश्यक होगा। जावास्क्रिप्ट को HTML पेजों में जोड़ा गया था, और प्लगइन्स को सर्वरों में जोड़ा गया था - विशेष स्क्रिप्ट जिन्हें कुछ अनुरोधों के जवाब में बुलाया गया था और सर्वर के व्यवहार को अधिक लचीला और स्मार्ट बना दिया था।
तो एक सर्वलेट एक ऐसा जावा प्लगइन है जिसे बनाया गया था Java web-server
और कुछ पृष्ठों के लिए अनुरोध किए जाने पर इसे जावा कोड निष्पादित करने की अनुमति दी गई थी। और पहले से ही यह जावा कोड, सर्वलेट क्लास से विरासत में मिली कक्षा द्वारा दर्शाया गया है, जो इसके डेवलपर्स का इरादा था।
और जैसा कि आप पहले से ही जानते हैं, सबसे लोकप्रिय जावा वेब सर्वर टॉमकैट है । नाम, वैसे, कार्टून "टॉम एंड जेरी" से बिल्ली टॉम के सम्मान में।
टॉमकैट सर्वलेट्स के साथ कैसे इंटरैक्ट करता है? वास्तव में, यह प्रक्रिया मानकीकृत है और इसे सर्वलेट जीवन चक्र कहा जाता है । इसमें, सर्वलेट एक लोड करने योग्य वस्तु है, और एक वेब सर्वर एक सर्वलेट कंटेनर है ।
यदि सर्वलेट अभी तक लोड नहीं हुआ है , तो:
- सर्वलेट वर्ग कंटेनर द्वारा लोड किया जाता है।
- कंटेनर सर्वलेट के वर्ग (ऑब्जेक्ट) का एक उदाहरण बनाता है।
- कंटेनर
init()
सर्वलेट ऑब्जेक्ट पर एक विधि कहता है। विधि को केवल एक बार कहा जाता है।
मानक कार्य चक्र - ग्राहक अनुरोध को पूरा करना :
- प्रत्येक अनुरोध को एक अलग थ्रेड में संसाधित किया जाता है।
- कंटेनर
service()
सर्वलेट पर एक विधि को कॉल करता है और वहां ServletRequest और ServletResponse ऑब्जेक्ट पास करता है। - सर्वलेट को समाप्त करने के लिए
destroy()
सर्वलेट ऑब्जेक्ट पर एक विधि कहा जाता है। इसे केवल एक बार कहा जाता है।
सर्वलेट के समाप्त होने के कई कारण हो सकते हैं:
- प्रोग्रामर वेब सर्वर को पुनरारंभ करता है, सभी सर्वलेट्स को इनायत से बंद करना आवश्यक है।
- प्रोग्रामर सर्वलेट का एक नया संस्करण लोड करता है, पुराने को सही ढंग से अनलोड किया जाना चाहिए।
- और इसी तरह।
मुख्य बात याद रखें: वेब सर्वर और उसके सर्वलेट्स को बिना किसी विफलता के काम करना चाहिए और महीनों तक पुनरारंभ करना चाहिए, प्रति मिनट हजारों अनुरोधों को पूरा करना चाहिए। इसलिए, सर्वलेट को लोड करने, काम करने और उतारने दोनों के लिए कोड हमेशा बहुत उच्च गुणवत्ता में लिखा जाना चाहिए।
1.2 एचटीटीपी सर्वलेट क्लास
सर्वलेट क्लास सर्वलेट और कंटेनर के काम करने के तरीके को मानकीकृत करने के लिए मौजूद है। प्रोग्रामर सीधे इस वर्ग के साथ काम नहीं करते। ठीक है, वे शायद ही कभी काम करते हैं। सबसे अधिक इस्तेमाल किया जाने वाला वर्ग HttpServlet
सर्वलेट से विरासत में मिला है।
इस वर्ग में कई विधियाँ हैं जो हमारे लिए उपयोगी होंगी। आप अक्सर उनका इस्तेमाल करेंगे:
तरीका | विवरण | |
---|---|---|
1 | init() |
सर्वलेट लोड होने पर एक बार कॉल किया जाता है |
2 | destroy() |
सर्वलेट के अनलोड होने पर एक बार कॉल किया जाता है |
3 | service(HttpRequest, HttpResponse) |
सर्वलेट के लिए हर नए अनुरोध के लिए कॉल किया गया |
4 | doGet(HttpRequest, HttpResponse) |
सर्वलेट के लिए प्रत्येक नए GET अनुरोध के लिए कॉल किया गया |
5 | doPost(HttpRequest, HttpResponse) |
सर्वलेट के लिए प्रत्येक नए POST अनुरोध के लिए कॉल किया गया |
6 | doHead(HttpRequest, HttpResponse) |
सर्वलेट के लिए प्रत्येक नए हेड अनुरोध के लिए कॉल किया गया |
7 | doDelete(HttpRequest, HttpResponse) |
सर्वलेट के हर नए DELETE अनुरोध के लिए कॉल किया गया |
8 | doPut(HttpRequest, HttpResponse) |
सर्वलेट के लिए हर नए PUT अनुरोध के लिए कॉल किया गया |
init()
और विधियाँ destroy()
सर्वलेट वर्ग से विरासत में मिली हैं। इसलिए, यदि आप उन्हें अपने सर्वलेट में ओवरराइड करने का निर्णय लेते हैं, तो आपको बेस क्लास से उनके कार्यान्वयन को भी कॉल करना होगा। इसके लिए कमांड का प्रयोग किया जाता है super.method name()
।
सर्वलेट उदाहरण:
public class FirstHttpServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Getting the parameter “secret” from request
String secret = request.getParameter("secret");
// Put parameter “secret” into Http-session
HttpSession session = request.getSession(true);
session.setAttribute("secret", secret);
// Print HTML as response for browser
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Header</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet example "+ secret +"</h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
}
1.3 सेवा (HttpServletRequest, HttpServletResponse) विधि
सर्वलेट के नजरिए से क्लाइंट रिक्वेस्ट की प्रोसेसिंग को देखें तो चीजें कुछ इस तरह हैं।
प्रत्येक क्लाइंट अनुरोध के लिए, कंटेनर (वेब सर्वर) बनाता है HttpServletRequest
और ऑब्जेक्ट करता है HttpServletResponse
, और फिर service(HttpServletRequest request, HttpServletResponse response)
संबंधित सर्वलेट पर एक विधि को कॉल करता है। इन वस्तुओं को पास किया जाता है ताकि विधि आवश्यक डेटा ले सके request
और कार्य के परिणाम को इसमें डाल सके response
।
विधि का service()
एक डिफ़ॉल्ट कार्यान्वयन है। यदि इसे पुनर्परिभाषित नहीं किया जाता है, तो इसे क्रियान्वित किया जाएगा। वह यही करता है।
विधि service()
HTTP विधि प्रकार को अनुरोध (GET, POST, ...) से निर्धारित करती है और अनुरोध के अनुरूप विधि को कॉल करती है।
तरीका | विवरण | |
---|---|---|
1 | service(HttpRequest, HttpResponse) |
सर्वलेट के लिए हर नए अनुरोध के लिए कॉल किया गया |
2 | doGet(HttpRequest, HttpResponse) |
सर्वलेट के लिए प्रत्येक नए GET अनुरोध के लिए कॉल किया गया |
3 | doPost(HttpRequest, HttpResponse) |
सर्वलेट के लिए प्रत्येक नए POST अनुरोध के लिए कॉल किया गया |
4 | doHead(HttpRequest, HttpResponse) |
सर्वलेट के लिए प्रत्येक नए हेड अनुरोध के लिए कॉल किया गया |
5 | doDelete(HttpRequest, HttpResponse) |
सर्वलेट के हर नए DELETE अनुरोध के लिए कॉल किया गया |
6 | doPut(HttpRequest, HttpResponse) |
सर्वलेट के लिए हर नए PUT अनुरोध के लिए कॉल किया गया |
आपकी कक्षा में, आप या तो एक विधि को फिर से परिभाषित कर सकते हैं service()
, या इसे अकेला छोड़ सकते हैं, लेकिन फिर आवश्यकतानुसार विधियों doGet()
, ... को फिर से परिभाषित कर सकते हैं।doPost()
GO TO FULL VERSION