Java 属性未保存在多个请求的HTTP会话中

Java 属性未保存在多个请求的HTTP会话中,java,html,session,servlets,Java,Html,Session,Servlets,我想在一个servlet中创建一个会话,当多个请求传入时,我可以向其中添加数据。我首先检查会话是否为null,如果为null,则获取会话并在其中存储初始属性。这就是我对servlet的第一个请求的期望。对于进一步的请求,会话应该存在,我将数据修改为会话中的属性。但在我的else条件下,我的属性不存在。如何通过多个请求使会话持久化?多谢各位 protected void processRequest(HttpServletRequest request, HttpServletResponse r

我想在一个servlet中创建一个会话,当多个请求传入时,我可以向其中添加数据。我首先检查会话是否为null,如果为null,则获取会话并在其中存储初始属性。这就是我对servlet的第一个请求的期望。对于进一步的请求,会话应该存在,我将数据修改为会话中的属性。但在我的else条件下,我的属性不存在。如何通过多个请求使会话持久化?多谢各位

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");
            }
        }

    }
}
protectedvoidprocessrequest(HttpServletRequest请求,HttpServletResponse响应)
抛出ServletException、IOException{
setContentType(“text/html;charset=UTF-8”);
尝试(PrintWriter out=response.getWriter()){
整数数量=0;
项目[]项目=新项目[9];
int currRow=Integer.parseInt(request.getParameter(“rowNum”);
HttpSession session=request.getSession(false);
if(会话==null){
session=request.getSession();
对于(int i=0;i<9;i++){
项目[i]=新项目();
项[i].setID(request.getParameter(“ID”+(i+1));
item[i].setPrice(Double.parseDouble(request.getParameter(“p”+(i+1)));
session.setAttribute(Integer.toString((i+1)),项[i]);
}
quantity=Integer.parseInt(request.getParameter(“q”+currRow));
Item currItem=(Item)session.getAttribute(Integer.toString(currRow));
currItem.setQuantity(currItem.getQuantity()+数量);
session.setAttribute(Integer.toString(currRow),currItem);
}否则{
if(null==session.getAttribute(“2”)){
out.println(“不存在”);
}否则{
out.println(“存在”);
}
}
}
}
修正:

protectedvoidprocessrequest(HttpServletRequest请求,HttpServletResponse响应)
抛出ServletException、IOException{
setContentType(“text/html;charset=UTF-8”);
尝试(PrintWriter out=response.getWriter()){
整数数量=0;
项目[]项目=新项目[9];
int currRow=Integer.parseInt(request.getParameter(“rowNum”);
HttpSession session=request.getSession();
项目-货币项目;
if(session.getAttribute(“1”)==null){
对于(int i=0;i<9;i++){
项目[i]=新项目();
项[i].setID(request.getParameter(“ID”+(i+1));
item[i].setPrice(Double.parseDouble(request.getParameter(“p”+(i+1)));
session.setAttribute(Integer.toString((i+1)),项[i]);
}
quantity=Integer.parseInt(request.getParameter(“q”+currRow));
currItem=(Item)session.getAttribute(Integer.toString(currRow));
currItem.setQuantity(currItem.getQuantity()+数量);
}否则{
quantity=Integer.parseInt(request.getParameter(“q”+currRow));
currItem=(Item)session.getAttribute(Integer.toString(currRow));
currItem.setQuantity(currItem.getQuantity()+数量);
}
}

您可以只使用request.getSession()而不是request.getSession(false);以及随后的空检查

如果不存在,它将创建一个新的,或者在找到时使用现有的。

虽然我仍然不明白为什么我的代码不起作用,但这个解决方案实际上是有效的。
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);
        }
}