商品对象,购物车对象,servlet的实现
商品:
package app02d;
public class Product { private int id; private String name; private String description; private float price; public Product(int id, String name, String description, float price) { this.id = id; this.name = name; this.description = description; this.price = price; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; }}购物车:
package app02d;
public class ShoppingItem { private Product product; private int quantity; public ShoppingItem(Product product, int quantity) { this.product = product; this.quantity = quantity; } public Product getProduct() { return product; } public void setProduct(Product product) { this.product = product; } public int getQuantity() { return quantity; } public void setQuantity(int quantity) { this.quantity = quantity; }}servlet的实现:package app02d;
import java.io.IOException;import java.io.PrintWriter;import java.text.NumberFormat;import java.util.ArrayList;import java.util.List;import java.util.Locale;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;/** * Servlet implementation class ShoppingCartServlet */@WebServlet( name = "ShoppingCartServlet", urlPatterns = {"/products", "/viewProductDetails","/addToCart","/viewCart"})public class ShoppingCartServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final String CART_ATTRIBUTE = "cart"; private List<Product> products = new ArrayList<Product>(); private NumberFormat currencyFormat = NumberFormat .getCurrencyInstance(Locale.US); // 创建商品对象,加入商品列表中(1) @Override public void init() throws ServletException { products.add(new Product(1, "Bravo 32' HDTV", "Low-cost HDTV from renowned TV manufacturer", 159.95F)); products.add(new Product(2, "Bravo BluRay Player", "High quality stylish BluRay player", 99.95F)); products.add(new Product(3, "Bravo Stereo System", "5 speaker hifi system with iPod player", 129.95F)); products.add(new Product(4, "Bravo iPod player", "An iPod plug-in that can play multiple formats", 39.95F)); } /** * @see HttpServlet#HttpServlet() */ public ShoppingCartServlet() { super(); // TODO Auto-generated constructor stub } /** * 分支(2) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String uri = request.getRequestURI(); if (uri.endsWith("/products")) { // 查询商品列表 sendProductList(response); } else if (uri.endsWith("/viewProductDetails")) { // 显示商品详细信息 sendProductDetails(request, response); } else if (uri.endsWith("viewCart")) { // 显示购物车 showCart(request, response); } } /** * addToCart */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // add to cart int productId = 0; // 商品id int quantity = 1; // 商品数量(默认购买一件) try { productId = Integer.parseInt( request.getParameter("id")); quantity = Integer.parseInt(request .getParameter("quantity")); } catch (NumberFormatException e) { } Product product = getProduct(productId); if (product != null && quantity >= 0) { ShoppingItem shoppingItem = new ShoppingItem(product, quantity); // 创建session对象 HttpSession session = request.getSession(); List<ShoppingItem> cart = (List<ShoppingItem>) session.getAttribute(CART_ATTRIBUTE); if (cart == null) { cart = new ArrayList<ShoppingItem>(); // 设置session值 session.setAttribute(CART_ATTRIBUTE, cart); } cart.add(shoppingItem); } sendProductList(response); } /** * 显示商品列表 (4) * @param response * @throws IOException */ private void sendProductList(HttpServletResponse response) throws IOException { response.setContentType("text/html"); PrintWriter writer = response.getWriter(); writer.println("<html><head><title>Products</title>" + "</head><body><h2>Products</h2>"); writer.println("<ul>"); for (Product product : products) { writer.println("<li>" + product.getName() + "(" + currencyFormat.format(product.getPrice()) // 商品详细信息的显示 + ") (" + "<a href='viewProductDetails?id=" + product.getId() + "'>Details</a>)"); } writer.println("</ul>"); writer.println("<a href='viewCart'>View Cart</a>"); writer.println("</body></html>"); } /** * 根据商品id获取商品对象 * @param productId * @return */ private Product getProduct(int productId) { for (Product product : products) { if (product.getId() == productId) { return product; } } return null; } /** * 获取商品的详细信息,并显示 * @param request * @param response * @throws IOException */ private void sendProductDetails(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html"); PrintWriter writer = response.getWriter(); int productId = 0; try { productId = Integer.parseInt( request.getParameter("id")); } catch (NumberFormatException e) { } Product product = getProduct(productId); if (product != null) { writer.println("<html><head>" + "<title>Product Details</title></head>" + "<body><h2>Product Details</h2>" + "<form method='post' action='addToCart'>"); // 隐藏域 writer.println("<input type='hidden' name='id' " + "value='" + productId + "'/>"); writer.println("<table>"); writer.println("<tr><td>Name:</td><td>" + product.getName() + "</td></tr>"); writer.println("<tr><td>Description:</td><td>" + product.getDescription() + "</td></tr>"); writer.println("<tr>" + "<tr>" // 购买的数量 + "<td><input name='quantity'/></td>" + "<td><input type='submit' value='Buy'/>" + "</td>" + "</tr>"); writer.println("<tr><td colspan='2'>" + "<a href='products'>Product List</a>" + "</td></tr>"); writer.println("</table>"); writer.println("</form></body>"); } else { writer.println("No product found"); } } /** * 显示购物车 * @param request * @param response * @throws IOException */ private void showCart(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html"); PrintWriter writer = response.getWriter(); writer.println("<html><head><title>Shopping Cart</title>" + "</head>"); writer.println("<body><a href='products'>" + "Product List</a>"); // 创建session对象 HttpSession session = request.getSession(); // 获取session内容 List<ShoppingItem> cart = (List<ShoppingItem>) session.getAttribute(CART_ATTRIBUTE); if (cart != null) { writer.println("<table>"); writer.println("<tr><td style='width:150px'>Quantity" + "</td>" + "<td style='width:150px'>Product</td>" + "<td style='width:150px'>Price</td>" + "<td>Amount</td></tr>"); double total = 0.0; for (ShoppingItem shoppingItem : cart) { Product product = shoppingItem.getProduct(); int quantity = shoppingItem.getQuantity(); if (quantity != 0) { float price = product.getPrice(); writer.println("<tr>"); writer.println("<td>" + quantity + "</td>"); writer.println("<td>" + product.getName() + "</td>"); writer.println("<td>" + currencyFormat.format(price) + "</td>"); double subtotal = price * quantity; writer.println("<td>" + currencyFormat.format(subtotal) + "</td>"); total += subtotal; writer.println("</tr>"); } } writer.println("<tr><td colspan='4' " + "style='text-align:right'>" + "Total:" + currencyFormat.format(total) + "</td></tr>"); writer.println("</table>"); } writer.println("</table></body></html>"); }}