0802-0803 category/product/[order]/orderitem/[user]

網上商城
   基本功能
        主頁 -- 熱銷商品,最新商品 ,導航欄(分類)
          熱銷商品 : select * from product where is_hot = 1
          最新商品:  select top 20 * from product order by pdate desc
         導航欄(分類):  select * from product where cid=?

        購買 ,購物車,商品詳情(展示商品詳細的信息)
        下訂單
        後臺管理
        分頁
           

      主頁  手機數碼   電腦辦公
           

 導入jar包(sqljdbc/jstl/standard)  圖片所在文件夾products放入WebContent

商品類型表
CREATE TABLE category (
  cid varchar(32) primary key, --類型編號
  cname varchar(20) DEFAULT NULL--類型名稱
)

INSERT INTO  category VALUES ('1','手機數碼'),('2','電腦辦公');
select * from category


CREATE TABLE product (
   pid varchar(32) primary key,--商品編號
   pname varchar(50) DEFAULT NULL,--商品名稱
   market_price float DEFAULT NULL,--市場價
   shop_price float DEFAULT NULL,--商品價格
   pimage varchar(200) DEFAULT NULL,--商品圖片(圖片路徑)
   pdate date DEFAULT NULL,--上架時間
   is_hot int DEFAULT NULL, --是否是熱銷商品 1:是   0:否
   pdesc varchar(255) DEFAULT NULL,--商品描述
   pflag int DEFAULT NULL,--是否下架  1:是    0:否
   cid varchar(32) DEFAULT NULL references category(cid)
   --商品類型
)

