Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从表单post操作检索值_Java_Html_Jsp_Google App Engine_Http - Fatal编程技术网

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");
}