क्या सर्वलेट वर्ग के कई उदाहरण हैं? जैसा कि मैंने "सर्वलेट का प्रत्येक उदाहरण" सुना है क्या कोई इस पर विस्तार कर सकता है?सर्वलेट के प्रत्येक उदाहरण और servlets में सर्वलेट के प्रत्येक थ्रेड के बीच अंतर?
उत्तर
जब सर्वलेट कंटेनर शुरू होता है, यह:
web.xml
पढ़ता है;- क्लासपाथ में घोषित सर्वलेट ढूंढता है; और
- प्रत्येक Servlet लोड करता है और तत्काल को तुरंत चालू करता है।
मोटे तौर पर, इस तरह:
String urlPattern = parseWebXmlAndRetrieveServletUrlPattern();
String servletClass = parseWebXmlAndRetrieveServletClass();
HttpServlet servlet = (HttpServlet) Class.forName(servletClass).newInstance();
servlet.init();
servlets.put(urlPattern, servlet); // Similar to a map interface.
उन सर्वलेट वे स्मृति में संग्रहीत और अनुरोध URL से मेल खाता है हर बार पुन: उपयोग किया जाता है सर्वलेट के url-pattern
जुड़े। अपनी बारी पर
for (Entry<String, HttpServlet> entry : servlets.entrySet()) {
String urlPattern = entry.getKey();
HttpServlet servlet = entry.getValue();
if (request.getRequestURL().matches(urlPattern)) {
servlet.service(request, response);
break;
}
}
GenericServlet#service()
फैसला करता HttpServletRequest#getMethod()
के आधार पर लागू करने की जो doGet()
, doPost()
, आदि की ..: सर्वलेट कंटेनर तो के समान कोड निष्पादित करता है।
आप देखते हैं, servletcontainer प्रत्येक अनुरोध के लिए समान सर्वलेट उदाहरण का पुन: उपयोग करता है। दूसरे शब्दों में: सर्वलेट प्रत्येक अनुरोध के बीच साझा किए जाते हैं। यही कारण है कि सर्वलेट कोड थ्रेडसेफ तरीके लिखना बेहद जरूरी है - जो वास्तव में सरल है: बस अनुरोध अनुरोध या सत्र स्कोप्ड डेटा को सर्वलेट इंस्टेंस चर के रूप में असाइन करें, लेकिन विधि स्थानीय चर के रूप में। जैसे
public class MyServlet extends HttpServlet {
private Object thisIsNOTThreadSafe;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object thisIsThreadSafe;
thisIsNOTThreadSafe = request.getParameter("foo"); // BAD!! Shared among all requests!
thisIsThreadSafe = request.getParameter("foo"); // OK, this is thread safe.
}
}
+1। मैं बस जोड़ दूंगा कि यदि एक ही सर्वलेट वर्ग को web.xml में दो अलग-अलग यूआरएल में मैप किया गया है, तो दो उदाहरण बनाए गए हैं। लेकिन सामान्य सिद्धांत अभी भी है, एक उदाहरण कई अनुरोधों परोसता है। – Yoni
@ बाल्लूसी, बस आश्चर्य है, क्या वेब ऐप से आरंभिक सर्लेट के सेट तक पहुंचने का कोई तरीका है? – shabunc
क्या कक्षा में यह ISNOTThreadSafe वैरिएबल अलग-अलग उपयोगकर्ताओं को साझा किया जाता है या केवल उसी उपयोगकर्ता के विभिन्न पृष्ठों पर साझा किया जाता है। मेरा मतलब यह है कि अगर मैं अपने कंप्यूटर में इस पेज को ब्राउज़ करता हूं और आप अपने कंप्यूटर में चलाते हैं, तो क्या हम इस आईएसएनओटी थ्रेडसेफ के समान स्थान साझा करते हैं? धन्यवाद। – overshadow
नहीं, सर्वलेट का केवल एक उदाहरण है जिसे एकाधिक ग्राहकों से कई अनुरोधों के लिए पुन: उपयोग किया जाता है। यह दो महत्वपूर्ण नियमों की ओर जाता है:
- , एक सर्वलेट में उदाहरण चर का उपयोग नहीं करते आवेदन चौड़ा मूल्यों, सबसे अधिक बार संदर्भ मानकों से प्राप्त के लिए छोड़कर।
- एक सर्वलेट
वहाँ सर्वलेट वर्ग के कई उदाहरण नहीं हो सकता (समान सर्वलेट फिल्टर और JSPs के लिए चला जाता है) में तरीकों synchronized
नहीं बनाते हैं। यहां तक कि जब सर्वलेट का एक उदाहरण होता है, तो यह कई अनुरोधों को संभालने में सक्षम होता है। तो वर्ग स्तर चर का उपयोग नहीं करना बुद्धिमानी है।
जावा सर्वलेट विशिष्टता संस्करण 3.0 (पृ। 6-7) के अनुसार, वहाँ, JVM प्रति घोषणा प्रति एक उदाहरण हो जाएगा जब तक कि सर्वलेट SingleThreadModel लागू करता है जो मामले में JVM प्रति कई उदाहरण हो सकता है।
सर्वलेट विशिष्टता 3. (पृष्ठ 6-7) धारा 2.2.1 एकल थ्रेड मॉडल के बारे में नोट, कहते हैं "सिंगल थ्रेड मॉडेल इंटरफ़ेस को विनिर्देश के इस संस्करण में बहिष्कृत किया गया है । " – Reva
उन लोगों के लिए जो वास्तविक जावास्क्रिप्ट (केवल इसकी एक लाइब्रेरी नहीं) जानते हैं, Servlets को फ़ंक्शन ऑब्जेक्ट्स के रूप में देखा जा सकता है। कार्यात्मक वस्तुओं के रूप में, उनमें से मुख्य कार्य करने के लिए की बजाय कुछ जानकारी को उनकी छाती में संग्रहीत करने के लिए करता है।ऐसी सभी तर्कसंगत वस्तुओं के एक से अधिक उदाहरणों को तुरंत चालू करने की आवश्यकता नहीं है, उसी वर्ग के सभी उदाहरणों के बीच जावा क्लास विधियों को साझा किया जाता है।
हालांकि पहले से ही कुछ अच्छे उत्तर हैं, उनमें से कोई भी वितरित वातावरण में तैनात जावा वेब एप्लिकेशन के बारे में बात नहीं करता है। यह एक व्यावहारिक परिदृश्य है जहां वास्तव में एक एकल सर्वलेट के कई उदाहरण बनाए जाते हैं। एक वितरित वातावरण में आपके पास अनुरोध को संभालने के लिए मशीनों का समूह होता है और अनुरोध इनमें से किसी भी मशीन पर जा सकता है। इनमें से प्रत्येक मशीन अनुरोध को संभालने में सक्षम होना चाहिए और इसलिए प्रत्येक मशीन में आपके JAwesomeServlet का JVM में एक उदाहरण होना चाहिए।
तो, सही कथन प्रत्येक सर्वलेट के लिए प्रति JVM प्रति केवल एक उदाहरण होगा, जब तक यह सिंगल थ्रेड मॉडेल लागू नहीं करता है।
सरल शब्दों में सिंगल थ्रेड मॉडेल का कहना है कि आपको सर्वलेट के प्रति उदाहरण केवल एक थ्रेड होना चाहिए, इसलिए मूल रूप से आपको इसे संभालने के लिए आने वाले अनुरोध के एक उदाहरण को बनाने की आवश्यकता है, जो मूल रूप से समानांतर फैशन में हैंडलिंग अनुरोधों की पूरी अवधारणा को मारता है और सर्वलेट ऑब्जेक्ट सृजन के रूप में एक अच्छा अभ्यास नहीं माना जाता है और अनुरोध को संसाधित करने के लिए तैयार होने से पहले प्रारंभिक समय लगता है।
- 1. सर्वलेट/सर्वलेट-मैपिंग और फ़िल्टर/फ़िल्टर-मैपिंग के बीच अंतर?
- 2. संग्रह और प्रत्येक के बीच अलग अंतर?
- 3. जावा सर्वलेट: भेजने रीडायरेक्ट और सर्वलेट में आगे के बीच का अंतर
- 4. वेब-सर्वर और सर्वलेट कंटेनर के बीच अंतर
- 5. जेनेरिक सर्वलेट, एचटीपीएसर्लेट और एक सर्वलेट के बीच क्या अंतर है?
- 6. सर्वलेट फ़िल्टर और सर्वलेट संदर्भ श्रोता के बीच क्या अंतर है?
- 7. सर्वलेट 3.0 एसिंक्रोनस सर्वलेट
- 8. क्या एक सर्वलेट कंटेनर प्रत्येक आने वाले अनुरोध के लिए नया javax.servlet.http.HttpServlet उदाहरण बनाना चाहिए?
- 9. क्या प्रत्येक अनुरोध एक ही सर्वलेट ऑब्जेक्ट तक पहुंचता है?
- 10. सर्वलेट
- 11. के बीच differenct/और/* सर्वलेट यूआरएल मैच पैटर्न में
- 12. एक सर्वलेट उदाहरण
- 13. पोस्ट डेटा के साथ जीडब्ल्यूटी से कॉल सर्वलेट और सर्वलेट
- 14. 10 ग्राहक एक सर्वलेट के लिए अनुरोध करते हैं। कितने सर्वलेट उदाहरण बनाए गए हैं
- 15. मानचित्र, प्रत्येक के बीच क्या अंतर है, और एकत्रित करें?
- 16. डी 3 जावास्क्रिप्ट फोरैच के बीच अंतर और प्रत्येक
- 17. रूबी: लूप और प्रत्येक लूप के बीच क्या अंतर है?
- 18. सर्वलेट 3.0
- 19. सर्वलेट: सेव: सर्वलेट
- 20. सर्वलेट
- 21. एनोटेटेड जेटलेट एनोटेटेड सर्वलेट पैटर्न के साथ?
- 22. सर्वलेट
- 23. सर्वलेट
- 24. सर्वलेट
- 25. सर्वलेट
- 26. सर्वलेट
- 27. सर्वलेट
- 28. सर्वलेट
- 29. समवर्ती उपयोगकर्ताओं को संभालने के लिए मल्टीथ्रेड GAE servlets
- 30. दूरस्थ servlets
नहीं! वेब कंटेनर केवल नए अनुरोध() विधि को कॉल करके सर्व अनुरोध पर सर्वलेट का केवल एक उदाहरण बनाता है। –