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

问题描述 投票:0回答:1

我的观点是 HTML 5。我正在使用 FormData 对 Servlet 进行 AJAX 2 POST。在 servlet 内部,我试图读取请求参数。我看不到任何参数。但是,Google Chrome 开发控制台会显示请求负载。如何在 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
ajax html servlets xmlhttprequest form-data
1个回答
19
投票

HTML5

FormData
API 发送
multipart/form-data
请求。它最初设计为能够通过 Ajax 上传文件,级别 2。
XMLHttpRequest
级别 2 无法上传文件。
XMLHttpRequest
第一级别无法上传文件。

默认情况下,

request.getParameter()
仅识别
application/x-www-form-urlencoded
请求。但您正在发送
multipart/form-data
请求。您需要使用
@MultipartConfig
明确注释您的 servlet 类,以便您可以通过
request.getParameter()
获取它们。

@WebServlet
@MultipartConfig
public class YourServlet extends HttpServlet {}

或者,如果您实际上根本不需要上传文件,而只需要发送纯字符串,则可以使用“标准”

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

这样您的 servlet 上就不再需要

@MultipartConfig

另请参阅:

© www.soinside.com 2019 - 2024. All rights reserved.