我想在servlet中创建一个会话,我可以在多个请求进入时添加数据。我首先检查会话是否为空,如果是,我得到会话并在其中存储初始属性。这是我在第一次请求servlet时所希望的。对于进一步的请求,会话应该存在,我将数据修改为会话中的属性。但在我的其他情况下,我的属性不存在。如何让会话通过多个请求持续存在?谢谢
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
int quantity = 0;
Item[] item = new Item[9];
int currRow = Integer.parseInt(request.getParameter("rowNum"));
HttpSession session = request.getSession(false);
if (session == null) {
session = request.getSession();
for (int i = 0; i < 9; i++) {
item[i] = new Item();
item[i].setID(request.getParameter("ID" + (i + 1)));
item[i].setPrice(Double.parseDouble(request.getParameter("p" + (i + 1))));
session.setAttribute(Integer.toString((i + 1)), item[i]);
}
quantity = Integer.parseInt(request.getParameter("q" + currRow));
Item currItem = (Item) session.getAttribute(Integer.toString(currRow));
currItem.setQuantity(currItem.getQuantity() + quantity);
session.setAttribute(Integer.toString(currRow), currItem);
} else {
if (null == session.getAttribute("2")) {
out.println("not exist");
} else {
out.println("exist");
}
}
}
}
FIX:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
int quantity = 0;
Item[] item = new Item[9];
int currRow = Integer.parseInt(request.getParameter("rowNum"));
HttpSession session = request.getSession();
Item currItem;
if (session.getAttribute("1") == null) {
for (int i = 0; i < 9; i++) {
item[i] = new Item();
item[i].setID(request.getParameter("ID" + (i + 1)));
item[i].setPrice(Double.parseDouble(request.getParameter("p" + (i + 1))));
session.setAttribute(Integer.toString((i + 1)), item[i]);
}
quantity = Integer.parseInt(request.getParameter("q" + currRow));
currItem = (Item) session.getAttribute(Integer.toString(currRow));
currItem.setQuantity(currItem.getQuantity() + quantity);
} else {
quantity = Integer.parseInt(request.getParameter("q" + currRow));
currItem = (Item) session.getAttribute(Integer.toString(currRow));
currItem.setQuantity(currItem.getQuantity() + quantity);
}
}
答案 0 :(得分:1)
您可以使用request.getSession()而不是request.getSession(false);以及随后的空检查。
如果不存在,它将创建一个新的,或者在找到它时使用现有的。 The java docs for HtpServletRequest