4

これは、大学での私の Java webapps クラス用です。ユーザーは、属性をペア (名前と値) としてセッションに追加できます。だから私はハッシュマップを使用します。ユーザーは、同じセッションでそのようなペアを複数回追加する可能性があります。したがって、ハッシュマップ全体をセッションに保存し、送信ボタンが押されるたびにペアをマップに追加する必要があります。ただし、このコードでは、最後に追加されたペアのみが表示されます。なぜこれが起こるのか分かりません

 Map<String, String> lijst;

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    HttpSession session = request.getSession();
    if (session.isNew()) {
        lijst = new HashMap<String, String>();
        session.setAttribute("lijst", lijst);
    } else {
        lijst = (HashMap<String, String>) session.getAttribute("lijst");
    }

    String naam = request.getParameter("naam");
    String waarde = request.getParameter("waarde");


    lijst.put(naam, waarde);
    printResultaat(request, response);

}

private void printResultaat(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Sessie demo</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Sessie demo</h1>");
        out.println("<a href=\"voegtoe.html\">Toevoegen</a>");
        HttpSession session = request.getSession();
        out.println("<h3>Sessie gegevens</h3>");
        out.println("<p>Sessie aangemaakt op: " + new Date(session.getCreationTime()) + "</p>");
        out.println("<p>Sessie timeout: " + ((session.getMaxInactiveInterval()) / 60) + "</p>");
        HashMap<String, String> lijstAttr = (HashMap<String, String>) session.getAttribute("lijst");
        Iterator it = lijstAttr.entrySet().iterator();
        out.println("<h3>Sessie attributen (naam - waarde)</h3>");
        while (it.hasNext()) {
            Map.Entry pairs = (Map.Entry) it.next();
            out.println(pairs.getKey() + " " + pairs.getValue());
            it.remove();
        }
        out.println("</body>");
        out.println("</html>");
    } finally {
        out.close();
    }
}
4

1 に答える 1

4

印刷するたびにハッシュマップを明示的にクリーンアップしているようです。

    while (it.hasNext()) {
        Map.Entry pairs = (Map.Entry) it.next();
        out.println(pairs.getKey() + " " + pairs.getValue());
        it.remove();   // <-----------
    }

次の行を削除するだけですit.remove()

于 2012-12-01T23:12:31.597 に答える