INSERT INTO product VALUES ('1','小米 4c 標準版',1399,1299,'products/1/c_0001.jpg','2015-11-02',1,'小米 4c 標準版 全網通 白色 移動聯通電信4G手機 雙卡雙待',0,'1'),
('10','華爲 Ascend Mate7',2699,2599,'products/1/c_0010.jpg','2015-11-02',1,'華爲 Ascend Mate7 月光銀 移動4G手機 雙卡雙待雙通6英寸高清大屏,纖薄機身,智能超八核,按壓式指紋識別!!選擇下方“移動老用戶4G飛享合約”,無需換號,還有話費每月返還!',0,'1'),
('11','vivo X5Pro',2399,2298,'products/1/c_0014.jpg','2015-11-02',1,'移動聯通雙4G手機 3G運存版 極光白【購機送藍牙耳機+藍牙自拍杆】新升級3G運行內存·雙2.5D弧面玻璃·眼球識別技術',0,'1'),
('12','努比亞(nubia)My 布拉格',1899,1799,'products/1/c_0013.jpg','2015-11-02',0,'努比亞(nubia)My 布拉格 銀白 移動聯通4G手機 雙卡雙待【嗨11,下單立減100】金屬機身,快速充電!布拉格相機全新體驗!',0,'1'),
('13','華爲 麥芒4',2599,2499,'products/1/c_0012.jpg','2015-11-02',1,'華爲 麥芒4 晨曦金 全網通版4G手機 雙卡雙待金屬機身 2.5D弧面屏 指紋解鎖 光學防抖',0,'1'),
('14','vivo X5M',1899,1799,'products/1/c_0011.jpg','2015-11-02',0,'vivo X5M 移動4G手機 雙卡雙待 香檳金【購機送藍牙耳機+藍牙自拍杆】5.0英寸大屏顯示·八核雙卡雙待·Hi-Fi移動KTV',0,'1'),
('15','Apple iPhone 6 (A1586)',4399,4288,'products/1/c_0015.jpg','2015-11-02',1,'Apple iPhone 6 (A1586) 16GB 金色 移動聯通電信4G手機長期省纔是真的省!點擊購機送費版,月月送話費,月月享優惠,暢享4G網絡,就在聯通4G!',0,'1'),
('16','華爲 HUAWEI Mate S 臻享版',4200,4087,'products/1/c_0016.jpg','2015-11-03',0,'華爲 HUAWEI Mate S 臻享版 手機 極晝金 移動聯通雙4G(高配)滿星評價即返30元話費啦;買就送電源+清水套+創意手機支架;優雅弧屏,mate7升級版',0,'1'),
('17','索尼(SONY) E6533 Z3+',4099,3999,'products/1/c_0017.jpg','2015-11-02',0,'索尼(SONY) E6533 Z3+ 雙卡雙4G手機 防水防塵 澗湖綠索尼z3專業防水 2070萬像素 移動聯通雙4G',0,'1'),
('18','HTC One M9+',3599,3499,'products/1/c_0018.jpg','2015-11-02',0,'HTC One M9+(M9pw) 金銀匯 移動聯通雙4G手機5.2英寸,8核CPU,指紋識別,UltraPixel超像素前置相機+2000萬/200萬後置雙鏡頭相機!降價特賣,驚喜不斷!',0,'1'),
('19','HTC Desire 826d 32G 臻珠白',1599,1469,'products/1/c_0020.jpg','2015-11-02',1,'後置1300萬+UltraPixel超像素前置攝像頭+【雙】前置揚聲器+5.5英寸【1080p】大屏!',0,'1'),
('2','中興 AXON',2899,2699,'products/1/c_0002.jpg','2015-11-05',1,'中興 AXON 天機 mini 壓力屏版 B2015 華爾金 移動聯通電信4G 雙卡雙待',0,'1'),
('20','小米 紅米2A 增強版 白色',649,549,'products/1/c_0019.jpg','2015-11-02',0,'新增至2GB 內存+16GB容量!4G雙卡雙待,聯芯 4 核 1.5GHz 處理器!',0,'1'),
('21','魅族 魅藍note2 16GB 白色',1099,999,'products/1/c_0021.jpg','2015-11-02',0,'現貨速搶,搶完即止!5.5英寸1080P分辨率屏幕,64位八核1.3GHz處理器,1300萬像素攝像頭,雙色溫雙閃光燈!',0,'1'),
('22','三星 Galaxy S5 (G9008W) 閃耀白',2099,1999,'products/1/c_0022.jpg','2015-11-02',1,'5.1英寸全高清炫麗屏,2.5GHz四核處理器,1600萬像素',0,'1'),
('23','sonim XP7700 4G手機',1799,1699,'products/1/c_0023.jpg','2015-11-09',1,'三防智能手機 移動/聯通雙4G 安全 黑黃色 雙4G美國軍工IP69 30天長待機 3米防水防摔 北斗',0,'1'),
('24','努比亞(nubia)Z9精英版 金色',3988,3888,'products/1/c_0024.jpg','2015-11-02',1,'移動聯通電信4G手機 雙卡雙待真正的無邊框!金色尊貴版!4GB+64GB大內存!',0,'1'),
('25','Apple iPhone 6 Plus (A1524) 16GB 金色',5188,4988,'products/1/c_0025.jpg','2015-11-02',0,'Apple iPhone 6 Plus (A1524) 16GB 金色 移動聯通電信4G手機 硬貨 硬實力',0,'1'),
('26','Apple iPhone 6s (A1700) 64G 玫瑰金色',6388,6088,'products/1/c_0026.jpg','2015-11-02',0,'Apple iPhone 6 Plus (A1524) 16GB 金色 移動聯通電信4G手機 硬貨 硬實力',0,'1'),
('27','三星 Galaxy Note5(N9200)32G版',5588,5388,'products/1/c_0027.jpg','2015-11-02',0,'旗艦機型!5.7英寸大屏,4+32G內存!不一樣的SPen更優化的浮窗指令!贈無線充電板!',0,'1'),
('28','三星 Galaxy S6 Edge+(G9280)32G版 鉑光金',5999,5888,'products/1/c_0028.jpg','2015-11-02',0,'贈移動電源+自拍杆+三星OTG金屬U盤+無線充電器+透明保護殼',0,'1'),
('29','LG G4(H818)陶瓷白 國際版',3018,2978,'products/1/c_0029.jpg','2015-11-02',0,'李敏鎬代言,F1.8大光圈1600萬後置攝像頭,5.5英寸2K屏,3G+32G內存,LG年度旗艦機!',0,'1'),
('3','華爲榮耀6',1599,1499,'products/1/c_0003.jpg','2015-11-02',0,'榮耀 6 (H60-L01) 3GB內存標準版 黑色 移動4G手機',0,'1'),
('30','微軟(Microsoft) Lumia 640 LTE DS (RM-1113)',1099,999,'products/1/c_0030.jpg','2015-11-02',0,'微軟首款雙網雙卡雙4G手機,5.0英寸高清大屏,雙網雙卡雙4G!',0,'1'),
('31','宏碁(acer)ATC705-N50 臺式電腦',2399,2299,'products/1/c_0031.jpg','2015-11-02',0,'爆款直降,滿千減百,品質宏碁,特惠來襲,何必苦等11.11,早買早便宜!',0,'2'),
('32','Apple MacBook Air MJVE2CH/A 13.3英寸',6788,6688,'products/1/c_0032.jpg','2015-11-02',0,'寬屏筆記本電腦 128GB 閃存',0,'2'),
'33','聯想(ThinkPad) 輕薄系列E450C(20EH0001CD)',4399,4199,'products/1/c_0033.jpg','2015-11-02',0,'聯想(ThinkPad) 輕薄系列E450C(20EH0001CD)14英寸筆記本電腦(i5-4210U 4G 500G 2G獨顯 Win8.1)',0,'2'),
('34','聯想(Lenovo)小新V3000經典版',4599,4499,'products/1/c_0034.jpg','2015-11-02',0,'14英寸超薄筆記本電腦(i7-5500U 4G 500G+8G SSHD 2G獨顯 全高清屏)黑色滿1000減100,狂減!火力全開,橫掃3天!',0,'2'),
('35','華碩(ASUS)經典系列R557LI',3799,3699,'products/1/c_0035.jpg','2015-11-02',0,'15.6英寸筆記本電腦(i5-5200U 4G 7200轉500G 2G獨顯 D刻 藍牙 Win8.1 黑色)',0,'2'),
('36','華碩(ASUS)X450J',4599,4399,'products/1/c_0036.jpg','2015-11-02',0,'14英寸筆記本電腦 (i5-4200H 4G 1TB GT940M 2G獨顯 藍牙4.0 D刻 Win8.1 黑色)',0,'2'),
('37','戴爾(DELL)靈越 飛匣3000系列',3399,3299,'products/1/c_0037.jpg','2015-11-03',0,' Ins14C-4528B 14英寸筆記本(i5-5200U 4G 500G GT820M 2G獨顯 Win8)黑',0,'2'),
('38','惠普(HP)WASD 暗影精靈',5699,5499,'products/1/c_0038.jpg','2015-11-02',0,'15.6英寸遊戲筆記本電腦(i5-6300HQ 4G 1TB+128G SSD GTX950M 4G獨顯 Win10)',0,'2'),
('39','Apple 配備 Retina 顯示屏的 MacBook',11299,10288,'products/1/c_0039.jpg','2015-11-02',0,'Pro MF840CH/A 13.3英寸寬屏筆記本電腦 256GB 閃存',0,'2'),
('4','聯想 P1',2199,1999,'products/1/c_0004.jpg','2015-11-02',0,'聯想 P1 16G 伯爵金 移動聯通4G手機充電5分鐘,通話3小時!科技源於超越!品質源於沉澱!5000mAh大電池!高端商務佳配!',0,'1'),
('40','機械革命(MECHREVO)MR X6S-M',6799,6599,'products/1/c_0040.jpg','2015-11-02',0,'15.6英寸遊戲本(I7-4710MQ 8G 64GSSD+1T GTX960M 2G獨顯 IPS屏 WIN7)黑色',0,'2'),
('41','神舟(HASEE) 戰神K660D-i7D2',5699,5499,'products/1/c_0041.jpg','2015-11-02',0,'15.6英寸遊戲本(i7-4710MQ 8G 1TB GTX960M 2G獨顯 1080P)黑色',0,'2'),
('42','微星(MSI)GE62 2QC-264XCN',6199,5999,'products/1/c_0042.jpg','2015-11-02',0,'15.6英寸遊戲筆記本電腦(i5-4210H 8G 1T GTX960MG DDR5 2G 背光鍵盤)黑色',0,'2'),
('43','雷神(ThundeRobot)G150S',5699,5499,'products/1/c_0043.jpg','2015-11-02',0,'15.6英寸遊戲本 ( i7-4710MQ 4G 500G GTX950M 2G獨顯 包無亮點全高清屏) 金',0,'2'),
('44','惠普(HP)輕薄系列 HP',3199,3099,'products/1/c_0044.jpg','2015-11-02',0,'15-r239TX 15.6英寸筆記本電腦(i5-5200U 4G 500G GT820M 2G獨顯 win8.1)金屬灰',0,'2'),
('45','未來人類(Terrans Force)T5',10999,9899,'products/1/c_0045.jpg','2015-11-02',0,'15.6英寸遊戲本(i7-5700HQ 16G 120G固態+1TB GTX970M 3G GDDR5獨顯)黑',0,'2'),
('46','戴爾(DELL)Vostro 3800-R6308 臺式電腦',3299,3199,'products/1/c_0046.jpg','2015-11-02',0,'(i3-4170 4G 500G DVD 三年上門服務 Win7)黑',0,'2'),(
'47','聯想(Lenovo)H3050 臺式電腦',5099,4899,'products/1/c_0047.jpg','2015-11-11',0,'(i5-4460 4G 500G GT720 1G獨顯 DVD 千兆網卡 Win10)23英寸',0,'2'),
('48','Apple iPad mini 2 ME279CH/A',2088,1888,'products/1/c_0048.jpg','2015-11-02',0,'(配備 Retina 顯示屏 7.9英寸 16G WLAN 機型 銀色)',0,'2'),
('49','小米(MI)7.9英寸平板',1399,1299,'products/1/c_0049.jpg','2015-11-02',0,'WIFI 64GB(NVIDIA Tegra K1 2.2GHz 2G 64G 2048*1536視網膜屏 800W)白色',0,'2'),
('5','摩托羅拉 moto x(x+1)',1799,1699,'products/1/c_0005.jpg','2015-11-01',0,'摩托羅拉 moto x(x+1)(XT1085) 32GB 天然竹 全網通4G手機11月11天!MOTO X震撼特惠來襲!1699元!帶你玩轉黑科技!天然材質,原生流暢系統!',0,'1'),
('50','Apple iPad Air 2 MGLW2CH/A',2399,2299,'products/1/c_0050.jpg','2015-11-12',0,'(9.7英寸 16G WLAN 機型 銀色)',0,'2'),
('6','魅族 MX5 16GB 銀黑色',1899,1799,'products/1/c_0006.jpg','2015-11-02',0,'魅族 MX5 16GB 銀黑色 移動聯通雙4G手機 雙卡雙待送原廠鋼化膜+保護殼+耳機!5.5英寸大屏幕,3G運行內存,2070萬+500萬像素攝像頭!長期省纔是真的省!',0,'1'),
('7','三星 Galaxy On7',1499,1398,'products/1/c_0007.jpg','2015-11-14',0,'三星 Galaxy On7(G6000)昂小七 金色 全網通4G手機 雙卡雙待新品火爆搶購中!京東尊享千元良機!5.5英寸高清大屏!1300+500W像素!評價贏30元話費券!',0,'1'),
('8','NUU NU5',1288,1190,'products/1/c_0008.jpg','2015-11-02',0,'NUU NU5 16GB 移動聯通雙4G智能手機 雙卡雙待 曬單有禮 晨光金香港品牌 2.5D弧度前後鋼化玻璃 隨機附贈手機套+鋼化貼膜 曬單送移動電源+藍牙耳機',0,'1'),
('9','樂視(Letv)樂1pro(X800)',2399,2299,'products/1/c_0009.jpg','2015-11-02',0,'樂視(Letv)樂1pro(X800)64GB 金色 移動聯通4G手機 雙卡雙待樂視生態UI+5.5英寸2K屏+高通8核處理器+4GB運行內存+64GB存儲+1300萬攝像頭!',0,'1');
/*!40000 ALTER TABLE `product` ENABLE KEYS */;
select * from product


