0

jQueryを使用してPOSTリクエストを送信しています:

$.post(
'test',
{ foo: 'bar'}
);

そして、それを処理するための単純なサーブレットがあります。

@WebServlet("/test")
public class TestServlet extends HttpServlet {

  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp)
          throws ServletException, IOException {
      Map<String, String[]> parameterMap = req.getParameterMap();
  }

}

しかし、サーブレットの requestMap は空であることが判明しました。私は何を間違っていますか?

編集:JSF Faceletページからこのスクリプトを呼び出すことを忘れていました。なぜわざわざ Ajax リクエストを手動で発行するのか、なぜサーブレットを使用してそれらを処理するのか、私に聞かないでください。長い話です。私はそれがJSF的な方法ではないことを知っています。

@BalusC の回答の後、次のようなサーブレット フィルターを追加してみました。

@WebFilter(urlPatterns="/test")
public class TestFilter implements Filter {
    @Override
    public void destroy() { }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        Map<String, String[]> parameterMap = request.getParameterMap();
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException { }
}

そしてそれは働いた!フィルターでパラメーターを取得できただけでなく、サーブレットからもアクセスできました。では、誰かこれがどんな魔法なのか説明してくれませんか?

4

1 に答える 1

0

要求と応答のチェーン内のコードが呼び出されたrequest.getReader()場合、またはrequest.getInputStream()事前に呼び出された場合、パラメーター マップは空になります。HTTP リクエストの本文は、1 回だけ読み取って解析できます (クライアントは、サーバーの必要に応じて何度も再送信することはありません)。すべてのフィルターを確認してください。

于 2012-04-15T13:04:07.353 に答える