无法通过jQuery POST将参数传递给Servlet

时间:2012-04-15 11:55:37

标签: jquery servlets jsf-2 servlet-3.0

我正在使用jQuery发送POST请求:

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

我有一个简单的servlet来处理它:

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

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

}

但是servlet中的requestMap结果是空的。我究竟做错了什么?

修改: 忘了提到我从JSF Facelet页面调用这个脚本。不要问我为什么我打扰手动发出Ajax请求,以及为什么我使用servlet来处理它们。说来话长。我知道这不是JSF的方式。

在@BalusC回答之后,我尝试添加这样的servlet过滤器:

@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 { }
}

它有效!不仅我能够在过滤器中获取参数,而且它们也可以在servlet中访问!那么,有人可以解释一下这是什么样的魔法吗?

1 个答案:

答案 0 :(得分:0)

如果请求 - 响应链中的某些代码事先已调用request.getReader()request.getInputStream(),则参数映射将为空。 HTTP请求主体只能被读取和解析一次(客户端不会根据服务器的需要多次重新发送它)。检查所有过滤器。