2011-05-03 9 views
5

अरे, मैं पोस्ट विधि के साथ भेजे गए सर्वलेट में फॉर्म डेटा पढ़ने की कोशिश कर रहा हूं। और सर्वलेट को OnlineExam?q=saveQuestion कहा जाता है।सर्वलेट में फॉर्म डेटा पढ़ना। पोस्ट विधि और सर्वलेट के साथ पोस्ट किया गया डेटा? q = test1

public class OnlineExam extends HttpServlet { 
protected void doGet(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
if(request.getParameter("q").equals("saveQuestion")){ 
       /* 
       * Save the question provided with the form as well as save the uploaded file if any. 
       */ 
       saveQuestion(request); 
      } 
} 

protected void doPost(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
//  doGet(request, response); 
     saveQuestion(request); 
    } 
public String saveQuestion(HttpServletRequest request){   
     System.out.println(request.getParameter("question")); 

     return ""; 

    }  
} 

HTML प्रपत्र:: अब सर्वलेट के रूप में काम कर रहा है

<form action="OnlineExam?q=saveQuestion" method="post"> 
     <fieldset> 
     <legend>Question</legend> 
     <textarea class="questionArea" id="question" name="question">Enter Question.</textarea> 
     <br class="clearFormatting"/>    
     <input class="optionsInput" value="optionA" name="optionA" onfocus = "clearValues('optionA')" onblur = "setValues('optionA')"/> 
     <br class="clearFormatting"/> 

     <input class="optionsInput" value="optionB" name="optionB" onfocus = "clearValues('optionB')" onblur = "setValues('optionB')"/> 
     <br class="clearFormatting"/> 

     <input class="optionsInput" value="optionC" name="optionC" onfocus = "clearValues('optionC')" onblur = "setValues('optionC')"/> 
     <br class="clearFormatting"/> 

     <input class="optionsInput" value="optionD" name="optionD" onfocus = "clearValues('optionD')" onblur = "setValues('optionD')"/> 
     <br/> 
     <input class="optionsInput" value="answer" name="answer" onfocus="clearValues('answer')" onblur="setValues('answer')"/>  
     <input type="submit" value="Save" /> 
     <input type="reset" value="Cancel" /> 
     <button style="display: none" onclick="return deleteQuestion()" >Delete</button> 
     </fieldset> 
     </form> 

तो किसी को उदाहरण देकर स्पष्ट कर सकते हैं कि कैसे सर्वलेट वास्तव में कहा जाता है। मेरा मतलब है कि नियंत्रण का प्रवाह क्या है यानी इस सर्वलेट में चीजें कैसे काम करती हैं।

और मैं सर्वलेट में param1 को कैसे पढ़ सकता हूं।

ps: मैं विधि प्राप्त करने के साथ फॉर्म पोस्ट नहीं करना चाहता हूं।

+0

अरे आप सभी को डेटा प्राप्त करने के तरीके की आवश्यकता है जो q = savequestion और फॉर्म के डेटा पोस्ट करें। तो दोनों को कैसे पढ़ा जाए और उन्हें पार्स कैसे करें? – vinit

उत्तर

4

यदि आप सर्वलेट को डेटा पोस्ट करते हैं। doPost लागू किया जाएगा।

doPost() अंदर आप अनुरोध परम उपयोग कर सकते हैं की तरह

request.getParameter("param1"); 
+1

अरे मैंने इसे आजमाया लेकिन यह शून्य – vinit

+0

दिखा रहा है डूपेट से डीओजीईटी को हटा दें, इसका उपयोग –

+0

केके नहीं है। लेकिन फिर doPost से उल्लिखित param1 – vinit

0

Vinit जब आप अपने फार्म पर "सबमिट करें" बटन पर क्लिक करें नीचे दिए गए कोड request.getParameter("param1");

+0

से पास करें अरे वास्तव में मैं आपके जैसा लिखा है वही कोशिश कर रहा हूं। वह सिर्फ एक टाइपिंग गलती थी। संपादित प्रश्न देखें। और प्रतिक्रिया – vinit

+0

के लिए धन्यवाद क्या आप हटाने की कोशिश कर सकते हैं? Q = saveQuestion # (केवल एक सुझाव नहीं किया गया है)। फॉर्म एक्शन में शामिल होने के बजाय तर्क "क्यू" को – gnanz

+0

में छिपे हुए फ़ील्ड के रूप में तर्क दें, नहीं, मैं वास्तव में यह नहीं कर सकता कि वास्तव में सर्वलेट भी है प्राप्त पैरामीटर – vinit

0

कोशिश, अपने सर्वलेट की doPost विधि हो जाएगा कहा जाता है - यह उस विधि द्वारा निर्धारित किया जाता है जिसे आपने अपने HTML पृष्ठ में "फ़ॉर्म" पर रखा है। URL पैरामीटर (q = saveQuestion) अभी भी आपके कोड में doPost विधि में उपलब्ध होगा। आप इस धारणा के तहत प्रतीत होते हैं कि URL पैरामीटर को DoGet विधि और doPost विधि द्वारा फ़ॉर्म पैरामीटर द्वारा संसाधित किया जाएगा। बात वह नहीं है।

+0

के आधार पर कुछ अन्य काम कर रहे हैं, लेकिन मैं फॉर्म के फॉर्म फ़ील्ड क्यों प्राप्त नहीं कर पा रहा हूं। भले ही doPost सर्वलेट कहा जाता है। – vinit

+0

क्या आप सुनिश्चित हैं कि आपकी doPost विधि को बुलाया जा रहा है? क्या आपने गणना पैरामीटर नाम = request.get पैरामीटर नाम(); जबकि (paramNames.hasMoreElements()) { System.out.println ((स्ट्रिंग) paramNames.nextElement()); } यह देखने के लिए कि कौन से पैरामीटर सर्वलेट तक पहुंच रहे हैं? – DaveH

5

आपको अपने में में q का मान प्राप्त करना चाहिए। क्योंकि आप method="post" का उपयोग करते हैं तो सर्वलेट में doPost वह है जिसे doGet नहीं कहा जाता है। अपने doGet में कोड निकालें, फिर इसे doPost पर डालें। और आप doPost नीचे कोड की तरह कुछ होना चाहिए।

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    if(request.getParameter("q").equals("saveQuestion")){ 
     saveQuestion(request); 
    } 
} 
2

क्या यह हल हो गया है?

मुझे एक ही समस्या का सामना करना पड़ रहा है। मैं

Enumeration paramNames = request.getParameterNames(); while(paramNames.hasMoreElements()) { System.out.println((String)paramNames.nextElement()); } 

की कोशिश की और यह 0 तत्वों को दिखा रहा है, तो प्रपत्र डेटा सर्वलेट द्वारा नहीं पढ़ा जा रहा है।

मुझे अन्य धागे में जवाब मिला। enctype=multipart/form-data इसका कारण बन रहा था। इसे फॉर्म से हटाने के बाद, डेटा पढ़ने में सक्षम था।

0
doPost() { 
    processRequest(request, response); 
    //to do 
} 

निकालें/टिप्पणी processRequest(request, response) और इसे फिर से प्रयास करें। अब आपको शून्य मान नहीं मिलना चाहिए।

+0

@jvperrin, अंग्रेजी मेरी मातृभाषा नहीं है। आपके नीचे वोट से बहुत निराश। –

+0

मैंने आपको वोट नहीं दिया, मैंने इसे केवल अधिक पढ़ने योग्य बनाने के लिए अपनी पोस्ट संपादित की। – jvperrin

1

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

अनुरोध का उपयोग करते समय मुझे एक समान समस्या मिल रही थी।getParameters ("param1"); कार्य करता है। इसके साथ खेलने के घंटों के बाद मुझे एहसास हुआ कि मैं जिस param1 का उपयोग कर रहा था वह इनपुट टैग के लिए आईडी था जिसका मैं अनुरोध कर रहा था। वह गलत था। इनपुट बॉक्स का सही मान प्राप्त करने के लिए मुझे इनपुट टैग के NAME विशेषता का उपयोग करना पड़ा। वह सब कुछ था। मुझे बस एक नाम जोड़ना पड़ा और इस नाम का उपयोग करके पैरामीटर प्राप्त करना पड़ा और उसने इस मुद्दे को ठीक किया।

उम्मीद है कि यह किसी की मदद करेगा।

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