2012-03-19 14 views
13

से सामान्य जावा क्लास में HttpServletRequest ऑब्जेक्ट तक पहुंचने के लिए मेरे पास स्प्रिंग एमवीसी 3.06 वेब एप्लिकेशन में सामान्य जावा क्लास है।स्प्रिंग

इस कक्षा में मैं एक विधि में HttpServletRequest ऑब्जेक्ट को इंजेक्ट या पकड़ना चाहता हूं।

मुझे पता है कि मैं इसे चारों ओर पास कर सकता हूं, लेकिन मैं सोच रहा था कि विधि में इसे पास किए बिना मैं अनुरोध कैसे प्राप्त कर सकता हूं। शायद एनोटेशन या इसी तरह का उपयोग कर रहे हैं?

इसके अलावा, इस तरह के अनुरोध को पकड़ने के साथ "असली" चिंताओं क्या हैं, इसके अलावा कुछ लोगों की राय बदसूरत कोडिंग है। मेरा मतलब है, क्या यह इस तरह से पहुंचने के लिए अस्थिर है?

पसंदीदा रूप से गैर अनुप्रयोग सर्वर निर्भर तरीका।

मैं

(HttpServletRequest) RequestContextHolder.getRequestContext().getExternalContext().getNativeRequest() 

देखा है लेकिन इस वसंत MVC 3.06 के लिए काम करने के लिए प्रतीत नहीं होता। RequestContextHolder में विधि getRequestContext() नहीं है।

उत्तर

22

उपयोग

((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); 

मुझे यकीन है कि तुम कहाँ RequestContextHolder.getRequestContext() मिला है, जो पूरी तरह से गलत है नहीं कर रहा हूँ।

क्या यह इस तरह से पहुंचने के लिए अस्थिर है?

नहीं, यह पर्याप्त स्थिर है, मानते हुए कि आप हमेशा HttpServlet अनुरोध धागे के हिस्से के रूप में कोड चला रहे हैं। मुख्य मुद्दा यह है कि हाँ, यह बदसूरत है, और यह आपके कोड को परीक्षण करने में कठोर बनाता है। इसका कारण यह नहीं है कि इसका इस्तेमाल न करें।

यदि आप का उपयोग करना चाहते हैं, तो इसे अपने कोड से हटा दें, उदा।

public void doSomething() { 
    HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); 
    doSomething(request); 
} 

void doSomething(HttpServletRequest request) { 
    // put your business logic here, and test this method 
} 
+0

का उपयोग करें, धन्यवाद, हाँ, शायद परीक्षण करते समय समस्याएं पैदा हो सकती हैं, अधिकतर परीक्षण नियंत्रक और क्रियाएं। Decoupling वास्तव में तब मदद नहीं करेगा, लेकिन मैंने एक स्थिर getRequest विधि जोड़ा है जो एक डिफ़ॉल्ट कार्यान्वयन (उपर्युक्त) कहता है, जिसे अतिरंजित किया जा सकता है। धन्यवाद! – momomo

+0

अधिक जानकारी के लिए मेरे संपादित प्रश्न देखें ... – momomo

+0

यह अभी तक ठीक काम करता है :(... मैं RequestContextHolder – momomo

1

यदि आप स्प्रिंग एमवीसी का उपयोग कर रहे हैं तो आप इस तरह HttpServletRequest पा सकते हैं।

@RequestMapping("/part of requesturl") 
@ResponseBody String YOUR_METHOD_NAME(HttpServletRequest request) 
{ 
String YOUR_PARAMETER = request.getParameter("YOUR_PARAETER_NAME"); 
} 

तुम भी सम्मिलित कर सकते हैं HttpServletResponse प्रतिक्रिया करता है, तो .. आप चाहते हैं

+0

यह कोड वर्तनी गलती के कारण संकलित नहीं हो सकता है क्योंकि मैं सीधे टाइप करता हूं। –

+3

यह सवाल नहीं था। – skaffman

+0

मेरा मानना ​​है कि स्काफमैन ठीक है। मैं इसे एक्सेस करने की कोशिश नहीं कर रहा हूं नियंत्रक, लेकिन किसी भी जावा वर्ग से :) skaffmans उत्तर और skaffman के आधार पर मेरा जोड़ा जवाब देखें। – momomo