0

サーブレットは初めてです。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);

    } 

今、別のサーブレットで、

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

その理由は、属性に最後に設定した値SesNameが次のdummyとおりであるためです。

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 に答える