2011-03-11 12 views
5

मैं निम्नलिखित तर्क को कार्यान्वित करना चाहता हूं: जब मुझे मुख्य सर्वलेट की सेवा सेवा (मुख्य वेब कंटेनर थ्रेड में) में HttpServletRequeset और HttpServletResponse प्राप्त होता है, तो मैं प्रक्रिया के लिए ए, बी, सी तीन थ्रेड (मेरे स्वयं के प्रोग्राम द्वारा प्रबंधित थ्रेड) शुरू करता हूं समानांतर मोड में अन्य सर्वलेट, और फिर मुख्य थ्रेड में इन सर्वलेट से प्रत्येक प्रतिक्रिया में शामिल होने, और अपने ही धागा में से एक है, तो (ए धागा मान) धीमी गति से काम करते हैं, मुख्य थ्रेड खत्म हो जाएगा, इसलिए मुख्य प्रतिक्रिया user.and वापस आ जाएगी एक धागा काम जारी रखने को ठीक से, मैं बाद में एक ब्राउज़र पक्ष में AJAX का उपयोग कर धागे की प्रतिक्रिया का अनुरोध करेंगे चाहिए।कैसे एक HttpServletRequest अलग और HttpServletResponse सर्वलेट कंटेनर द्वारा प्रदान की क्लोन करने के लिए?

तो, मैं क्लोन करने के लिए HttpServlettRequest और HttpServletResponse सर्वलेट कंटेनर द्वारा प्रदान चाहते हैं, और क्लोन अनुरोध और प्रतिक्रिया अलग किया जाना चाहिए (जब कंटेनर के HttpServletTrequest और HttpServletResponse समाप्त होने पर, क्लोन अनुरोध और प्रतिक्रिया अभी भी ठीक से काम)।

क्लोन अनुरोध और प्रतिक्रिया का व्यवहार कंटेनर के रूप में मेरे कोड के दृश्य से होना चाहिए। इसका पालन किया जा सकता है और शामिल किया जा सकता है।

कोई विचार?

बहुत बहुत धन्यवाद! जैसे आप HttpRequest और HttpResponse वस्तुओं के लिए एक प्रतिनिधि के रूप में कार्य करने के लिए और उसके बाद की प्रक्रिया के लिए एक Runnable वस्तु के लिए पर के लिए एक संदर्भ पारित कक्षाएं बनाने की जरूरत

L.J.W

+1

आप नहीं कर सकते। अवधि। कार्यात्मक आवश्यकता क्या है? फिर हम कार्यात्मक आवश्यकता को प्राप्त करने के लिए बेहतर उपयुक्त उत्तर/सुझाव प्रदान कर सकते हैं। – BalusC

उत्तर

3

लग रहा है।

कुछ ऐसे ऑपरेशन हैं जो केवल एक एचटीपीआरक्वेट ऑब्जेक्ट (इनपुटस्ट्रीम स्प्रिंग्स से दिमाग में पढ़ने के लिए) में किया जा सकता है, प्रतिनिधि वर्ग को इसके लिए पूरा करना होगा।

सुनिश्चित करें कि आप अगर ए, बी और सी धागे HttpResponse वस्तु में विरोधात्मक परिवर्तन हालांकि करते जा रहे हैं क्या नहीं।

मुझे लगता है मैं प्रसंस्करण धागे के माध्यम से HttpResponse वस्तु गुजरती हैं और नियंत्रित सर्वलेट वर्ग

+0

मैं चाहता हूं कि क्लोन अनुरोध और प्रतिक्रिया को अलग किया जा सके, इसलिए मैं संदर्भ (आदि, मैं रैप विधि का उपयोग नहीं कर सकता) पास नहीं कर सकता –

+1

@LJW: जो भी आप कहते हैं वह बिल्कुल समझ में नहीं आता है। "मैं संदर्भ पास नहीं कर सकता" तो आपको जावा का उपयोग नहीं करना चाहिए ... –

+1

@ एल.जे.डब्ल्यू आप चाहते हैं लेकिन जब प्रतिक्रिया भेजी गई है तो प्रतिक्रिया का उपयोग करने के रूप में आप _get_ नहीं करेंगे, अपरिभाषित व्यवहार है। दूसरे शब्दों में, यह क्रैश हो जाएगा क्योंकि धाराओं (संभवतः) बंद कर दिया गया है)। – extraneon

2

मुझे लगता है कि आप HttpServletRequest के ज्यादा के लिए पूछ रहे हैं में प्रतिक्रिया को आबाद करने के लिए तर्क नहीं छोड़ करना पसंद करते हैं। एक बार अनुरोध पूरा हो जाने के बाद आपको किसी भी उपयोग के अनुरोध वस्तु पर भरोसा नहीं करना चाहिए। मैं किसी भी मामले में जे 2 ईई कंटेनर के अंदर थ्रेडिंग की सिफारिश नहीं करता हूं लेकिन यह एक अलग मुद्दा है।

आप समानांतर में अनुरोध को पूरा करना होगा अगर मैं तुम्हें डेटा आप अनुरोध वस्तु से की जरूरत को निकालने और अपने सूत्र है कि भेजने और कार्यकर्ता धागे ज्यादातर HttpSession जहाँ वे संग्रहीत कर सकती है के अपवाद के साथ सर्वलेट अज्ञानी बनाने की सलाह देते हैं अजाक्स पुनर्प्राप्ति के लिए उनके गणना मूल्य।

+0

धागे को servletrequet और प्रतिक्रिया को संसाधित करना होगा, मैं अन्य डेटा प्रकार नहीं भेज सकता .. –

+0

@ एलजेडब्ल्यू। दूसरे शब्दों में, आपको एक कस्टम HttpRequest और HttpResponse को लागू करने और इसे दिए गए अनुरोध और प्रतिक्रिया से कॉपी किए गए डेटा के साथ प्रारंभ करने की आवश्यकता होगी। धाराओं की प्रतिलिपि न लें क्योंकि यह काम नहीं करेगा। – extraneon

3

अनुरोध और प्रतिक्रिया वर्गों क्लोन या एक से अधिक थ्रेड से पहुँचा जा करने के लिए नहीं बनाया गया है। यदि आप ऐसा करने का प्रयास करते हैं, तो आप समस्याओं में भागने के लिए बाध्य हैं। मेरा सुझाव है कि आप अपनी आवश्यकताओं को फिर से सोचें।

5

HTTP अनुरोध और प्रतिक्रिया क्लोनिंग HttpServletResponseWrapper वर्ग http://docs.oracle.com/javaee/1.3/api/javax/servlet/http/HttpServletResponseWrapper.html के माध्यम से संभव है। आप सूर्य प्रलेखन https://web.archive.org/web/20120626033905/http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets8.html पर उपयोग का एक उदाहरण पा सकते हैं।

ध्यान दें कि इस समस्या को हल करने के लिए सूर्य (उस समय) सूर्य से एक कार्यवाही थी क्योंकि यह कभी योजना नहीं थी कि आप प्रतिबद्ध होने से पहले अनुरोध और प्रतिक्रिया जानकारी संशोधित कर सकें।

आप एचटीपी जानकारी की प्रतिलिपि बनाने के लिए रैपर का उपयोग कर सकते हैं और इसे एक अलग थ्रेड में पास कर सकते हैं।

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