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>

猜你喜欢

转载自blog.csdn.net/Fern2018/article/details/81368671