2012-09-20 18 views
16

क्या प्रत्येक HTTP अनुरोध एक ही सर्वलेट ऑब्जेक्ट तक पहुंचता है लेकिन एक अलग थ्रेड में? या यह एक नया धागा और नया सर्वलेट इंस्टेंस बनाता है?क्या प्रत्येक अनुरोध एक ही सर्वलेट ऑब्जेक्ट तक पहुंचता है?

+0

अनुरोध पर सर्वलेट को तत्काल क्यों नहीं देना है? –

+0

संभावित डुप्लिकेट [सर्वलेट कैसे काम करते हैं? इंस्टेंटेशन, सत्र चर और मल्टीथ्रेडिंग] (http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation- सत्र- variables-and-multithreading) – BalusC

उत्तर

12

कंटेनर उसी सर्वलेट उदाहरण का उपयोग करेगा यदि आपका सर्वलेट SingleThreadModel लागू नहीं करता है। अन्यथा कोई गारंटी नहीं है कि Servlet ऑब्जेक्ट हिट हो गया है। यदि आवश्यक हो तो कंटेनर अधिक सर्वलेट उदाहरण बनाने के लिए स्वतंत्र है। लेकिन अनुरोध अलग-अलग धागे पर आते हैं, जरूरी नहीं कि नव निर्मित (संजय का उल्लेख किया गया हो)।

सर्वलेट 3.0 विनिर्देश से:

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

...

आम तौर पर वेब कंटेनर अलग धागे पर सेवा विधि के समवर्ती निष्पादन द्वारा एक ही सर्वलेट को समवर्ती अनुरोध को संभालती है।

7

प्रत्येक HTTP अनुरोध एक नया धागा बनाता है लेकिन सर्वलेट के उसी उदाहरण तक पहुंचता है।

संपादित करें: एक सर्वर नोड के मामले में, आपके पास उस नोड पर एक ही सर्वलेट उदाहरण होगा। लोड संतुलन/कई सर्वरों के मामले में आपके पास आमतौर पर जावा वीएम प्रति एक उदाहरण होगा।

+6

मुझे पूरा यकीन है कि यह वास्तव में नहीं है * * हमेशा एक नया धागा बनाओ; एक मौजूदा थ्रेड पूल से एक मुफ्त थ्रेड उठाता है। –

+1

@ संजयट.शर्मा आप सही हैं, यह अक्सर इस तरह से किया जाता है (प्रदर्शन कारणों से), लेकिन यह एप्लिकेशन सर्वर/सर्वलेट कंटेनर का कार्यान्वयन विवरण है और आपका कोड उस पर निर्भर नहीं होना चाहिए –

संबंधित मुद्दे