Метод HTML-формы POST вызывает метод Java-сервлета doGet - PullRequest
2 голосов
/ 02 января 2012

У меня есть такая HTML-форма:

form.html:

<html>
<body>

 your name is :<br><br>

<form ACTION="../post2" METHOD="POST">
<input name="name" type="text" id="name"/>
<input name="send"  type="submit"  value="send"/>
</form>

</body>
<html>

Сервлет для обслуживания этого запроса:

post2.class:

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.*;

    public class post2 extends HttpServlet
    {

protected void doDo(HttpServletRequest request,HttpServletResponse response) 
 throws IOException{

String name = request.getParameter("name");

response.setContentType("text/html");
PrintWriter out = response.getWriter();

out.println("<HTML><BODY>");
out.println("<H2>hello "+name+"</H2>");
out.println("<BR><BR>");
out.println("info:");
out.println("<BR><BR>");
out.println("<H2>metoda GET</H2>");
out.println("<BR><BR>");
out.println("SERVER_NAME="+request.getServerName()+"<BR>");
out.println("REQUEST_METHOD="+request.getMethod()+"<BR>");
out.println("QUERY_STRING="+request.getQueryString()+"<BR>");
out.println("REMOTE_HOST="+request.getRemoteHost()+"<BR>");
out.println("REMOTE_ADDR="+request.getRemoteAddr());
out.println("</BODY></HTML>"); 
}


@Override
public void doGet(HttpServletRequest request,HttpServletResponse response) 
throws IOException {      
 doDo(request,response);
}

@Override
public void doPost(HttpServletRequest request,HttpServletResponse response) 
throws IOException {
 doDo(request,response);
}

}

и результат:

hello null


info:

SERVER_NAME=localhost
REQUEST_METHOD=GET
QUERY_STRING=null
REMOTE_HOST=127.0.0.1
REMOTE_ADDR=127.0.0.1 

что не так?Мне кажется, что сервлет не видит метод post из формы.Пожалуйста, помогите, я совершенно не знаю, почему он не работает должным образом ...

результат от Wireshark:

648 126.229267 87.105.184.89 192.168.1.100 HTTP 557 POST / post2HTTP / 1.1 (application / x-www-form-urlencoded)

953 379.456916 192.168.1.100 87.105.184.89 HTTP 239 HTTP / 1.1 302 временно перемещен

955 379.462518 192.168.1.100 87.105.184.89HTTP 470 GET / post2 / HTTP / 1.1

957 379.463979 192.168.1.100 87.105.184.89 HTTP 431 HTTP / 1.1 200 OK (текст / html)

логика маршрутизации:

tomcat\webapps\ROOT\form.html -> \tomcat\webapps\post2\WEB-INF\classes\post2.class

Ответы [ 4 ]

2 голосов
/ 02 января 2012

Может ли это быть из-за перенаправления?Если «/ post2» перенаправляет на «/ post2 /», ваш POST-запрос будет преобразован в GET, и все данные поста будут потеряны.

Попробуйте получить доступ к «/ post2» прямо в браузере и посмотрите, что произойдет.

0 голосов
/ 07 мая 2014

Это решит вашу проблему:

String name = request.getParameter("name").toString();
0 голосов
/ 02 января 2012

Проблема null возникает из-за того, что вы не отправляете форму на сервер.

0 голосов
/ 02 января 2012

Вам необходимо добавить атрибут value во входной тег:

<input name="name" type="text" id="name" value=""/>

И поставить (ввести, набрав) значение там - по умолчанию пустые поля не передаются.

Для простоты попробуйте следующее, которое предварительно устанавливает значение:

<input name="name" type="text" id="name" value="john"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...