2009-06-17 12 views
9

एएसपी में, request.form और request.queryString विशेषताएँ हैं, लेकिन जावा में। ऐसा लगता है कि हम केवल एक संग्रह, के माध्यम से पहुँचा जा सकता है जो है request.getParamaterMap, getParametersNames, getParameterValues आदियह निर्धारित करने के लिए कि जावा से पैरामीटर "पोस्ट" या "प्राप्त" किया गया है या नहीं?

वहाँ कोई रास्ता बताने के लिए जो मान तैनात किया गया है और कौन सा URL में निर्दिष्ट किया गया है है?


पुनश्च:

क्या मैं प्राप्त करने के लिए कोशिश कर रहा हूँ एक पेज है जो निम्न स्थिति

  • संभाल कर सकते हैं चर क्वेरी स्ट्रिंग से आया पढ़ें बनाने के लिए है (मिल)
  • एक निश्चित नाम के साथ एक एकल पोस्ट पढ़ें (उदाहरण के लिए, "xml")।
  • यदि वह पोस्ट गुम है, तो पूरे शरीर को पढ़ें ( request.getReader() के साथ)।

मैं बिल्ला उपयोग कर रहा हूँ 6.

मैं अब तक क्या देखा है, अगर मैं एक request.getReader() जारी, पोस्ट मूल्यों के अनुसार नहीं रह गया है getParamater संग्रह में प्रकट होता है, फिर भी क्वेरी स्ट्रिंग पैरामीटर अभी भी कर रहे हैं।

दूसरी तरफ, यदि मैं getParameters विधियों में से कोई भी जारी करता हूं, getReader रिक्त स्ट्रिंग देता है।

ऐसा लगता है कि मेरे पास केक नहीं है और इसे भी खा सकता है।

हां, तो मुझे लगता है कि समाधान folowwing है:

  • getReader के साथ शरीर पढ़ें।
  • अगर एक्सएमएल पद नहीं है अगर ऐसा है देखें (नकारात्मक पक्ष यह है, मैं मैन्युअल रूप से शरीर पार्स करने के लिए की है।
  • , http संदेश के मुख्य भाग हो जाते हैं और "xml =" भाग से छुटकारा पाने के।
  • यदि ऐसा नहीं है , ठीक है, बस शरीर मिलता है
  • किसी भी बेहतर विचार के माध्यम से request.getParameter

क्वेरी स्ट्रिंग पैरामीटर पढ़ें

  • पुनश्च:।? किसी को भी जानता है है कैसे पार्स करने के लिए HttpServlet द्वारा उपयोग की जाने वाली विधि का उपयोग कर शरीर?
  • पीएस: Here एक डीकोडिंग एएसपी फ़ंक्शन है। क्या मैं इसे जावा में फिर से लिखूंगा?
  • पुनश्च: इसके अलावा found बस चीजों को स्पष्ट करने

(अभी यह परीक्षण करने के लिए एक मशीन की जरूरत नहीं है)।

<%@page import="java.util.*"%> 
<% 
    Integer i; 
    String name; 
    String [] values; 

    for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) { 

    name = (String) e.nextElement(); 
    values = request.getParameterValues(name); 

    for (i=0; i < values.length; i ++) { 
     out.println(name + ":" + values[i] + "<br/>"); 
    } 
    } 
%> 

<html> 
<head><title>param test</title> 
</head> 
<body> 
    <form method="post" action="http://localhost:8080/jsp_debug/param_test.jsp?data=from_get"> 
    <input type="text" name="data" value="from_post"> 
    <input type="submit" value="ok"> 
    </form> 
</body> 
</html> 

इस कोड के उत्पादन में

data:from_get 
data:from_post 

... 

है क्रम में की तरह लगता है: समस्या हो कि getParameter के साथ तैनात मूल्यों के साथ-साथ यूआरएल के साथ पारित कर दिया मूल्यों हो, निम्न उदाहरण पर विचार लगता है यह पता लगाने के लिए कि कौन सा पैरामीटर आया था, मुझे request.getQueryString जांचना होगा।

+0

क्या सर्वर का प्रयोग कर रहे:

मैं RequestUtils वर्ग के लिए स्रोत कोड पाया, शायद विधि "पॉप्युलेट" तुम क्या जरूरत है? सूरज Http सर्वर? – gubby

+0

आपको पूरा यूआरएल प्राप्त करना चाहिए और पैरामीटर को deserialize करना चाहिए। यदि आपका वांछित पैरामीटर है, तो यह एक जीईटी है। यदि यह वहां मौजूद नहीं है, तो यह एक पोस्ट param है। – PSyLoCKe