訂單表
CREATE TABLE [order](
  oid int primary key identity,--訂單編號
  ordertime datetime DEFAULT NULL,--下單時間
  total float,--訂單總價格
  state int DEFAULT NULL, -- 0 下單  1 closed
  uid int references [user](uid) --外鍵引用用戶編號
)

select * from [user]

訂單明細 訂單項
CREATE TABLE orderitem (
   itemid  int primary key identity,--編號
   pid varchar(32)  references product(pid), --外鍵,商品編號
   num int , --商品數量
   subtotal float, --小計
   oid  int  references [order](oid) --外鍵,訂單編號
) 

create table [user](
       uid int primary key  identity NOT NULL,
	  username varchar(20) DEFAULT NULL,
	  password varchar(20) DEFAULT NULL,
	  name varchar(20) DEFAULT NULL,
	  email varchar(30) DEFAULT NULL,
	  telephone varchar(20) DEFAULT NULL,
	  birthday date DEFAULT NULL,
	  sex varchar(10) DEFAULT NULL
)

insert into [User] values('zs','123','張芳','[email protected]','18274834196','1992-10-10','女'),
('ls','456','李天星','[email protected]','18274834197','1988-10-10','男')
select * from [user]
select * from [order]




web

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>cart</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>ListProductServlet</display-name>
    <servlet-name>ListProductServlet</servlet-name>
    <servlet-class>com.hj.web.ListProductServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ListProductServlet</servlet-name>
    <url-pattern>/list</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>BuyServlet</display-name>
    <servlet-name>BuyServlet</servlet-name>
    <servlet-class>com.hj.web.BuyServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>BuyServlet</servlet-name>
    <url-pattern>/buy</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>DeleteServlet</display-name>
    <servlet-name>DeleteServlet</servlet-name>
    <servlet-class>com.hj.web.DeleteServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>DeleteServlet</servlet-name>
    <url-pattern>/delete</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>ModifyServlet</display-name>
    <servlet-name>ModifyServlet</servlet-name>
    <servlet-class>com.hj.web.ModifyServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ModifyServlet</servlet-name>
    <url-pattern>/modify</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>ClearCartServlet</display-name>
    <servlet-name>ClearCartServlet</servlet-name>
    <servlet-class>com.hj.web.ClearCartServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ClearCartServlet</servlet-name>
    <url-pattern>/clearCart</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>OrderServlet</display-name>
    <servlet-name>OrderServlet</servlet-name>
    <servlet-class>com.hj.web.OrderServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>OrderServlet</servlet-name>
    <url-pattern>/order</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>CalculateServlet</display-name>
    <servlet-name>CalculateServlet</servlet-name>
    <servlet-class>com.hj.web.CaculateServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>CalculateServlet</servlet-name>
    <url-pattern>/calculate</url-pattern>
  </servlet-mapping>
