0

我是 servlet 的新手,我对 HttpSession 有疑问,

protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
       // processRequest(request, response);

        String name = request.getParameter("Name");
        String phone = request.getParameter("Phone");
        String dummy = "some";

        HttpSession ses = request.getSession();
        ses.setAttribute("SesName", name);
        ses.setAttribute("SesPhone", phone);
        ses.setAttribute("SesName", dummy);

        RequestDispatcher rd = request.getRequestDispatcher("./SessionApiImp");
        rd.forward(request, response);

    } 

现在在另一个 servlet 中,

protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
       // processRequest(request, response);
        HttpSession sess = request.getSession();

        PrintWriter pw = response.getWriter();

        pw.println(sess.getAttribute("SesName"));
        pw.println(sess.getAttribute("SesPhone"));

    } 

- 那么分配给这个的值是什么?我试过了,它返回了与假人相关的值。是什么原因?

谢谢,阿尼尔。

4

2 回答 2

5

原因是您为属性设置的最后一个值SesNamedummy

ses.setAttribute("SesName", name);
ses.setAttribute("SesPhone", phone);
ses.setAttribute("SesName", dummy); // HERE!

javadoc

如果同名对象已绑定到会话,则替换该对象。

于 2012-05-17T07:42:56.167 回答
3

它实际上非常直观:如果您将新值放在现有键下,它会覆盖以前的值。否则将无法更新会话中已经存在的条目。

ses.setAttribute("SesName", name);
//...
ses.setAttribute("SesName", dummy);
于 2012-05-17T07:44:19.740 回答