bookstore案例使用原生servlet实现
功能分析
- 导原型(页面)
l 创建Web项目
l copy原型中的src和WebRoot,覆盖Web项目中的src和WebRoot
- 列出模块和功能
前台:
l 用户模块(中等偏上)
- 注册功能
- 激活功能
- 登录功能
- 退出功能
l 分类模块
- 显示所有分类功能
l 图书模块
- 查询所有图书
- 按分类查询
- 加载图书(按id查询)
l 购物车模块
- 添加购物项
- 我的购物车(显示购物车内所有购物项)
- 清空购物车
- 删除购物项
l 订单模块(难点)
- 生成订单
- 我的订单(按用户查询订单)
- 加载订单(按id查询)
- 确认收货
- 付款之去银行
- 付款之银行回调
后台:
l 管理员模块(你们的)
- 登录
l 分类管理
- 查询所有分类
- 添加分类
- 修改分类
- 删除分类
l 图书管理(难点)
- 查看所有图书
- 加载图书(按id查)
- 编辑图书
- 删除图书
- 添加图书(上传)
l 订单管理(你们的)
- 查询所有订单
- 发货
- 按状态查询订单
搭建环境
- 导jar包
l itcast-tools-1.4.3.jar
- commons-beanutils.jar
¨ commons-logging.jar
l mysql
l c3p0
l commons-dbutils
l commons-fileupload
- commons-io
l main.jar
- activation.jar
- 创建数据库表
l tbl_user
- uid char(32):主键
- username varchar(50):用户名
- password varchar(50):密码
- email varchar(50):邮箱
- code char(64):激活码
- state boolean:用户的状态(已激活和未激活)
l tbl_category
- cid char(32):主键
- cname varchar(100):分类名称
l tbl_book
- bid char(32):主键
- bname varchar(100):书名
- price decimal(6,2):单价
- author varchar(50):作者
- image varchar(100):图片
- cid char(32)相对tbl_category表的外键
l tbl_order
- oid char(32):主键
- ordertime timestap:下单时间
- total decimal(7,2):总计
- state int:订单的状态,分为四种:1未付款、2已付款但未发货、3已发货但未收货、4已收货交易成功
- uid char(32):相对tbl_user表的外键,表示下单人!
- address varchar(200):收货地址
l tbl_orderitem
- iid char(32):主键
- count int:数量
- subtotal decimal(7,2):小计
- oid char(32):相对tbl_order表的外键,所属订单
- bid char(32):相对tbl_book表的外键,所购买图书
- 创建包
l cn.itcast.bookstore.模块.分层
- cn.itcast.bookstore.user
¨ domain:User
¨ dao:UserDao
¨ service:UserService
¨ web.servlet:UserServlet
- cn.itcast.bookstore.category
¨ domain:Category
¨ dao:CategoryDao
¨ service:CategoryService
¨ web.servlet:CategoryServlet
…
- 页面设计
用户的功能设计
- 包和类
l cn.itcast.bookstore.user
- domain:User
- dao:UserDao
- service:UserService
- web.servlet:UserServlet
- 注册功能
- 激活功能
- 登录功能
- 退出功能
l top.jsp(退出) à UserServlet#quit()(销毁session) à msg.jsp(显示您已下线)
分类模块功能设计
- 包和类
l cn.itcast.bookstore.category
- domain:Category
- dao:CategoryDao
- service:CategoryServlet
- web.servlet:CategoryServlet
- 查询所有
l main.jsp不再去直接请求left.jsp,而是请求Servlet
l Servlet应用在request中保存List<Category>
l 你们应用给我传递一个List<Category>,我这里循环遍历
图书模块
- 包和类
l cn.itcast.bookstore.book
- domain:Book
- dao:BookDao
- service:BookService
- web.servlet:BookServlet
- 查询所有
- 按分类查询
- 查询详细
购物车模块
l 购物车的实现
- session实现:把车放到session中;
- cookie实现:把车放到cookie中;
- 数据库实现:把车放到数据库中。
l 我们的购物车:
- 必须先登录才能有车!!!
- 车保存到session中!!!
- 购物车的结构
l 车中包含0~N个购物条目(购物项);
l 购物条目由图书和数量组成
- 添加购物项
l /jsps/book/desc.jsp(购买按钮)
l CartServlet#add()
- 获取车:从session中获取车
¨ 在登录成功时,向session中保存一个Cart对象(空的);
¨ 在获取车时,一定能获取到(除非你没有登录)
- 获取购物条目
¨ 获取bid,通过BookService查询出Book对象;
¨ 获取count;
¨ 使用Book和count创建CartItem对象
- 调用车的方法把条目添加进去:Cart对象的add
- 转发(重定向)到/jsps/cart/list.jsp,显示车中所有内容
- 删除指定购物项
l /jsps/cart/list.jsp(每个条目后都有一个“删除”链接),传bid
l CartServlet#delete()方法
- 获取参数bid
- 获取车
- 调用车的删除方法,传递bid
- 重定向到/jsps/cart/list.jsp
- 清空车
l /jsps/cart/list.jsp(清空购物车链接)
l CartServlet#clear()
- 获取车
- 调用清空方法
- 重定向到/jsps/cart/list.jsp
- 我的购物车
订单模块
- 包和类
l cn.itcast.bookstore.order
- domain:
¨ Order
¨ OrderItem
- dao:OrderDao
- service:OrderService
- web.servlet:OrderServlet
- 生成订单
- 我的订单
- 加载订单
- 确认收货
- 付款之去银行
- 付款之回调