use*_*577 7 ajax html5 servlets xmlhttprequest form-data
我的观点是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);
Run Code Online (Sandbox Code Playgroud)
Servlet代码(两个参数都返回null)
out.println("Hello! "+ request.getParameter("firstName")+ " "+ request.getParameter("lastName")+ ", thanks for sending your feedback." );
Run Code Online (Sandbox Code Playgroud)
谷歌Chrome控制台
Content-Disposition: form-data; name="firstName"
XYZ
Content-Disposition: form-data; name="lastName"
ABC
Run Code Online (Sandbox Code Playgroud)
Bal*_*usC 12
HTML5 FormDataAPI发送multipart/form-data请求.它最初设计为能够通过ajax上传文件,新版本2 XMLHttpRequest.以前的版本无法上传文件.
在request.getParameter()默认情况下,承认application/x-www-form-urlencoded只有请求.但是你发送了一个multipart/form-data请求.您需要注释您的servlet类,@MultipartConfig以便您可以获取它们request.getParameter().
@WebServlet
@MultipartConfig
public class YourServlet extends HttpServlet {}
Run Code Online (Sandbox Code Playgroud)
或者,当您还没有使用Servlet 3.0时,请使用Apache Commons FileUpload.有关这两种方法的更详细解答,请参阅:如何使用JSP/Servlet将文件上载到服务器?
如果您根本不需要上传文件,请改用"标准" 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);
Run Code Online (Sandbox Code Playgroud)
这样你就不再需要@MultipartConfig你的servlet了.