java - Difference between each instance of servlet and each thread of servlet in servlets? -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 6 उत्तर

क्या सर्वलेट का कई उदाहरण हैं कक्षा? जैसा कि मैंने "सबलेट का प्रत्येक उदाहरण" सुना है, क्या कोई इस पर विस्तृत हो सकता है?

जब सर्विसलेट कंटेनर शुरू होता है, यह:

  1. web.xml पढ़ता है
  2. वर्गपथ में घोषित Servlets को पाता है;
  3. प्रत्येक सर्लेट लोड करता है और इन्स्टैंट करता है केवल एक बार

मोटे तौर पर, इस तरह से:

  स्ट्रिंग UrlPattern = parseWebXmlAndRetrieveServletUrlPattern (); स्ट्रिंग सर्वलेट क्लास = पर्स वेबकैम एंड्रेट्रवेसर्वक्लास्ट (); HttpServlet servlet = (एचटीटीपी सर्वलट) क्लास.फ़ेयरनाम (सर्वलेट क्लास) .नवीन इंस्टेंस (); servlet.init (); Servlets.put (urlPattern, servlet); // एक मानचित्र इंटरफ़ेस के समान।  

उन सर्वोलेट को स्मृति में संग्रहीत किया जाता है और हर बार अनुरोध यूआरएल सर्लेट के संबद्ध url-pattern से मेल खाती है। सर्वलेट कंटेनर फिर समान के कोड को कार्यान्वित करता है:

  के लिए (प्रविष्टि & lt; स्ट्रिंग, एचटीटीपी सर्विले & gt; प्रविष्टि: servlets.entrySet ()) {स्ट्रिंग urlPattern = entry.getKey (); HttpServlet servlet = entry.getValue (); यदि (request.getRequestURL)। मैचों (urlPattern)) {servlet.service (अनुरोध, प्रतिक्रिया); टूटना; }}  

यह तय करता है कि doGet () , doPost () , आदि में से किस पर आधारित ।

आप देख सकते हैं, प्रत्येक अनुरोध के लिए सर्वलेट कंटेनर एक ही सर्वोलेट उदाहरण को पुनः उपयोग करता है दूसरे शब्दों में: servlets को हर अनुरोध के बीच साझा किया जाता है यही कारण है कि सर्वलेट कोड को धागा से लिखने के लिए बहुत ही महत्वपूर्ण है - जो वास्तव में सरल है: बस नहीं असाइन करें या सत्र को स्कॉच डेटा को सर्वोलेट इंस्टेंस वैरिएबल के रूप में दें, लेकिन विधि स्थानीय वैरिएबल के रूप में। उदा।

  सार्वजनिक वर्ग MyServlet HttpServlet {निजी ऑब्जेक्ट का विस्तार करती है IISNotThreadSafe; सुरक्षित शून्य doGet (HttpServletRequest अनुरोध, HttpServletResponse प्रतिक्रिया) ServletException फेंकता है, IOException {ऑब्जेक्ट इस ITSThreadSafe; इसआईएसनोटथ्रेडसाफ = अनुरोध। जापैमेटर ("एफू"); // खराब!! सभी अनुरोधों के बीच साझा! यह आईस्तथासफ़ = अनुरोध। जापैमेटर ("एफू"); // ठीक है, यह धागा सुरक्षित है }}  

Comments

Popular posts from this blog

.net - C# List<T>.Find(x=>x.Rectangle.Contains(Point)) FAIL -

iphone - Smoothing a rounded stroke in Core Graphics -

Best practice for URL redirection in ASP.NET web application -