2014-07-05 80 views
0

我正在開發一個購物項目。我想要做的是存儲用戶點擊「添加到購物車」的產品的產品ID(pid)在java servlet中恢復cookie中存儲的pid的值

我在所有調用servlet的產品上都有此類html代碼「Cart.java 「,各自的PIDS:

Product1: <a href=Cart?product=1>add to cart?</a> //here 1 is the pid 
Product2: <a href=Cart?product=2>add to cart?</a> //here 2 is the pid 

單個網頁上有多個產品,有不同類型的產品(該頁面使用JDBC動態創建的)相關聯的不同的網頁。

我想要的是所有在其用戶點擊「加入購物車」的產品,PID被存儲的地方(我使用的cookie,因爲我認爲這將工作..會嗎?) 後來我應該能夠在另一個頁面上獲得所有這些PID(當用戶點擊「帶我去我的購物車」),以便我可以從數據庫中顯示他們的詳細信息,並詢問用戶是否想要購買它們。

「帶我到我的車」超鏈接調用另一個servlet ViewCart:

<a href="ViewCart">Take me to my cart</a> 

上的servlet cart.java該Cookie代碼:

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

String id=request.getParameter("product").trim(); 
Cookie ck=new Cookie("pid",id);//creating cookie object 
response.addCookie(ck); 
RequestDispatcher rd=request.getRequestDispatcher("product.jsp"); 
rd.include(request, response); 
} 

「product.jsp 「是顯示產品的頁面。

代碼在servlet的ViewCart.java是:

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 


PrintWriter out = response.getWriter(); 

     Cookie ck[]=request.getCookies(); 
     for(Cookie i: ck) 
     { 
      if(i.getName().equals("pid")) 
      out.print(ck.toString()+"</br>"); 
     } 
     RequestDispatcher rd=request.getRequestDispatcher("cart.jsp"); 
     rd.include(request, response); 
} 

但這不工作我是初學者所以不知道是不是我做錯了。我也想在用戶註銷後立即銷燬cookie中的值。也告訴我,如果不是餅乾,我還應該使用什麼?

我想我搞砸了一切。 :(

回答

0

我認爲你最好選擇一個框架,以避免重蹈覆轍,從別人已經學習和從中學習的錯誤中學習,無論如何,沒有必要亂用餅乾和低級別。一個車對象到當前會話,就大功告成了:

public class Cart { 
    public void addItem(String id, Integer quantity) {} 
    public Integer getItemQuantity(String id) {} 
    public Map<String, Integer> getAllItems() {} 
} 

然後你有添加項目到購物車(你最好使用POST爲改變應用程序的狀態請求)在servlet:

public void doPost(HttpServletRequest req, HttpServletResponse resp) { 
    HttpSession session = req.getSession(); 
    Cart cart = (Cart) session.getAttribute("cart"); 
    if (cart == null) { 
    cart = new Cart(); 
    session.setAttribute("cart", cart) 
    }; 
    String id = req.getParamter("id"); 
    Integer quantity = Integer.parseInt(req.getParamter("quantity")); 
    cart.addItem(id, quantity); 
    // write your response 
} 

最後您的ViewCartServlet

public void doGet(HttpServletRequest req, HttpServletResponse resp) { 
    Cart cart = (Cart) req.getSession().getAttribute("cart"); 
    if (cart != null) { 
    // print items 
    } else { 
    // print an error 
    } 
} 
+0

什麼問題?您可以將任何您想要的方法添加到Cart類,getItem(),getTotalPrice(),您可以將其命名。 req.getSession()爲您提供當前用戶的HttpSession,並且您可以將Cart對象放入並從中取出 – Raffaele

+0

不,我在問我的答案有什麼問題,因爲我無法簡化它。您的用戶有一個會話,會話有一個購物車,並提供兩個servlet將物品放入購物車並查看其內容 – Raffaele

+0

您的手臂上有一張地圖,一張清單,一個紋身,無論您爲什麼工作 – Raffaele