Java 从表单post操作检索值
假设我有一些像这样的Java 从表单post操作检索值,java,html,jsp,google-app-engine,http,Java,Html,Jsp,Google App Engine,Http,假设我有一些像这样的表单 <form action="/add_scores" method="post" enctype="multipart/form-data" id="add_link_form"> <input type="text" name="subject" id="subject" placeholder="subject"> <input type="text" name="link" id="link"> <
表单
<form action="/add_scores" method="post" enctype="multipart/form-data" id="add_link_form">
<input type="text" name="subject" id="subject" placeholder="subject">
<input type="text" name="link" id="link">
<button type="submit" class="btn btn-success">Add</button>
</form>
当我发布内容时,subject
和link
总是null
。但是,如果我在表单中使用method=“get”
,并将doPost
重命名为doGet
,则此代码工作正常,subject
和link
都很好。(如果我将getAttribute()
更改为getParameter()
,也会发生这种情况)
为什么会发生这种情况?如何在doPost
中获取值?根据,您应该使用getParameter
,而不是getAttribute
;根据,您的表单应该使用enctype=“application/x-www-form-urlencoded”
——多部分编码类型用于上传文件的表单。顺便说一句,这两个问题都不取决于您使用的是App Engine还是其他web服务器。试试这个:
@Override
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
String subject = req.getParameter("subject");
String link = req.getParameter("link");
}
@Pshemo我正在使用谷歌应用程序引擎。我对JavaEE还不熟悉,从来没有使用过那个平台。但为了确保我正确理解您的问题,您声称使用
getAttribute
的doGet
工作正常,但使用getAttribute
的doPost
不正常,您问这是为什么?(无论如何,读取
参数的正确方法是使用getParameter
而不是getAttribute
两种do…
方法)。@Pshemo-yes。我在do
方法中使用了getParameter
和getAttribute
。它在doGet
中工作,但不在doPost
中工作。测试代码后,问题似乎与enctype=“multipart/form data”
有关。我不是web开发人员,所以我在这里的知识非常有限,但当我从表单中删除此信息时,我能够使用getParameter
方法读取post
发送的所有数据。我在Tomcat上测试了它,所以我的测试结果可能与您的不同。就像我说的,我不是web开发人员,所以删除enctype=“multipart/form data”
可能不是最好的解决方案(可能还有其他/更好的选项-可能是更改字符集-所以让我们等着看其他人会怎么说)@Pshemo在我的情况下,这个解决方案也没有帮助。无论如何,谢谢你的努力。我想我会保留它的get
。抱歉这个愚蠢的问题(我在现实世界的web开发方面没有太多经验),但是application/x-www-form-urlencoded
不是默认的enctype吗?如果是,那么按照我之前的评论删除enctype
应该可以纠正这个问题,但是OP声称即使使用getProperty
@Pshemo,他仍然无法接收正确的数据,是的,这确实是enctype的默认值(根据我提到的w3.org文档)——我只是认为“显式优于隐式”。我无法再现OP报告的具体症状,因此我认为,在99.4%的此类病例中,他实际上没有尝试过所有组合(getParameter和正确的enctype)。
@Override
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
String subject = req.getParameter("subject");
String link = req.getParameter("link");
}