</web-app>

Cart.java

package com.hj.bean;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class Cart {//購物車
       private LinkedList<ProductItem> proItems = new LinkedList<ProductItem>();
       
       //讀屬性
       public LinkedList<ProductItem> getProItems() {
		return proItems;
	}

	//添加商品
       public void add(Product pro){
    	     for(ProductItem it:proItems){
    	    	  if(it.getProduct().equals(pro)){
    	    		  //已經存在的商品,數量+1
    	    		     Integer num = it.getNum();
    	    		     it.setNum(num+1);
    	    		     return;
    	    	  }
    	     }
    	     //第一次添加的商品
    	     ProductItem it = new ProductItem(pro, 1);
    	     proItems.add(it);   	     
       }
       
       //刪除商品--依據商品編號刪除
       public void delete(String pid){
    	     for(ProductItem it:proItems){
    	    	    if(it.getProduct().getPid().equals(pid)){
    	    	    	 //找到了要刪除的商品
    	    	    	proItems.remove(it);
    	    	    	return;
    	    	    }
    	     }
       }
       //修改商品 (修改數量)
       //第二個參數num是修改後的數量
       public void modify(String pid,Integer num){
    	    for(ProductItem it:proItems){
    	    	 if(it.getProduct().getPid().equals(pid)){
    	    		  //找到了要修改數量的商品
    	    		 it.setNum(num);
    	    		 return;
    	    	 }
    	    }
       }
       //清空購物車
       public void clearCart(){
    	   proItems.clear();
       }
       //總價--寫成一個讀屬性,獲得購物車的總價
       public Float getTotalPrice(){
    	    Float total = 0f;
    	    for(ProductItem it:proItems){
    	    	 total += it.getItemPrice();
    	    }
    	    return total;
       }

	public List<ProductItem> getSelectedItems(String[] pids) {
		List<ProductItem> its = new ArrayList<ProductItem>();
		  for(ProductItem it:proItems){
			      for(String pid:pids){
			    	    if(it.getProduct().getPid().equals(pid)){
			    	    	 its.add(it);
			    	    	 break;
			    	    }
			      }
		  }
		  
		return its;
	}
}

Product.java

package com.hj.bean;

import java.sql.Date;

/**
 * CREATE TABLE product ( pid varchar(32) primary key,--商品編號 pname varchar(50)
 * DEFAULT NULL,--商品名稱 market_price float DEFAULT NULL,--市場價 shop_price float
 * DEFAULT NULL,--商品價格 pimage varchar(200) DEFAULT NULL,--商品圖片(圖片路徑) pdate date
 * DEFAULT NULL,--上架時間 is_hot int DEFAULT NULL, --是否是熱銷商品 1:是 0:否 pdesc
 * varchar(255) DEFAULT NULL,--商品描述 pflag int DEFAULT NULL,--是否下架 1:是 0:否 cid
 * varchar(32) DEFAULT NULL references category(cid) --商品類型 )
 * 
 * @author tom
 *
 */
public class Product {
	private String pid;
	private String pname;
	private Float market_price;
	private Float shop_price;
	private String pimage;
	private Date pdate;
	private Integer is_hot;
	private String pdesc;
	private Integer pflag;
	private String cid;

