it-roy-ru.com

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

Эй, я пытаюсь прочитать данные формы в сервлете, отправленном методом 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.

8
vinit

Вы должны получить значение 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);
    }
}
6
ace

Это решено?

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

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

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

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

4
Mohit Verma

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

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

request.getParameter("param1");
4
Jigar Joshi

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

1
DaveH

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

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

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

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

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

0
Milan-SJ

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

0
Gnanz