Java servlet:request.getParameter 和 request.setAttribute 以我不明白的方式连接

jrh*_*ker 2 java jsp servlets

在 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");
Run Code Online (Sandbox Code Playgroud)

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

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

        request.getRequestDispatcher(page).forward(request, response);
Run Code Online (Sandbox Code Playgroud)

然后我再次通过 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");           
%>
Run Code Online (Sandbox Code Playgroud)

这有效,除非我通过 doPost 方法重写了该值。如果是这种情况,那么我必须在 JSP 中使用 request.getAttribute 来检索它,因为 request.getParameter 将检索在 doPost 方法顶部定义的值,忽略在顶部和底部。

有没有人对此有解释?我已经让一切正常工作,但我想了解为什么我花了几个小时的挫败感来弄清楚出了什么问题。

Sot*_*lis 5

getParameter并且getAttribute完全无关的。

getParameter

以字符串形式返回请求参数的值,如果该参数不存在,则返回 null。请求参数是与请求一起发送的额外信息。对于 HTTP servlet,参数包含在查询字符串或发布的表单数据中。

getAttribute

将命名属性的值作为对象返回,如果不存在给定名称的属性,则返回 null。

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