	public Product() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Product(String pid, String pname, Float market_price, Float shop_price, String pimage, Date pdate,
			Integer is_hot, String pdesc, Integer pflag, String cid) {
		super();
		this.pid = pid;
		this.pname = pname;
		this.market_price = market_price;
		this.shop_price = shop_price;
		this.pimage = pimage;
		this.pdate = pdate;
		this.is_hot = is_hot;
		this.pdesc = pdesc;
		this.pflag = pflag;
		this.cid = cid;
	}
	
	

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Product other = (Product) obj;
		if (pid == null) {
			if (other.pid != null)
				return false;
		} else if (!pid.equals(other.pid))
			return false;
		return true;
	}

	public String getPid() {
		return pid;
	}

	public void setPid(String pid) {
		this.pid = pid;
	}

	public String getPname() {
		return pname;
	}

	public void setPname(String pname) {
		this.pname = pname;
	}

	public Float getMarket_price() {
		return market_price;
	}

	public void setMarket_price(Float market_price) {
		this.market_price = market_price;
	}

	public Float getShop_price() {
		return shop_price;
	}

	public void setShop_price(Float shop_price) {
		this.shop_price = shop_price;
	}

	public String getPimage() {
		return pimage;
	}

	public void setPimage(String pimage) {
		this.pimage = pimage;
	}

	public Date getPdate() {
		return pdate;
	}

	public void setPdate(Date pdate) {
		this.pdate = pdate;
	}

	public Integer getIs_hot() {
		return is_hot;
	}

	public void setIs_hot(Integer is_hot) {
		this.is_hot = is_hot;
	}

	public String getPdesc() {
		return pdesc;
	}

	public void setPdesc(String pdesc) {
		this.pdesc = pdesc;
	}

	public Integer getPflag() {
		return pflag;
	}

	public void setPflag(Integer pflag) {
		this.pflag = pflag;
	}

	public String getCid() {
		return cid;
	}

	public void setCid(String cid) {
		this.cid = cid;
	}

	  @Override
	public String toString() {
		return  pname +","+cid;
	}
}

ProductItem.java

package com.hj.bean;

public class ProductItem {//商品項
	private  Product product;//商品
	private Integer num;//商品數量
	public ProductItem() {
		super();
		// TODO Auto-generated constructor stub
	}
	public ProductItem(Product product, Integer num) {
		super();
		this.product = product;
		this.num = num;
	}
	public Product getProduct() {
		return product;
	}
	public void setProduct(Product product) {
		this.product = product;
	}
	public Integer getNum() {
		return num;
	}
	public void setNum(Integer num) {
		this.num = num;
	}
	
	//添加一個只讀屬性 itemPrice
	public Float getItemPrice(){
		return product.getShop_price()*num;
	}

}

Order.java

package com.hj.bean;

import java.sql.Date;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

/**
 * CREATE TABLE [order]( oid int primary key identity,--訂單編號 ordertime datetime
 * DEFAULT NULL,--下單時間 total float,--訂單總價格 state int DEFAULT NULL, -- 0 下單 1
 * closed uid int references [user](uid) --外鍵引用用戶編號 )
 * 
 * @author tom
 *
 */
public class Order {
	private Integer oid;
	private Timestamp ordertime;
	private Float total = 0F;
	private Integer state;
	private Integer uid;
	private List<OrderItem> orderItems;

	public Order() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Order(Integer oid, Timestamp ordertime, Float total, Integer state, Integer uid) {
		super();
		this.oid = oid;
		this.ordertime = ordertime;
		this.total = total;
		this.state = state;
		this.uid = uid;
	}

	public Integer getOid() {
		return oid;
	}

	public List<OrderItem> getOrderItems() {
		return orderItems;
	}

	public void setOrderItems(List<ProductItem> proItems) {
          this.orderItems = new ArrayList<OrderItem>();
          for(ProductItem proIt:proItems){
        	   //創建訂單項對象
        	   OrderItem oIt = new OrderItem();
        	    oIt.setPid(proIt.getProduct().getPid());
        	    oIt.setNum(proIt.getNum());
        	    oIt.setSubtotal(proIt.getItemPrice());
        	    this.orderItems.add(oIt);
          }
          //設置訂單總價
          setTotal();
	}

	public void setOid(Integer oid) {
		this.oid = oid;
	}

	public Timestamp getOrdertime() {
		return ordertime;
	}

	public void setOrdertime(Timestamp ordertime) {
		this.ordertime = ordertime;
	}

	public Float getTotal() {
		return total;
	}

	private void setTotal() {
          for(OrderItem oIt:orderItems){
        	     this.total += oIt.getSubtotal();
          }
	}

	public Integer getState() {
		return state;
	}

	public void setState(Integer state) {
		this.state = state;
	}

	public Integer getUid() {
		return uid;
	}

	public void setUid(Integer uid) {
		this.uid = uid;
	}

}

OrderItem.java 

 

package com.hj.bean;

/**
 * 訂單明細 訂單項 CREATE TABLE orderitem ( itemid int primary key identity,--編號 pid
 * varchar(32) references product(pid), --外鍵,商品編號 num int , --商品數量 subtotal
 * float, --小計 oid int references [order](oid) --外鍵,訂單編號 )
 * 
 * @author tom
 *
 */
public class OrderItem {
	private Integer itemid;
	private String pid;
	private Integer num;
	private Float subtotal;
	private Integer oid;

	public OrderItem() {
		super();
		// TODO Auto-generated constructor stub
	}

	public OrderItem(Integer itemid, String pid, Integer num, Float subtotal, Integer oid) {
		super();
		this.itemid = itemid;
		this.pid = pid;
		this.num = num;
		this.subtotal = subtotal;
		this.oid = oid;
	}

	public Integer getItemid() {
		return itemid;
	}

	public void setItemid(Integer itemid) {
		this.itemid = itemid;
	}

	public String getPid() {
		return pid;
	}

	public void setPid(String pid) {
		this.pid = pid;
	}

	public Integer getNum() {
		return num;
	}

	public void setNum(Integer num) {
		this.num = num;
	}

	public Float getSubtotal() {
		return subtotal;
	}

	public void setSubtotal(Float subtotal) {
		this.subtotal = subtotal;
	}

	public Integer getOid() {
		return oid;
	}

	public void setOid(Integer oid) {
		this.oid = oid;
	}

}

ProductDao.java

package com.hj.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.hj.bean.Product;
import com.hj.utils.DBUtils;

public class ProductDao {

