कैसे बना सकता हूं मैं एक थ्रेड सुरक्षित जेएसपी पेज बनाना चाहता हूं। सिंगल थ्रेड मॉडेल इंटरफेस को कार्यान्वित करके सर्वलेट में संभव है लेकिन मुझे नहीं पता कि जेएसपी पेज में इसे कैसे किया जाए।मैं थ्रेड सुरक्षित जेएसपी पेज
उत्तर
सैद्धांतिक रूप से, जेएसपी पृष्ठों को isThreadSafe
पृष्ठ निर्देशक विशेषता के माध्यम से थ्रेडसेफ के रूप में इंगित किया जा सकता है। झूठी मान निर्धारित करना, कंटेनर को पेज लेवल ऑब्जेक्ट्स तक पहुंच सिंक्रनाइज़ करने के लिए मिलेगा (और सत्र और एप्लिकेशन स्कोप्ड ऑब्जेक्ट्स या किसी अन्य किस्म की ऑब्जेक्ट्स के लिए नहीं)। जाहिर है, यह अभी भी डेवलपर की ज़िम्मेदारी है ताकि यह सुनिश्चित किया जा सके कि कोड के थ्रेड असुरक्षित क्षेत्रों में सिंक्रोनस पहुंच हो।
मोरवोवर, सिंगल थ्रेड मॉडेल इंटरफ़ेस को सर्वलेट विशिष्टता रिलीज 2.4 में भी बहिष्कृत कर दिया गया है। सिंगल थ्रेड मॉडेल इंटरफ़ेस का उपयोग जेएसपी में अनुमानित थ्रेड सुरक्षा को लागू करने के लिए किया जाता है, साथ ही जेनरेट किए गए सर्वलेट कक्षाएं जेएसपी के लिए सिंगल थ्रेड मॉडेल को लागू करती हैं जो थ्रेडसेफ विशेषता का उपयोग करती है। विनिर्देश खुद की रूपरेखा क्यों इंटरफेस अब मान्य नहीं है:
SRV.2.2.1 नोट के बारे में एकल थ्रेड मॉडल
SingleThreadModel इंटरफेस की गारंटी देता है के उपयोग है कि एक समय में केवल एक धागा होगा में दिए गए सर्वलेट इंस्टेंस की सेवा विधि में निष्पादित करें। यह ध्यान रखना महत्वपूर्ण है कि यह गारंटी केवल प्रत्येक सर्वलेट उदाहरण पर लागू होती है, क्योंकि कंटेनर ऐसी ऑब्जेक्ट्स को पूल करना चुन सकता है। ऐसे HttpSession के उदाहरण के रूप में वस्तुओं, कि एक समय में अधिक एक से सर्वलेट उदाहरण के लिए उपलब्ध हैं, उन कि SingleThreadModel लागू सहित कई servlets, करने के लिए किसी विशेष समय पर उपलब्ध हो सकता है।
यह अनुशंसित है कि एक डेवलपर बजाय इस तरह के उपयोग एक उदाहरण चर के या कोड उन संसाधनों तक पहुँचने का ब्लॉक सिंक्रनाइज़ करने से परहेज के रूप में इस इंटरफेस को लागू करने, उन लोगों के मुद्दों को हल करने अन्य साधनों से लेते हैं। सिंगल थ्रेड मॉडेल इंटरफेस विनिर्देश के इस संस्करण में बहिष्कृत है।
मैंने सोचा था कि सिंगल थ्रेड मॉडेल को 2.5 spec में बहिष्कृत किया गया था। – naikus
आप नहीं करते हैं।
जेएसपी मूल रूप से सर्वलेट में एक विधि है। जैसा कि आप पहले से ही जानते हैं, विधियां सुरक्षित हैं, अर्थ यह है कि एक ही ऑब्जेक्ट की एक ही विधि को उसी समय एक ही विधि का आह्वान करने वाले दो थ्रेड, प्रत्येक को अपने स्वयं के ढेर में निष्पादित करेंगे।
तो, आपको वास्तव में थ्रेड सुरक्षित जेएसपी बनाने की ज़रूरत नहीं है, क्योंकि यह पहले से ही व्यापार सुरक्षित है।
यदि आप एक जेएसपी में एक चर a
घोषित करते हैं, तो कोई दूसरा तरीका नहीं है, एक और अनुरोध उस चर को देखता है।
क्या आपको अवगत होना चाहिए, ऑब्जेक्ट सत्र में डाला गया है, या संदर्भ को एक ही समय में एकाधिक थ्रेडों द्वारा एक्सेस किया जा सकता है, या बहुत अधिक थ्रेड सुरक्षित कोड नहीं है। फिर आपको सिंक्रनाइज़ करना या देखभाल करना चाहिए, उन ऑब्जेक्ट्स हैं!, और जेएसपी पृष्ठ स्वयं नहीं है।
जेएसपी के साथ थ्रेड-सुरक्षा के बारे में बात करना गलत है - जेएसपी एक दृश्य तकनीक है और यह केवल परिणाम प्रदर्शित करती है - यह कोई प्रसंस्करण नहीं करती है। (यह प्रसंस्करण कर सकते हैं, लेकिन यह नहीं करना चाहिए) सर्वलेट्स साथ
थ्रेड-सुरक्षा सर्वलेट में कोई निजी क्षेत्रों होने से हासिल की है - सर्वलेट उदाहरण पूरे कंटेनर के लिए एक है और प्रत्येक अनुरोध एक नया है धागा service(..)
विधि का आह्वान करता है।
आपको अपने मामले में "थ्रेड-सुरक्षा" से सटीक रूप से निर्दिष्ट करना चाहिए - यानी आप असफल होने की क्या अपेक्षा करते हैं।
अपने जेएसपी पृष्ठ में कोई राज्य जानकारी नहीं रखते हैं। (कोई आवृत्ति चर नहीं है, जो विभिन्न अनुरोधों में बदल सकता है)। आप अपने JSP या सर्वलेट में किसी भी राज्य की जरूरत नहीं है, तो वे threadsafe
पहले संक्षिप्त उत्तर <% @ page हैं isThreadSafe = "false"%>
अब जवाब है कि ऐसा नहीं करते है।
आपको यहां अपने उद्देश्य के बारे में बहुत स्पष्ट होना चाहिए। आपने सिंगल थ्रेड मॉडेल का उपयोग करके वास्तव में थ्रेड-सुरक्षित नहीं बनाया है, बल्कि आपने चीजों को सेट अप किया है ताकि एक समय में केवल एक थ्रेड आपके सर्वलेट में जा सके। संभवतः आप ऐसा कर रहे होंगे क्योंकि सर्वलेट कोड थ्रेड सुरक्षित नहीं है, यह है कि यदि कोड पर एक से अधिक थ्रेड प्राप्त होते हैं तो बुरी चीजें होती हैं।
यह मेरे लिए अर्थ है आप सर्वलेट कोड में कुछ इस तरह है:
doGet(/*etc/*){
// ... stuff
someExistingUnsafeClass.doSomething();
// .. more stuff
}
सब के बाद, अपने serlvet कोड में ही नहीं धागा असुरक्षित, निश्चित रूप से हो सकता है? आप इसे ठीक करेंगे, है ना? तो यह कुछ विरासत कोड होना चाहिए जो थ्रेड-असुरक्षित है?
यदि यह अपने JSP के साथ परिदृश्य, अपने JSP में कहीं आप एक कॉल कि असुरक्षित सामान है कि मौजूदा विरासत कोड का उपयोग करने, की आवश्यकता होगी, है:
<%
someExistingUnsafeClass.doSomething();
%>
तो आप बस इस असुरक्षित कॉल की रक्षा के लिए की जरूरत है:
<%
synchronized(this){
someExistingUnsafeClass.doSomething();
};
%>
आपके जेएसपी के बड़े पैमाने पर ठीक से चलने के लिए अनुमति देने से बहुत बेहतर प्रदर्शन होगा।
मुझे यह भी कहना चाहिए कि यदि आप एमवीसी के रूप में अपना आवेदन तैयार करते हैं तो सभी थ्रेड-असुरक्षित कोड नियंत्रक से कहा जाता है और दृश्य (जेएसपी) को कभी भी असुरक्षित होने की आवश्यकता नहीं होती है।
जेएसपी में, केवल स्क्रिप्लेट में चर का उपयोग करें और आप भरोसा कर सकते हैं कि वे थ्रेड सुरक्षित हैं क्योंकि उन्हें service()
में स्थानीय चर में अनुवादित किया जाएगा।
- 1. जेएसपी पेज
- 2. जेएसपी पेज
- 3. जेएसपी पेज
- 4. सर्वलेट से जेएसपी पेज
- 5. स्ट्रूट्स 2 जेएसपी पेज
- 6. java.lang.NumberFormatException: जेएसपी पेज
- 7. विंडोज थ्रेड सुरक्षित और गैर-थ्रेड सुरक्षित विंडोज
- 8. String.intern() थ्रेड सुरक्षित
- 9. गैर-थ्रेड-सुरक्षित
- 10. थ्रेड सुरक्षित गुण
- 11. javax.sql.DataSource थ्रेड सुरक्षित है?
- 12. थ्रेड सुरक्षित Mersenne ट्विस्टर
- 13. जावा: थ्रेड-सुरक्षित RandomAccessFile
- 14. थ्रेड सुरक्षित unique_ptr move
- 15. थ्रेड-सुरक्षित जीसीसी
- 16. पर्ल थ्रेड सुरक्षित मॉड्यूल
- 17. थ्रेड सुरक्षित रेफ गिनती
- 18. स्ट्रीम है। थ्रेड-सुरक्षित?
- 19. SQLite.Net थ्रेड-सुरक्षित है?
- 20. थ्रेड-सुरक्षित दिनांक पार्सर
- 21. एपोल थ्रेड-सुरक्षित है?
- 22. थ्रेड-सुरक्षित सी ++ स्टैक
- 23. ऑपरेटर "=" थ्रेड सुरक्षित (सी #)
- 24. सी #: थ्रेड-सुरक्षित घटनाएं
- 25. थ्रेड सुरक्षित घटना
- 26. थ्रेड-सुरक्षित Memoization
- 27. जॉइनर थ्रेड सुरक्षित है?
- 28. ContainsKey थ्रेड सुरक्षित
- 29. Magento थ्रेड-सुरक्षित है?
- 30. गैर थ्रेड-सुरक्षित सिंगलटन
आपको नहीं करना चाहिए। ऐसा करने का मतलब है कि आपका डिज़ाइन पूरी तरह से त्रुटिपूर्ण है। जब आप वास्तविक व्यापारिक दुनिया में ऐसा कर रहे हों तो आपको विस्मरण में निकाल दिया जाएगा। यह भी देखें [Servlets और Threadsafety] (http://stackoverflow.com/questions/3106909) और [जेएसपी में जावा कोड से कैसे बचें] (http://stackoverflow.com/questions/3177733)। – BalusC