This question already has answers here:
Difference between getAttribute() and getParameter()
                                
                                    (10个答案)
                                
                        
                                5年前关闭。
            
                    
在doPost方法的顶部,我获取了一些以前使用基本形式在JSP中设置的参数:

protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        String serverName = request.getParameter("serverName");
        String destFileName = request.getParameter("destFileName");
        String userName = request.getParameter("userName");
        String Message= request.getParameter("Message");


在doPost方法的末尾,我使用setAttribute将它们添加回请求对象中:

        request.setAttribute("userName ", userName );
        request.setAttribute("destFileName", destFileName);
        request.setAttribute("serverName", serverName);
        request.setAttribute("Message", Message);

        request.getRequestDispatcher(page).forward(request, response);


然后我再次通过request.getParameter将它们放入我的JSP中:

<%  /** if the parameters are already in place, grab them **/
    String destFileName = request.getParameter("destFileName");
    String user = request.getParameter("user");
    String serverName = request.getParameter("serverName");
    String Message = request.getParameter("Message");
%>


除非我已经通过doPost方法重写了它的值,否则这将起作用。如果是这种情况,那么我必须在JSP中使用request.getAttribute来检索它,因为request.getParameter将检索在doPost方法顶部定义的值,而忽略在顶部和底部之间进行的任何更改。底部。

有人对此有解释吗?我已经完成了所有工作,但是我想了解为什么我要花几个小时沮丧地弄清楚问题出在哪里。

最佳答案

getParametergetAttribute完全无关。

getParameter


  以String的形式返回请求参数的值;如果
  参数不存在。请求参数是额外的信息
  与请求一起发送。对于HTTP Servlet,参数包含在
  查询字符串或已过帐的表单数据。


getAttribute


  以Object的形式返回指定属性的值;如果没有,则返回null
  给定名称的属性存在。


换句话说,返回使用setAttribute()设置的值。

10-06 00:38