чтение данных формы в сервлете. данные публикуются с помощью метода post, а сервлет вызывается с? q = test1 - PullRequest
8 голосов
/ 03 мая 2011

Эй, я пытаюсь прочитать данные формы в сервлете, отправленном методом post. И сервлет называется OnlineExam?q=saveQuestion. Теперь сервлет работает как:

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: я не хочу отправлять форму с помощью метода get.

Ответы [ 7 ]

5 голосов
/ 03 мая 2011

Вы должны получить значение q в вашем doPost, а не в doGet. Поскольку вы используете 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);
    }
}
3 голосов
/ 15 августа 2011

Это решено?

Я столкнулся с той же проблемой. Я пытался

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

и показывает 0 элементов, поэтому данные формы не читаются сервлетом.

Я получил ответ в другой теме. enctype=multipart/form-data было причиной этого. Удалив его из формы, смог прочитать данные.

3 голосов
/ 03 мая 2011

если вы отправляете данные сервлету. doPost будет вызван.

Внутри doPost() вы можете получить доступ к параметру запроса, как

request.getParameter("param1");
0 голосов
/ 30 сентября 2014

Я знаю, что это старый поток, но не смог найти ответ на него, когда я искал, поэтому я публикую свое решение для кого-то, у кого может быть та же проблема с получением нулевого значения из параметров формы в функции dopost их сервлета.

У меня была похожая проблема с получением нулевых значений при использовании request.getParameters ("param1");функции.После нескольких часов игры с ним я понял, что param1, который я использовал, был идентификатором входного тега, который я запрашивал.Это было неправильно.Мне пришлось использовать атрибут NAME тега ввода, чтобы получить правильное значение поля ввода.Это было все, что было.Мне просто нужно было добавить имя и получить параметр, используя это имя, и это решило проблему.

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 05 марта 2014
doPost() {
  processRequest(request, response);
  //to do
}

Удалить / комментировать processRequest(request, response) и попробуйте снова.Теперь вы не должны получать нулевые значения.

0 голосов
/ 03 мая 2011

Когда вы нажимаете кнопку «отправить» в вашей форме, вызывается метод doPost вашего сервлета - это продиктовано методом, который вы поместили в «форму» на своей HTML-странице.Параметры URL (q = saveQuestion) по-прежнему будут доступны вашему коду в методе doPost.Похоже, у вас сложилось впечатление, что параметры URL будут обрабатываться методом doGet, а параметры формы - методом doPost.Это не тот случай.

0 голосов
/ 03 мая 2011

Vinit попробуйте следующий код request.getParameter("param1");

...