	  public List<Product> queryForCategory(String cid) throws SQLException{
		      //聲明三個核心接口
		      Connection conn = null;
		      PreparedStatement prep = null;
		      ResultSet rs = null;
		      //sql
		      String sql = "select * from product where cid=?";
		      List<Product> pros = null;
		      
		      //獲得連接對象
		      try {
				conn = DBUtils.getConnection();
		      //獲得預編譯對象
				prep = conn.prepareStatement(sql);
				//設置參數
				prep.setString(1, cid);
				//發送預編譯文件,執行sql
				rs = prep.executeQuery();
				//遍歷結果集,封裝對象
				while(rs.next()){
					 if(pros==null){
						  //第一循環,實例化集合
						  pros = new ArrayList<Product>();						  
					 }
					 Product p = new Product();
					 p.setPid(rs.getString("pid"));
					 p.setPname(rs.getString("pname"));
					 p.setPimage(rs.getString("pimage"));
					 p.setMarket_price(rs.getFloat("market_price"));
					 p.setShop_price(rs.getFloat("shop_price"));
					 p.setPdate(rs.getDate("pdate"));
					 p.setPdesc(rs.getString("pdesc"));
					 p.setIs_hot(rs.getInt("is_hot"));
					 p.setPflag(rs.getInt("pflag"));
					 p.setCid(rs.getString("cid"));
					 pros.add(p);
				}
				return pros;
			} catch (SQLException e) {
				e.printStackTrace();
				throw e;
			}finally{
				   //關閉資源
				DBUtils.closeAll(rs, prep, conn);
			}
		      
	  }

	public Product queryForId(String pid) throws SQLException {
		 //聲明三個核心接口
	      Connection conn = null;
	      PreparedStatement prep = null;
	      ResultSet rs = null;
	      //sql
	      String sql = "select * from product where pid=?";
	      Product p = null;
	      
	      //獲得連接對象
	      try {
			conn = DBUtils.getConnection();
	      //獲得預編譯對象
			prep = conn.prepareStatement(sql);
			//設置參數
			prep.setString(1, pid);
			//發送預編譯文件,執行sql
			rs = prep.executeQuery();
			//遍歷結果集,封裝對象
			while(rs.next()){
		         p = new Product();
				 p.setPid(rs.getString("pid"));
				 p.setPname(rs.getString("pname"));
				 p.setPimage(rs.getString("pimage"));
				 p.setMarket_price(rs.getFloat("market_price"));
				 p.setShop_price(rs.getFloat("shop_price"));
				 p.setPdate(rs.getDate("pdate"));
				 p.setPdesc(rs.getString("pdesc"));
				 p.setIs_hot(rs.getInt("is_hot"));
				 p.setPflag(rs.getInt("pflag"));
				 p.setCid(rs.getString("cid"));
			}
			return p;
		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}finally{
			   //關閉資源
			DBUtils.closeAll(rs, prep, conn);
		}
	}


}

 OrderDao.java

package com.hj.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;

import com.hj.bean.Order;
import com.hj.bean.OrderItem;
import com.hj.utils.DBUtils;

public class OrderDao {

	public void save(Order order) throws SQLException {
	       //聲明3個核心接口
		 Connection conn = null;
		 PreparedStatement prep = null;
		 ResultSet rs = null;
		 //sql
		 String sql = "insert into [order] values (?,?,?,?)";
		 //獲得連接對象
		 try {
			conn = DBUtils.getConnection();
	     //獲得預編譯對象
			 prep = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
	      //設置參數
			prep.setTimestamp(1, order.getOrdertime());
			prep.setFloat(2, order.getTotal());
			prep.setInt(3, order.getState());
            prep.setInt(4, order.getUid());
            //執行sql
            //開啓事務
            conn.setAutoCommit(false);
            //之後執行的sql語句同在一個事務以內
            int num = prep.executeUpdate();
            if(num==1){
            	 //插入訂單成功
            	 //獲得新生成的oid
            	rs = prep.getGeneratedKeys();
            	rs.next();
            	Integer oid = rs.getInt(1);
            	saveOrderItems(oid,order.getOrderItems(),conn);
            	conn.commit();//提交事務
            	return;//後面代碼不執行
            }
			throw new SQLException("插入訂單失敗");
		} catch (Exception e) {
			e.printStackTrace();
			conn.rollback();//回滾事務
			throw e;
		}finally{
			 //關閉資源
			 DBUtils.closeAll(rs, prep, conn);
		}
		
	}

	private void saveOrderItems(Integer oid, List<OrderItem> orderItems, Connection conn) 
			throws SQLException {
		//sql
		String sql = "insert into orderitem values (?,?,?,?)";
		PreparedStatement prep = conn.prepareStatement(sql);
		 //遍歷orderItems
		for(OrderItem oit:orderItems){
			 //設置參數
			 prep.setString(1, oit.getPid());
			 prep.setInt(2, oit.getNum());
			 prep.setFloat(3, oit.getSubtotal());
			 prep.setInt(4, oid);
			 int num = prep.executeUpdate();
			 if(num!=1){
				 throw new SQLException("插入訂單明細失敗");
			 }
		}
		
		prep.close();
		
	}

}

TextDemo.java

package com.hj.test;

import java.sql.SQLException;
import java.util.List;

import org.junit.Test;

import com.hj.bean.Product;
import com.hj.dao.ProductDao;

public class TestDemo {

	  @Test
	  public void test1() throws SQLException{
		    ProductDao dao = new ProductDao();
		     List<Product> pros = dao.queryForCategory("2");
		     for(Product p:pros){
		    	  System.out.println(p);
		     }
	  }
	  
	  @Test
	  public void test2() throws SQLException{
		    ProductDao dao = new ProductDao();
		    Product pro = dao.queryForId("20");
		    System.out.println(pro.getPname()+","+pro.getShop_price());
	  }
}

DBUtils.java

