【问题标题】:Retriving values of pid stored in cookie in java servlet在java servlet中检索存储在cookie中的pid值
【发布时间】:2014-07-05 11:40:15
【问题描述】:

我正在做一个购物项目。我想要做的是存储用户点击“添加到购物车”的产品的产品 ID(pid)

我在所有调用 servlet "Cart.java" 的产品上都有这种 html 代码,以及它们各自的 pID:

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 中的值。还告诉我,如果不是 cookie,我还应该使用什么?

我想我把一切都搞砸了。 :(

【问题讨论】:

    标签: java servlets cookies shopping-cart


    【解决方案1】:

    我认为您最好选择一个框架,以避免重新发明轮子并从其他人已经犯过的错误中吸取教训。无论如何,没有必要弄乱cookie并达到如此低的水平。只需将 Cart 对象附加到当前会话即可:

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

    然后你就有了将商品添加到购物车的 servlet(你最好使用 POST 来处理改变应用程序状态的请求):

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

    【讨论】:

    • 有什么问题?您可以将任何您想要的方法添加到 Cart 类,getItem()、getTotalPrice(),您可以命名它。 req.getSession() 为您提供当前用户的 HttpSession,您可以将 Cart 对象放入/取出它
    • 不,我在问我的答案有什么问题,因为我不能让它比这更简单。您的用户有一个会话,会话有一个购物车,并且提供了两个 servlet 来将项目放入购物车并查看其内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    相关资源
    最近更新 更多