2010-02-23 10 views
10

मुझे पता है कि मैं URL पैरामीटर मान प्राप्त करने के लिए HttpServletRequest.getParameter() का उपयोग कर सकता हूं।HttpServletRequest - SetParameter

क्या कोई समतुल्य तरीका है जिसके साथ मैं मूल्य को सेट/प्रतिस्थापित कर सकता हूं?

उत्तर

7

नहीं, ऐसा नहीं है।

आप केवल पैरामीटर नहीं, विशेषताओं को बदल सकते हैं।

कुछ ऐसा करने का एकमात्र तरीका अनुरोध को लपेटना होगा (एक वर्ग के साथ जो GetParameter के लिए कुछ और देता है)।

संबंधित जिज्ञासा: कुछ सर्वलेट कंटेनरों में एक बग है जो आपको request.getParameterValues(name)[0] = "newValue" करने देगी, लेकिन इससे केवल असंगतता हो सकती है।

+0

यूप, आप इसे हमेशा लपेट सकते हैं हालांकि कुछ तरीके हो सकते हैं। –

+0

पुराना सवाल है लेकिन मैं यह जोड़ना चाहता हूं कि ऐसा करने के लिए एक उपयोग केस एक इकाई या कार्यात्मक परीक्षण बना रहा है। तो, यह मामला, एक मॉक लाइब्रेरी का उपयोग करके या एक संशोधित अनुरोध स्टब का उपयोग करके किया जा सकता है जिसमें एक संशोधित पैरामीटर मानचित्र होता है। –

4

नहीं। हालांकि, आप ऐसा क्यों करना चाहते हैं? आपको जो करने की आवश्यकता है उसे पूरा करने के अन्य तरीके हो सकते हैं।

+0

मैं सभी यूआरएल पैरामीटर – AJM

+0

को एन्कोड करना चाहता हूं इससे पहले कि यह सर्वलेट हो जाए? आप इसके लिए जावास्क्रिप्ट में देखना चाहेंगे - एक बार यह सर्वलेट पर पहुंचने के बाद, अब उन्हें एन्कोड करने का प्रयास करने में कोई वास्तविक बिंदु नहीं है। या क्या आप किसी अन्य सर्वलेट/पेज पर रीडायरेक्ट के लिए एन्कोडिंग के बारे में बात कर रहे हैं? यदि ऐसा है, तो आप अपना नया यूआरएल बनाते समय एन्कोडिंग करना चाहेंगे। Java.net.URLEncoder (http://java.sun.com/j2se/1.5.0/docs/api/java/net/URLEncoder.html) में देखें; मदद हो सकती है। – MCory

+0

मुझे नहीं लगता कि वह यूआरएल एन्कोडिंग के बारे में बात कर रहा है। अनुरोध पैरामीटर servletcontainer द्वारा पहले ही यूआरएल-डीकोडेड हैं। वह चरित्र एन्कोडिंग के बारे में और बात कर रहा है। – BalusC

4

मुझे नहीं लगता कि वहां है। लेकिन आप एक ही फैशन में setAttribute() विधि का उपयोग कर सकते हैं; आपको अभी getAttribute() का उपयोग करना होगा - पैरामीटर() नहीं - बाद में मूल्य प्राप्त करने के लिए।

6

आप एक कस्टम HttpServletRequestWrapper कार्यान्वयन जो एक Filter जो श्रृंखला के शुरू में रखा गया है अंदर parametermap की जगह के साथ HttpServletRequest की जगह parametermap एक परिवर्तनीय नक्शा बना सकते हैं।

हालांकि, यह एक कामकाज की तरह गंध करता है। टिप्पणियों में से एक में आपने कहा है कि आप पैरामीटर को एन्कोड करना चाहते थे (वास्तव में: डीकोड उन्हें, क्योंकि वे पहले से ही एन्कोड किए गए हैं)। आप समाधान के लिए गलत दिशा में देख रहे हैं। GET अनुरोध पैरामीटर के लिए सर्वलेटकैनर में एन्कोडिंग की आवश्यकताएं सेट की गई हैं (उदाहरण के लिए टोमकैट के मामले में, बस HTTP कनेक्टर की URIEncoding विशेषता सेट करें)। POST के लिए, आपको इसे ServletRequest#setCharacterEncoding() द्वारा सेट करने की आवश्यकता है। this article में विस्तृत समाधान भी देखें (पूरी तस्वीर को समझने के लिए पूरे लेख को पढ़ें)।

1

अनुरोध पैरामीटर HTTP के माध्यम से क्लाइंट से सर्वलेट या जेएसपी को सबमिट किए जाते हैं। वे सर्वर-साइड कोड द्वारा सेट नहीं हैं इसलिए किसी भी सेट विधियों (सेट पैरामीटर()) की आवश्यकता नहीं है।

इसके अलावा, यह सुरक्षा जोड़ देगा कि कोई भी अनुरोध पैरामीटर बदल नहीं सकता है।

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