उत्तर

5

कोई सीधा तरीका नहीं है। गैर-प्रत्यक्ष - चेक .getQueryString()

1

यदि आप कोई नहीं देखते हैं, तो एक पोस्ट के रूप में और फिर फॉर्म चर को खोदने के लिए क्वेरी स्ट्रिंग पैरामीटर की जांच के साथ क्यों शुरू नहीं करते हैं?

+0

क्वेरीस्ट्रिंग पैरामीटर कोई समस्या नहीं है, मुझे लगता है कि मैं उन्हें हमेशा के आसपास रखूंगा ... समस्या एक बार जब मैं getReader जारी करता हूं, getParamters अब पोस्ट मूल्यों को वापस नहीं लौटाता है ... और मैं खुद को पोस्ट को पार्स करने से बचने की उम्मीद कर रहा था ... – opensas

2

आप एक सर्वलेट लिख रहे हैं, तो आप द्वारा doGet या doPost विधि शुरू हो जाती है कि क्या उस भेद कर सकते हैं।

public void doGet(HttpServletRequest request, 
        HttpServletResponse response) 
     throws ServletException{ 

//Set a variable or invoke the GET specific logic 
    handleRequest(request, response); 

} 

public void doPost(HttpServletRequest request, 
        HttpServletResponse response) 
     throws ServletException{ 

//Set a variable or invoke the POST specific logic 
handleRequest(request, response); 

} 


public void handleRequest(HttpServletRequest request, 
        HttpServletResponse response) 
     throws ServletException{ 

//Do stuff with the request 

} 
+1

आपके पास जानकारी प्राप्त करने के साथ एक पोस्ट हो सकती है, मैट बी – opensas

22

HttpServletRequest.getMethod():

HTTP विधि है जिसके साथ यह अनुरोध किया गया था, उदाहरण के लिए, प्राप्त, पोस्ट, या डाल के नाम देता है। CGI वैरिएबल REQUEST_METHOD के मान के समान।

तुम सब करने की ज़रूरत है यह है:

boolean isPost = "POST".equals(request.getMethod()); 

इसके अलावा मैं वास्तव में क्यों आप बस request.getParameter("somename") प्रयोग नहीं करेंगे अनुरोध पैरामीटर के रूप में भेजा मूल्यों को पुनः प्राप्त करने पर संदेह में हूँ। यह विधि returns the parameter regardless of whether the request was sent via a GET or a POST:

अनुरोध पैरामीटर अनुरोध के साथ अतिरिक्त जानकारी भेजी गई हैं। HTTP servlets के लिए, पैरामीटर क्वेरी स्ट्रिंग या पोस्ट फॉर्म डेटा में निहित हैं।

यह getQueryString() स्वयं को पार्स करने की कोशिश करने से बहुत आसान है।

+0

पर मेरी टिप्पणी देखें यदि पोस्ट पैरामीटर की बजाय http के शरीर का उपयोग करके किया गया था, तो मैं इसे अनुरोध के साथ नहीं प्राप्त कर सकता .getParameter ("somename"), मुझे करना है request.getReader() ... का उपयोग करें और उसके बाद मैं अब अनुरोध का उपयोग नहीं कर सकता।getParameter – opensas

+2

भी, भूलें कि मैं क्वेरीस्ट्रिंग जानकारी के साथ एक पोस्ट प्राप्त कर सकता हूं, (आपको बस टैग टैग के क्रिया पैरामीटर में 'xx.jsp? field1 = value1, field2 = value2' जैसी कुछ चाहिए), उस स्थिति में, request.getMethod "POST" लौटाएगा, लेकिन मुझे GetParameter संग्रह में मिश्रित "पोस्ट" और "प्राप्त" पैरामीटर होंगे ... यह समस्या है ... – opensas

+0

ठीक है मुझे लगता है कि आप वर्णन करने के लिए अलग या गलत शब्दावली का उपयोग कर रहे हैं तब आपकी समस्या है। पोस्टडाटा या मल्टीपार्ट डेटा पढ़ना सिर्फ "पैरामीटर" –

0

मुझे पता है कि यह आपकी समस्या का समाधान नहीं करता है, लेकिन यदि मुझे स्ट्रेट्स का उपयोग करते समय सही तरीके से याद है, तो आपके चर को क्वेरी स्ट्रिंग में या पोस्ट बॉडी में भेजे जाने पर एक्शनफॉर्म पॉप्युलेट हो जाएगा।

http://svn.apache.org/repos/asf/struts/struts1/trunk/core/src/main/java/org/apache/struts/util/RequestUtils.java

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

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