当前位置: 首页 > 面试题库 >

HTML5 FormData在Java Servlet request.getParameter()中返回null

锺离自明
2023-03-14
问题内容

我的观点是HTML5。我正在使用FormData对Servlet进行AJAX 2
POST。在servlet内部,我试图读取请求参数。我看不到任何参数。但是,Google Chrome
Dev控制台会显示请求有效负载。如何在Servlet代码中获得相同的信息?任何帮助将不胜感激。这是代码。

JS代码

var xhr = new XMLHttpRequest();
var formData = new FormData();
formData.append('firstName', 'ABC');
formData.append('lastName', 'XYZ');

xhr.open("POST", targetLocation, true);
xhr.send(formData);

Servlet代码(两个参数都返回null

out.println("Hello! "+ request.getParameter("firstName")+ " "+ request.getParameter("lastName")+ ", thanks for sending your feedback." );

Google Chrome浏览器控制台

Content-Disposition: form-data; name="firstName"
XYZ
Content-Disposition: form-data; name="lastName"
ABC

问题答案:

HTML5 FormDataAPI发送一个multipart/form- data请求。最初设计为能够使用新版本2通过ajax上传文件XMLHttpRequest。以前的版本无法上传文件。

request.getParameter()默认情况下,承认application/x-www- form-urlencoded只有请求。但是您正在发送multipart/form- data请求。您需要用注释servlet类,@MultipartConfig以便可以通过来获取它们request.getParameter()

@WebServlet
@MultipartConfig
public class YourServlet extends HttpServlet {}

或者,当您仍未使用Servlet 3.0时,请使用Apache Commons FileUpload。

如果根本不需要上传文件,请改用“标准” XMLHttpRequest方法

var xhr = new XMLHttpRequest();
var data = "firstName=" + encodeURIComponent(firstName)
        + "&lastName=" + encodeURIComponent(lastName);
xhr.open("POST", targetLocation, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(data);

这样,您就不再需要@MultipartConfigservlet。



 类似资料:
  • 问题内容: 我正在尝试在Java程序中阅读标准输入。我期望一系列数字后跟换行符,例如: 当通过eclipse内置控制台提供输入时,一切都会顺利进行。但是,使用Windows命令行时,程序将输出: 我的代码是: 有什么线索吗? 问题答案: 得到a 表示相关对象已到达EOF(文件末尾),或者换句话说,它们无法再获得任何标准输入。现在,您的代码明显的问题是: 的每个方法调用都会创建一个 新的 。 每个这

  • 在我开始之前,我读过类似的文章,但它们对我不起作用。 正如我在标题中解释的那样,当我单击肯定按钮(在这种情况下为“确定”)时,我会得到一个NPE。如果有人能指出我做得不正确,那就太好了!下面是我的设置的抽象版本

  • 我们正在测试Docusign在业务应用程序的审批流中的使用。我们使用OAuth解决方案进行服务集成,即JWT(JSONWeb令牌)流。 当我打电话给apiClient时。配置JWTAuthorizationFlow方法在IIS Localhost中托管的应用程序中,我获得OAuthToken并可以发送信封。 但是,当我在测试服务器上部署解决方案时,使用相同的userId、integratorKey

  • 我正在使用GLFW,只想打开一个空窗口。 我下载了适用于Windows 32的GLFW。创建了一个空控制台项目并编写了以下代码: 我认为我正确地添加了库和头文件。但是每次程序在glfwCreateWindow(..)函数,因为这个函数返回null。 有人能帮我吗?

  • 我创建了这个函数来计算我要测量的距离: 由于我不明白的原因,距离的值只返回一次。因此,如果我在forEach函数中抛出2个位置,并且在循环中使用console.log,我会看到所有的计算都是正确的。但如果我返回距离的值,则只返回一个值。 如何正确返回值? 我使用VueJS,其中'Distance toResponder'是一个计算属性来填充表: 因此函数应该返回每个响应者的距离。那么我需要如何调整

  • 首先,我看到有其他帖子也有这个问题,但没有人有和我一样的问题,即签名。verify()意外返回了false。 这是我的代码: 下面是我如何读入键(如果需要):

  • 问题内容: 有什么方法可以追溯到Eclipse吗?基本上,当我按照执行流程(Ctrl +单击等)在一个大项目中跳来跳去时,有没有办法追溯步骤?如果我的代码调用一个方法,然后转到方法定义,是否有组合键可以将我带回到调用代码? 问题答案: 像在网络浏览器中一样按+ 和+ 。