4
這是我在大學的java webapps類。 用戶可以將成員添加屬性作爲一對(名稱和值)添加到會話中。所以我使用HashMap。 用戶可以在同一個會話中多次添加這樣的對。因此,我希望將整個散列表存儲在會話中,並且每次按下提交按鈕時都應將該對添加到映射中。但是,通過此代碼,只顯示最後添加的對。我不知道爲什麼會發生這種情況在java webapp中存儲HashMap會話
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();
}
}
試圖通過使用調試器單步執行代碼,看看發生了什麼,你不要指望。 –
當然,我當然是在調試過程中,並且首先自己尋找解決方案。 HashMap的大小始終爲1,因此它不保留以前的條目。現在已經修復了。 – Charlie