我正在使用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中访问!那么,有人可以解释一下这是什么样的魔法吗?
答案 0 :(得分:0)
如果请求 - 响应链中的某些代码事先已调用request.getReader()
或request.getInputStream()
,则参数映射将为空。 HTTP请求主体只能被读取和解析一次(客户端不会根据服务器的需要多次重新发送它)。检查所有过滤器。