2010-09-02 7 views
7

मेरे पास एक सिंगलटन वसंत बीन है जिसे कुछ क्लाइंट साइड एक्शन के जवाब में बुलाया जा रहा है। मैं क्लाइंट (विशेष रूप से आईपी पता) के बारे में कुछ जानकारी कैप्चर करना चाहता हूं। मुझे लगता है कि इस जानकारी का सबसे अच्छा स्रोत अनुरोध वस्तु है। मैं अपने बीन के अंदर से अनुरोध ऑब्जेक्ट तक पहुंच कैसे प्राप्त करूं?एक सिंगलटन वसंत बीन के अंदर से ServletRequest तक कैसे पहुंचे?

मुझे क्षमा करें यदि यह एक स्पष्ट सवाल है, तो मैं वसंत के लिए बहुत नया हूं।

मैं सफलता .:

((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()) 
.getRequest().getRemoteAddr(); 

बिना एक बात की कोशिश की है लेकिन वह currentRequestAttributes के बाहर एक IllegalStateException साथ विफल रहा है। अपवाद पाठ एक RequestContextListener या RequestContextFilter

मैं RequestContextListener कॉन्फ़िगर कैसे करने के लिए एक reference पाया है का उपयोग कर चलता है, लेकिन मैं अभी भी अपने सेम को बदलने के लिए तो मैं अनुरोध जानकारी का उपयोग कर सकते हैं पता नहीं है।

उत्तर

7

RequestContextListenerweb.xml में जोड़ा गया है, और यह वर्तमान अनुरोध को वर्तमान धागे से जोड़ देगा। इस थ्रेड एसोसिएशन को आपके द्वारा पहले से प्रयास किए जाने के तरीके में RequestContextHolder के माध्यम से पुनर्प्राप्त किया जाता है।

तो बस web.xml में RequestContextListener तमाचा है, और अपने कोड अभी काम शुरू करना चाहिए:

<listener> 
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
</listener> 

RequestContextListener सामान्य रूप से, स्प्रिंग MVC क्षुधा में की आवश्यकता नहीं है क्योंकि DispatcherServlet यह स्वचालित रूप से करेंगे। मुझे लगता है कि यह एक वसंत एमवीसी ऐप नहीं है?

+0

बिल्कुल सही, यह काम किया! मेरे पास web.xml में RequestContextListener का नाम था। अनुरोध Destroyed (ServletRequestEvent)। सामग्री क्या करता है? – wolfcastle

+0

सही, यह एक वसंत एमवीसी ऐप नहीं है। क्षमा करें, मैंने नहीं देखा कि पहली बार मैंने आपका जवाब पढ़ा था। – wolfcastle

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