1. 购物车程序
Item.java:商品类,包括商品编号itemID、商品名字itemName、商品简述itemDescription、商品单价itemPrice
package edu.cn;
public class Item {
private String itemID;
private String itemName;
private String itemDescription;
private double itemPrice;
public Item(String itemID, String itemName, String itemDescription,
double itemPrice) {
super();
this.itemID = itemID;
this.itemName = itemName;
this.itemDescription = itemDescription;
this.itemPrice = itemPrice;
}
public String getItemID() {
return itemID;
}
public void setItemID(String itemID) {
this.itemID = itemID;
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
public String getItemDescription() {
return itemDescription;
}
public void setItemDescription(String itemDescription) {
this.itemDescription = itemDescription;
}
public double getItemPrice() {
return itemPrice;
}
public void setItemPrice(double itemPrice) {
this.itemPrice = itemPrice;
}
}
2.orderItem.java已订购商品的类:包括商品Item对象item,商品数量numItems.
方法包括构造方法(默认商品数量为1)、getter、setter方法、获取设置item对象相关属性的方法
package edu.cn;
public class OrderItem {
private Item item;
private int numItems;
public OrderItem(Item item){
this.item=item;
numItems=1;
}
public Item getItem() {
return item;
}
public void setItem(Item item) {
this.item = item;
}
public int getNumItems() {
return numItems;
}
public void setNumItems(int numItems) {
this.numItems = numItems;
}
public String getItemID(){
return getItem().getItemID();
}
public String getItemName(){
return getItem().getItemName();
}
public String getItemDescription(){
return getItem().getItemDescription();
}
public double getItemPrice(){
return getItem().getItemPrice();
}
public void cancelOrder(){
setNumItems(0);
}
public double getTotalCost(){
return getItemPrice()*getNumItems();
}
public void numIncremental(){
setNumItems(getNumItems()+1);
}
}
3.ShoppingCart购物车类:包括已订购商品的集合itemsOrdered.
方法包括构造方法,getter方法,当没有确定的购买数量时,默认购买商品数量为1,使用addItem,如果有购买商品数量,则调用setNumOrdered方法
package edu.cn;
import java.util.ArrayList;
public class ShoppingCart {
private ArrayList<OrderItem> itemsOrdered;
public ShoppingCart() {
super();
itemsOrdered=new ArrayList<OrderItem>();
}
public ArrayList<OrderItem> getItemsOrdered() {
return itemsOrdered;
}
public void addItem(String itemID){
OrderItem order;
for(int i=0;i<itemsOrdered.size();i++){
order=itemsOrdered.get(i);
if(order.getItemID().equals(itemID)){
order.numIncremental();
return;
}
}
OrderItem newOrder=new OrderItem(Catalog.getItem(itemID));
itemsOrdered.add(newOrder);
}
public void setNumOrdered(String itemID,int num){
OrderItem order;
for(int i=0;i<itemsOrdered.size();i++){
order=itemsOrdered.get(i);
if(order.getItemID().equals(itemID)){
order.setNumItems(num);
return;
}
}
OrderItem newOrder=new OrderItem(Catalog.getItem(itemID));
itemsOrdered.add(newOrder);
}
}
4.Catalog类:可购买商品的数据初始化类。Items商品数组。
方法getItem,根据商品编号获取商品对象。
package edu.cn;
public class Catalog {
public static Item[] items={
new Item("book001","JSP & Servlet","a book describes JSP & Servlet",30.00),
new Item("book002","Android","a book describes how to learn Android programming",60.30),
new Item("book003","XML","a book describes extensible markup language",20.40)
};
public static Item getItem(String itemID){
Item item;
if(itemID==null){
return null;
}
for(int i=0;i<items.length;i++){
item=items[i];
if(item.getItemID().equals(itemID)){
return item;
}
}
return null;
}
}
5.CatalogPage.jsp页面:商品列表页面,设置了一个hidden控件,名字叫"id",用于传递购买的商品编号。获取Catalog类中商品信息数据。
<%@ page language="java" import="java.util.*,edu.cn.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'CatalogPage.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%int i=0;
while(i<Catalog.items.length){ %>
<form action="order.jsp" method="post">
<%=Catalog.items[i].getItemName() %><br>
<%=Catalog.items[i].getItemDescription() %><br>
<%=Catalog.items[i].getItemPrice() %><br>
<input type="hidden" name="id" value=<%=Catalog.items[i].getItemID()%>></input>
<input type="submit" value="buy"></input>
</form>
<%
i++;} %>
</body>
</html>
6.Order.jsp购物车处理页面:设置session对象的属性“cart”的值为ShoppingCart类型,代表整个购物车。通过hidden控件,获取form表单传递来的所购买的商品的编号: orderID=request.getParameter("id");
在当前jsp页面中设置了一个form表单,也由order.jsp进行处理,在form表单中有一个控件,代表购买商品数量,是由购物车中的数量文本框提供,如果点击更新后,就会提交该参数,此时的商品数量不是默认的1,应调用ShoppingCart类的setNumOrdered方法,否则购买的商品数量为默认的1,调用addItem方法
<%@ page language="java" import="java.util.*,edu.cn.*,java.text.*" pageEncoding="utf-8" contentType="text/html; charset=utf-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'order.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
String orderID;
double sum=0;
ShoppingCart cart=(ShoppingCart)session.getAttribute("cart");
if(cart==null){
cart=new ShoppingCart();
}
orderID=request.getParameter("id");
if (orderID != null) {
String numItemsString = request.getParameter("numItems");
if (numItemsString == null) {
cart.addItem(orderID);
}
else {
int numItems;
try {
numItems = Integer.parseInt(numItemsString);
} catch(NumberFormatException nfe) {
numItems = 1;
}
cart.setNumOrdered(orderID, numItems);
}
}
session.setAttribute("cart", cart);
out.println("<table border=\"1\">");
DecimalFormat df=new DecimalFormat("#.00");
out.println("<tr><td>书名 </td><td>作者</td><td>单价</td><td>数量</td></tr>");
for(int i=0;i<cart.getItemsOrdered().size();i++){
OrderItem item=cart.getItemsOrdered().get(i);
out.println("<tr><td>"+item.getItemName()+"</td><td>"+item.getItemDescription()+"</td><td>"+item.getItemPrice()+"</td><td>");
out.println("<FORM>\n" + "<INPUT TYPE=\"HIDDEN\" NAME=\"id\"\n" +
" VALUE=\"" + item.getItemID() + "\">\n" +
"<INPUT TYPE=\"TEXT\" NAME=\"numItems\"\n" +
" SIZE=3 VALUE=\"" +
item.getNumItems() + "\">\n" +
"<SMALL>\n" +
"<INPUT TYPE=\"SUBMIT\"\n "+" VALUE=\"Update Order\">\n" +
"</SMALL>\n" +
"</FORM>\n" +
"</TD></tr>");
sum+=item.getItemPrice()*item.getNumItems();
}
out.println("</table>");
out.println("总价 为 :"+df.format(sum));
%>
<br>
<a href="CatalogPage.jsp">继续购物</a>
</body>
</html>