I am buliding an online bookstore with JSP and servlet which allow the user to view books and add to cart then process to checkout, but when I add an item to my cart and then I click on view cart it says cart is empty.
this is my AddToCart.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" %><%@ page import="java.util.*" %><%@ page session="true" %><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Item Added to Cart</title><link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet"></head><body class="flex items-center justify-center h-screen bg-gray-100"><div class="bg-white shadow-md rounded-lg p-8 max-w-sm w-full"><h2 class="text-2xl font-bold text-gray-800 mb-4">Item Added to Cart</h2><p class="text-gray-600 mb-4"> You have successfully added <strong><%= request.getParameter("title") %></strong> to your cart.</p><div class="flex justify-between mt-6"><a href="Cart.jsp" class="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600 transition duration-300"> View Cart</a><a href="home.jsp" class="bg-gray-300 text-gray-800 px-4 py-2 rounded hover:bg-gray-400 transition duration-300"> Continue Shopping</a></div></div></body></html>here is the AddToCartServlet.java:
import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;import java.net.URLEncoder;import java.util.ArrayList;import java.util.List;@WebServlet("/addToCart")public class AddToCartServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Retrieve the item details from the request String title = request.getParameter("title"); // Get item title from request int id = Integer.parseInt(request.getParameter("id")); // Get item ID from request // Create a new item Item newItem = new Item(id, title); // Get the user's session HttpSession session = request.getSession(); // Retrieve the cart from the session List<Item> cart = (List<Item>) session.getAttribute("cart"); if (cart == null) { cart = new ArrayList<>(); // If cart doesn't exist, initialize it } // Add the new item to the cart cart.add(newItem); session.setAttribute("cart", cart); // Update the session with the new cart // Redirect to the confirmation page with the item title response.sendRedirect("cartConfirmation.jsp?title=" + URLEncoder.encode(title, "UTF-8")); } // Item class to represent an item in the cart private static class Item { private int id; private String title; public Item(int id, String title) { this.id = id; this.title = title; } public int getId() { return id; } public String getTitle() { return title; } }}and then my cart.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" %><%@ page import="java.util.*" %><%@ page session="true" %><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Your Cart</title><link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet"></head><body class="bg-gray-100"><div class="container mx-auto p-4"><h1 class="text-3xl font-bold text-gray-800 mb-4">Your Cart</h1><% List<Map<String, String>> cart = (List<Map<String, String>>) session.getAttribute("cart"); if (cart == null || cart.isEmpty()) { %><div class="bg-white shadow-md rounded-lg p-6"><p class="text-gray-600">Your cart is currently empty.</p><a href="home.jsp" class="mt-4 inline-block bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600 transition duration-300"> Continue Shopping</a></div><% } else { %><div class="bg-white shadow-md rounded-lg p-6"><table class="min-w-full border"><thead><tr class="bg-gray-200 text-gray-600"><th class="py-3 px-4 text-left">Item</th><th class="py-3 px-4 text-left">Author</th><th class="py-3 px-4 text-left">Price</th><th class="py-3 px-4 text-left">Actions</th></tr></thead><tbody><% double total = 0.0; // To calculate total price for (Map<String, String> item : cart) { String title = item.get("title"); String author = item.get("author"); String price = item.get("price"); double itemPrice = Double.parseDouble(price); total += itemPrice; // Add to total price %><tr><td class="py-3 px-4 border-b"><%= title %></td><td class="py-3 px-4 border-b"><%= author %></td><td class="py-3 px-4 border-b">$<%= price %></td><td class="py-3 px-4 border-b"><form action="removeFromCart.jsp" method="post" class="inline"><input type="hidden" name="itemTitle" value="<%= title %>"><button type="submit" class="text-red-600 hover:underline">Remove</button></form></td></tr><% } %></tbody></table><div class="mt-4"><p class="text-gray-800 font-bold">Total: $<%= String.format("%.2f", total) %></p></div><div class="mt-6"><a href="checkout.jsp" class="bg-green-500 text-white px-4 py-2 rounded hover:bg-green-600 transition duration-300"> Proceed to Checkout</a></div></div><% } %></div></body></html>I want the cart to be able to display the item added, and then proceed to checkout, the proceeded item should be sent to the admin dashborad.