2017-11-28 12 views
-1

여러 요청이 들어올 때 데이터를 추가 할 수있는 서블릿에서 세션을 만들고 싶습니다. 먼저 세션이 null인지 확인합니다. 세션을 가져 와서 초기 속성을 저장하십시오. 이것은 서블릿에 대한 첫 번째 요청에서 내가 원하는 것입니다. 추가 요청의 경우 세션이 존재해야하며 세션의 속성에 대한 데이터가 수정됩니다. 그러나 그 밖의 조건에서는 내 속성이 존재하지 않습니다. 여러 요청을 통해 세션이 지속되도록하려면 어떻게해야합니까? 감사합니다여러 요청에서 HTTP 세션에 속성이 저장되지 않음

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 : 대신 (false)를 request.getSession의

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

답변

1

당신은 단지 request.getSession을 (사용할 수 있습니다) 및 이후의 널 확인

존재하지 않는 경우 새 것을 생성하거나 발견 된 기존 것을 사용합니다. The java docs for HtpServletRequest

+0

이 코드는 실제로 작동하지만이 코드는 실제로 왜 작동하지 않는지 이해할 수 없습니다. –