【发布时间】:2012-01-31 12:29:22
【问题描述】:
我有一个这样的 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>
为这个请求提供服务的 servlet:
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
怎么了?对我来说,servlet 似乎没有从表单中看到 post 方法。请帮忙,我完全不知道为什么它不能正常工作......
wireshark 的结果:
648 126.229267 87.105.184.89 192.168.1.100 HTTP 557 POST /post2 HTTP/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.89 HTTP 470 GET /post2/ HTTP/1.1
957 379.463979 192.168.1.100 87.105.184.89 HTTP 431 HTTP/1.1 200 正常 (文本/html)
路由逻辑:
tomcat\webapps\ROOT\form.html --> \tomcat\webapps\post2\WEB-INF\classes\post2.class
【问题讨论】:
-
首先,您忘记了
</form>标签。 -
使用 Wireshark 或其他工具确保您确实收到了 POST。
-
您真的在提交表单吗?对于
name为空,该字段不能提交;如果输入元素中没有值,它将是一个空字符串。 -
你是如何映射 servlet 的?您在 webapp 中是否同时拥有 post2 servlet 和 post2 目录?
-
向我们展示 web.xml 中 servlet 的映射。我的猜测是您将它映射到 / 或 /*,然后使用 webapp 的上下文路径调用它。尝试将表单的操作更改为“../post2/”而不是“../post2”
标签: java html jakarta-ee servlets post