HTML表单方法POST调用java servlet doGet方法

HTML表单方法POST调用java servlet doGet方法,java,html,jakarta-ee,servlets,post,Java,Html,Jakarta Ee,Servlets,Post,我有这样一个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&g

我有这样一个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似乎没有从表单中看到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

957379.463979 192.168.1.100 87.105.184.89 HTTP 431 HTTP/1.1 200正常 (text/html)

路由逻辑:


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

您需要向输入标记添加一个
属性:

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

并在其中输入一个值-默认情况下,不提交空白字段

为简单起见,请尝试此选项,它预先设置了值:

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


出现
null
问题是因为您没有将表单提交到服务器。

这可能是由于重定向造成的吗?如果“/post2”重定向到“/post2/”,您的POST请求将转换为GET,丢失所有POST数据


尝试直接在浏览器中访问“/post2”,看看会发生什么。

这就解决了您的问题:

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

首先,您忘记了
标记。请使用Wireshark或其他方法确保您确实收到了帖子。您是否确实提交了表单?如果
name
为空,则无法提交该字段;如果输入元素中没有值,它将是一个空字符串。您是如何映射servlet的?在webapp中是否同时具有post2servlet和post2目录?在web.xml中向我们展示servlet的映射。我的猜测是您将其映射到/或/*,并使用webapp的上下文路径调用它。尝试将表单的操作更改为“./post2/”而不是“./post2”。我会按照您所说的那样添加值,但这没有帮助。。顺便说一句,当我在表单中使用GET方法时,servlet会正确地显示名称相同。。我认为-REQUEST_METHOD=GETEdit您的问题并添加路由逻辑,您的框架如何将特定url路由到doDo视图。当我将重定向从/post2更改为/post2/post方法时,您似乎是对的。谢谢:)你能详细说明一下它是如何解决这个问题的吗?最好是提供见解,而不是仅仅给出答案。
<input name="name" type="text" id="name" value="john"/>
String name = request.getParameter("name").toString();