package com.hj.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBUtils {
    //jdbc的四個重要參數作爲工具類的常量
	//驅動字符串
	public static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
	//連接字符串
	public static final String URL = "jdbc:sqlserver://localhost:1433;dataBaseName=myshop";
	//用戶名
	public static final String USER = "sa";
	//密碼
	public static final String PASSWORD = "123";
	
	//在靜態塊中加載驅動類
	//在類加載的時候,執行的代碼
	static{
		try {
			Class.forName(DRIVER);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	//獲得連接對象的方法
	public static Connection getConnection() throws SQLException {
		 return DriverManager.getConnection(URL, USER, PASSWORD);
	}
	
	//關閉資源的方法
	public static void closeAll(ResultSet rs, PreparedStatement prep,Connection conn) throws SQLException{
		    try {
				if(rs!=null){
					  rs.close();
				}
				if(prep!=null){
					 prep.close();
				}
				if(conn!=null){
					 conn.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
				throw e;//將異常信息繼續往上拋,通知調用者
			}
		    
		    
	}
	//測試
	 public static void main(String[] args) throws SQLException {
		     Connection conn = getConnection();
		     System.out.println(conn);
	}
}

------------------------------------------------------------------------------------------------------------------------------------------------------

ListProductServlet.java

package com.hj.web;

import java.io.IOException;
import java.sql.SQLException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.hj.bean.Product;
import com.hj.dao.ProductDao;

/**
 * Servlet implementation class ListProductServlet
 */
public class ListProductServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ListProductServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	       //使用ProductDao查詢數據
		    ProductDao dao = new ProductDao();
		    try {
		     List<Product> pros = dao.queryForCategory("1");
//		      dao.queryHot()
//		      dao.queryNew()
		     //將pros放入request作用域中
		     //轉發到主頁面(分類)
		     request.setAttribute("pros", pros);
		     request.getRequestDispatcher("ListCategory.jsp").forward(request, response);
			} catch (SQLException e) {
				e.printStackTrace();
			}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

ListCategory.jsp---商品主頁面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
     *{
         margin:0;
         padding:0;
     }
    .pro-box{
        width:230px;
        height:230px;
        border: 2px solid #ccc;
        float:left;
        margin-left:5px;
        margin-top:5px;
        position: relative;
    }
    
     .pro-box img{
         display:block;
         width:160px;
     }
     
     .pro-box a{
         display: block;
         position: absolute;
         right:5px;
         bottom:28px;
     }
     
    
</style>
</head>
<body>
  <h3 style='color:green;'>${buy_msg}</h3>
  <p>
     <a href='Cart.jsp'>查看購物車</a>
  </p>
  <c:forEach items="${pros}"  var="p">
     <div class='pro-box'>
      <img src="${p.pimage}">
      <p>${p.pname}</p>
      <p>¥${p.shop_price}</p>
      <a href="buy?pid=${p.pid}">購買</a>
     </div>
  </c:forEach>
  
  
  

</body>
</html>

Cart.jsp---購物車

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
    table{
        width:600px;
        border:3px solid #ccc;
        border-collapse: collapse;
        margin:auto;
        text-align: center;
    }
    
    table th,table td{
        border:1px solid #ccc;
    }
    
    table img{
        display:block;
        width:100px;
    }
    
    table input{
       width:30px;
    }
     
    

</style>
</head>
<body>
   <script type="text/javascript">
         function modify(pid){
        	   //獲得商品項的數量
        	   var num = document.getElementById("num_"+pid).value.trim();
        	   var reg = /^[1-9]\d*$/; 
        	   if(reg.test(num)){
        		    //提交
        		  location="modify?pid="+pid+"&num="+num;
        	   }else{
        		    alert("請輸入正整數");     		   
        	   }
        	   
         }
         //商品項全選,全取消
         function checkAll(ck){
        	    //獲得所有商品項前的複選框
        	    var es = document.getElementsByClassName("ck-sub");
        	     for(var i=0;i<es.length;i++){
        	    	   es[i].checked = ck.checked;
        	     }
         }
         
         //下訂單
         function order(){
        	   //獲得所有被選中商品項商品的pid值
        	   var ids = [];//存放被選中商品的pid
        	   //獲得所有被選中的複選框pid
        	   var es = document.getElementsByClassName("ck-sub");
        	   for(var i=0;i<es.length;i++){
        		    if(es[i].checked){
        		    	ids.push(es[i].value);
        		    }
        	   }
        	  //console.log(ips);  [1,10]  1:10   [3,4,5]  3:4:5
        	  location.href="order?pids="+ids.join(":");
         }
         
         
   </script>
     <h3 style='text-align: center'>購物車</h3>
      <table>
          <tr>
            <th>
               <input type="checkbox"  class="ck-all"  onclick="checkAll(this)"/>
            </th>
             <th>商品名稱</th>
             <th>單價</th>
             <th>數量</th>
             <th>圖片</th>
             <th>小計</th>
             <th>操作</th>
          </tr>
          <c:forEach items="${cart.proItems}" var="it">
          <tr>
            <td>
               <input type="checkbox"  class="ck-sub"  value="${it.product.pid }"/>
            </td>
             <td>${it.product.pname}</td>
             <td>${it.product.shop_price}</td>
             <td>
                 <input  value="${it.num}" id="num_${it.product.pid }"/>
                 <button>+</button>
             </td>
             <td>
                <img src="${it.product.pimage}"/>
             </td>
             <td>
                 ¥${it.itemPrice}
             </td>
             <td>
                 <a href="javascript:modify(${it.product.pid});">修改</a>
                 <a href="delete?pid=${it.product.pid}">刪除</a>
             </td>
          </tr>
          </c:forEach>
      </table>
      <p style="text-align: center;">
      <span>總計:¥${cart.totalPrice}</span>
      <a href="clearCart">清空購物車</a>
      <a href="list">繼續購物</a>
      <a href="javascript:order();">下訂單</a>
      </p>
</body>
</html>

 

BuyServlet.java-------buy

package com.hj.web;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.hj.bean.Cart;
import com.hj.bean.Product;
import com.hj.dao.ProductDao;

/**
 * Servlet implementation class BuyServlet
 */
public class BuyServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public BuyServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//獲得pid
		String pid = request.getParameter("pid");
		ProductDao dao = new ProductDao();
        try {
			Product pro = dao.queryForId(pid);
			//從session取出購物車
			  Cart cart = (Cart)request.getSession().getAttribute("cart");
			  if(cart==null){
				   //第一次購買,session不存在購物車
			        cart = new Cart();
			        //放入session中
			        request.getSession().setAttribute("cart", cart);
			  }
			  cart.add(pro);
			  //轉發回主頁面
			  request.setAttribute("buy_msg", "購買成功");
			  request.getRequestDispatcher("list").forward(request, response);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

DeleteServlet.java---delete

package com.hj.web;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.hj.bean.Cart;

/**
 * Servlet implementation class DeleteServlet
 */
public class DeleteServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public DeleteServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	     //獲得參數pid
		  String pid = request.getParameter("pid");
		  //獲得購物車
		  Cart cart = (Cart)request.getSession().getAttribute("cart");
		  cart.delete(pid);
		  //轉發回Cart.jsp
		  request.getRequestDispatcher("Cart.jsp").forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 ModifyServlet.java----modify

package com.hj.web;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.hj.bean.Cart;

/**
 * Servlet implementation class ModifyServlet
 */
public class ModifyServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ModifyServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              //獲取參數
		       String pid =  request.getParameter("pid");
		       int num = Integer.parseInt(request.getParameter("num"));
		       //從session中獲取購物車
		       Cart cart = (Cart)request.getSession().getAttribute("cart");
		       cart.modify(pid, num);
		       //轉發回購物車頁面
		       request.getRequestDispatcher("Cart.jsp").forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 ClearCartServlet.java-----clearCart

package com.hj.web;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.hj.bean.Cart;

/**
 * Servlet implementation class ClearCartServlet
 */
public class ClearCartServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ClearCartServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	       //從Session中獲得購物車
		   Cart cart = (Cart)request.getSession().getAttribute("cart");
		     cart.clearCart();//清空
		   //轉發回Cart.jsp
		    request.getRequestDispatcher("Cart.jsp").forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

orderServlet.java------order

package com.hj.web;

import java.io.IOException;
import java.sql.Date;
import java.sql.Timestamp;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.hj.bean.Cart;
import com.hj.bean.Order;
import com.hj.bean.ProductItem;

/**
 * Servlet implementation class OrderServlet
 */
public class OrderServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public OrderServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	     //獲得參數pids  1:10:5:6
		   String str = request.getParameter("pids");
		   String[] pids = str.split(":");
		   //從session中取出購物車
		   Cart cart = (Cart)request.getSession().getAttribute("cart");
		   //獲得被選中的商品項
		   List<ProductItem> selItems =  cart.getSelectedItems(pids);		   
		   //創建訂單對象
		   Order order = new Order();
		   order.setOrdertime(new Timestamp(System.currentTimeMillis()));
		   order.setUid(1);
		   order.setState(0);
		   order.setOrderItems(selItems);
	        //將order對象,pids放入Session中
		   request.getSession().setAttribute("order", order);
		   request.getSession().setAttribute("pids", pids);
		   //將selItems放入request作用域中
		   request.setAttribute("selItems", selItems);
		   //轉發到OrderList.jsp頁面
		   request.getRequestDispatcher("OrderList.jsp").forward(request, response); 
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

OrderList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
    table{
        width:600px;
        border:3px solid #ccc;
        border-collapse: collapse;
        margin:auto;
        text-align: center;
    }
    
    table th,table td{
        border:1px solid #ccc;
    }
    
    table img{
        display:block;
        width:100px;
    }
    
    table input{
       width:30px;
    }
     
    

</style>
</head>
<body>
   <h3 style='text-align: center'>訂單明細</h3>
      <table>
          <tr>
             <th>商品名稱</th>
             <th>單價</th>
             <th>數量</th>
             <th>圖片</th>
             <th>小計</th>
          </tr>
          <c:forEach  items="${selItems}" var="it">
          <tr>
             <td>${it.product.pname}</td>
             <td>${it.product.shop_price}</td>
             <td>
                 ${it.num}
             </td>
             <td>
                <img src="${it.product.pimage}"/>
             </td>
             <td>
                 ¥${it.itemPrice}
             </td>
          </tr>
          </c:forEach>
      </table>
      <p style="text-align: center;">
         <a href="calculate">結算</a>
      </p>
</body>
</html>

CalculateServlet.java-------calculate

package com.hj.web;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.hj.bean.Cart;
import com.hj.bean.Order;
import com.hj.dao.OrderDao;

/**
 * Servlet implementation class CaculateServlet
 */
public class CalculateServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public CalculateServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		  //從session獲取訂單對象
		  Order order = (Order)request.getSession().getAttribute("order");
		  OrderDao dao = new OrderDao();
		  try {
			 //保存訂單
			dao.save(order);
			 //刪除購物車中,已經下單的商品項
			//購物車
			 Cart cart = (Cart)request.getSession().getAttribute("cart");
			 //獲得已經下單的商品項的商品編號數組
			 String[] pids = (String[])request.getSession().getAttribute("pids");
			  for(String pid:pids){
				    cart.delete(pid);
			  }
			  //轉發到下單成功頁面
			  request.getRequestDispatcher("OrderSuccess.jsp").forward(request, response);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

OrderSeccess.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h1 style="color:green">下單成功</h1>
    <a href="list">繼續購物</a>
</body>
</html>

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章