为什么HttpServletRequest中的getAttribute()适用于GET方法而不适用于POST方法?

时间:2011-09-01 05:12:38

标签: java servlets post get

我正在调试向servlet发出请求的客户端AJAX问题。但该错误最终是在服务器端。您可以参考我原来的问题here。通过与更有经验的人的讨论,我发现servlet正在使用request.getAttribute()方法从请求而不是getParameter()中检索参数。所以我想开一个新问题来澄清我的怀疑。

现在我的问题是:如果我使用GET方法将参数从客户端传递到服务器,Servlet中的getAttribute()工作正常,我可以得到参数值。但是当我使用POST方法时,getAttribute()返回null。为什么它适用于GET而不适用于POST?

2 个答案:

答案 0 :(得分:3)

当属性来自GET或POST方法时,您应始终使用getParameter。当请求从另一个servlet / jsp转发时使用getAttribute。如:

ServletA:
request.setAttribute("test","value")
request.getRequestDispatcher("/ServletB").forward(request, response)


ServletB:
request.getAttribute("test") <-- you can get test attribute by using getAttribute

答案 1 :(得分:0)

  

现在我的问题是:如果我使用GET方法将参数从客户端传递到服务器,Servlet中的getAttribute()工作正常,我可以得到参数值。但是当我使用POST方法时,getAttribute()返回null。为什么它适用于GET而不适用于POST?

完全废话。您显然正在处理现有项目,该项目包含许多其他现有的servlet和过滤器。我的意思是请求 - 响应链中有另一个过滤器,它将请求参数映射到请求属性,这是出于某些非显而易见的原因。

请创建一个空白的游乐场项目并创建一个游乐场servlet,以便在现有项目中没有任何噪音的情况下更好地熟悉servlet。

另见: