package coreservlets; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; import java.text.NumberFormat; /** Shows all items currently in ShoppingCart. Clients * have their own session that keeps track of which * ShoppingCart is theirs. If this is their first visit * to the order page, a new shopping cart is created. * Usually, people come to this page by way of a page * showing catalog entries, so this page adds an additional * item to the shopping cart. But users can also * bookmark this page, access it from their history list, * or be sent back to it by clicking on the "Update Order" * button after changing the number of items ordered. *

* Taken from Core Servlets and JavaServer Pages * from Prentice Hall and Sun Microsystems Press, * http://www.coreservlets.com/. * © 2000 Marty Hall; may be freely used or adapted. */ public class OrderPage extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(true); ShoppingCart cart; synchronized(session) { cart = (ShoppingCart)session.getValue("shoppingCart"); // New visitors get a fresh shopping cart. // Previous visitors keep using their existing cart. if (cart == null) { cart = new ShoppingCart(); session.putValue("shoppingCart", cart); } String itemID = request.getParameter("itemID"); if (itemID != null) { String numItemsString = request.getParameter("numItems"); if (numItemsString == null) { // If request specified an ID but no number, // then customers came here via an "Add Item to Cart" // button on a catalog page. cart.addItem(itemID); } else { // If request specified an ID and number, then // customers came here via an "Update Order" button // after changing the number of items in order. // Note that specifying a number of 0 results // in item being deleted from cart. int numItems; try { numItems = Integer.parseInt(numItemsString); } catch(NumberFormatException nfe) { numItems = 1; } cart.setNumOrdered(itemID, numItems); } } } // Whether or not the customer changed the order, show // order status. response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "Status of Your Order"; out.println(ServletUtilities.headWithTitle(title) + "\n" + "

" + title + "

"); synchronized(session) { Vector itemsOrdered = cart.getItemsOrdered(); if (itemsOrdered.size() == 0) { out.println("

No items in your cart...

"); } else { // If there is at least one item in cart, show table // of items ordered. out.println ("\n" + "\n" + "
Item IDDescription\n" + " Unit CostNumberTotal Cost"); ItemOrder order; // Rounds to two decimal places, inserts dollar // sign (or other currency symbol), etc., as // appropriate in current Locale. NumberFormat formatter = NumberFormat.getCurrencyInstance(); String formURL = "/servlet/coreservlets.OrderPage"; // Pass URLs that reference own site through encodeURL. formURL = response.encodeURL(formURL); // For each entry in shopping cart, make // table row showing ID, description, per-item // cost, number ordered, and total cost. // Put number ordered in textfield that user // can change, with "Update Order" button next // to it, which resubmits to this same page // but specifying a different number of items. for(int i=0; i\n" + " " + order.getItemID() + "\n" + " " + order.getShortDescription() + "\n" + " " + formatter.format(order.getUnitCost()) + "\n" + " " + "
\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "
\n" + "
" + formatter.format(order.getTotalCost())); } String checkoutURL = response.encodeURL("/Checkout.html"); // "Proceed to Checkout" button below table out.println ("
\n" + "
\n" + "
\n" + "\n" + "
"); } out.println(""); } } /** POST and GET requests handled identically. */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }