9

私のビューはHTML5です。FormDataを使用してサーブレットへのAJAX2POSTを作成しています。サーブレット内で、リクエストパラメータを読み取ろうとしています。パラメータが表示されません。ただし、GoogleChromeDevコンソールにはリクエストペイロードが表示されます。サーブレットコードで同じものを取得するにはどうすればよいですか?どんな助けでもありがたいです。これがコードです。

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

サーブレットコード(両方のパラメータが返されますnull

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

GoogleChromeコンソール

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

1 に答える 1

19

HTML5APIはリクエストFormDataを送信しますmultipart/form-data。当初は、新しいバージョン2でajaxによってファイルをアップロードできるように設計されていますXMLHttpRequest。以前のバージョンではファイルをアップロードできませんでした。

request.getParameter()デフォルトでは、リクエストのみを認識しますapplication/x-www-form-urlencoded。しかし、あなたはmultipart/form-dataリクエストを送信しています。@MultipartConfigで取得できるように、サーブレットクラスに注釈を付ける必要がありますrequest.getParameter()

@WebServlet
@MultipartConfig
public class YourServlet extends HttpServlet {}

または、まだサーブレット3.0を使用していない場合は、ApacheCommonsFileUploadを使用します。両方のアプローチの詳細については、「JSP/サーブレットを使用してファイルをサーバーにアップロードする方法」を参照してください。

ファイルをアップロードする必要がまったくない場合は、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);

@MultipartConfigこのようにして、サーブレットはもう必要ありません。

参照:

于 2012-04-24T14:26:04.503 に答える