2012-01-01 2 views
2

У меня есть HTML-форму, как это:HTML метод POST форма вызывает метод Java Servlet doGet

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 

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

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

648 126,229267 87.105.184.89 192.168.1.100 HTTP POST 557/post2 HTTP/1.1 (применение/х-WWW-форм-urlencoded)

953 379,456916 192.168.1.100 87.105.184.89 HTTP 239 HTTP/1.1 302 Moved Временно

955 379,462518 192.168.1.100 87.105.184.89 HTTP 470 GET/post2/ HT TP/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

+1

Для начала, вы забыли '' тег. –

+2

Используйте Wireshark или что-то, чтобы убедиться, что вы действительно получаете POST. –

+0

Вы действительно представляете форму? Для того, чтобы 'name' был пустым, поле не может быть отправлено; это будет пустая строка, если в элементе ввода не было значения. –

ответ

2

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

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

+0

То же самое .. я думаю - REQUEST_METHOD = GET – mynameismarcin

+1

Измените свой вопрос и добавьте маршрутизацию логика, как ваша инфраструктура направляет определенный URL-адрес вашему представлению doDo. –

+0

Кажется, что вы правы - когда я изменил перенаправление с/post2 на/post2/post, хорошо работает. Спасибо вам :) – mynameismarcin

0

Вы должны добавить атрибут value к входному тегу:

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

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

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

<input name="name" type="text" id="name" value="john"/> 
+0

Я добавляю значение, как вы сказали, но это не помогает .. BTW, когда я использую в форме метод GET, отображает имя правильно – mynameismarcin

0

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

-1

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

String name = request.getParameter("name").toString(); 
+0

Не могли бы вы рассказать о том, как и почему он решает проблему? Лучше дать представление, а не просто ответы. –

Смежные вопросы