day21-实战4

来源:互联网 发布:中小学生一起作业软件 编辑:程序博客网 时间:2024/06/06 03:02
回顾:
对购物车的操作
购物车结构:
LinkedHashMap<商品的id,购物车项> map
总金额 total

购物车拥有方法:
add2Cart(购物车项)
removeFromCart(商品的id)
clearCart()
购物车项结构:
商品对象
商品的购买数量
商品的小计
生成订单
对应的实体:
用户
订单(表中的字段:订单id,收货人信息,用户id,总计)
oid
name
address
telephone
user对象
list对象(存放订单项)
ordertime
state
订单项表(表中的字段:订单的id,商品的id,商品购买数量,小计)
itemid
order对象
product对象
count
subtotal
商品
生成订单最终的效果就是在订单表中插入一条数据,在订单项表中添加多条数据
步骤分析:
/store/order?method=add
add方法中的操作:
1.先判断用户是否登录
2.封装order
oid user(session) list对象(购物车) ordertime(当前时间) state(默认未支付:0)
3.调用orderservice 生成订单
4.清空购物车
5.将order放入request域中,请求转发 到Order_info.jsp

orderService的add方法操作:
开启事务
往订单表中插入一条数据
往订单项表中插入多条数据
事务控制
////////////////////////////////////////////////
////////////////////////////////////////////////
案例1-查询我的订单(将所属的订单项也要查询出来)
需求:
点击 页面上的 "我的订单",分页展示我所有的订单(将所属的订单项也要查询出来)
技术分析:
多表的查询:
内连接
格式1:
select * from a join b on 连接条件;
格式2:
select * from a,b where 连接条件;
外连接
左外连接
select * from a left join b on 连接条件;
子查询
步骤分析:
1.修改head.jsp的连接 我的订单
/store/order?method=findAllByPage&currPage=?
2.在orderservlet中编写findAllByPage方法
获取用户(session)
获取当前页
固定pagesize
调用orderservice根据用户查询所有订单 返回值:Pagebean
将pagebean放入request域中,请求转发到/jsp/order_list.jsp
3.在orderService中findAllByPage方法的操作:返回一个pagebean
封装一个pagebean
new pagebean(currPage,pageSize,list,totalCount)
调用dao查询list和totalcount 将user.uid传递过去
4.在orderDao中查询所有的订单
select * from orders where uid=? limit m,n 可以查询出所有的订单
结果可以List<Order> list 使用beanListHandler
遍历所有的订单,根据订单id
查询订单项表和商品表
select * from orderitem oi,product p where oi.pid = p.pid and oi.oid = ?
用mapListhandler封装结果集,然后使用BeanUtils封装成指定的bean对象 ,添加到order的items中即可
案例2-查询订单的详情
需求:
只有未付款的订单,点击"付款",跳转到订单的详情页面
步骤分析:
1.在订单列表,点击付款,
/store/order?method=getById&oid=?
2.在orderservlet中编写getById()
接受oid
调用service 返回Order
将order放入域中,请求转发 order_info.jsp
3.orderDao中 通过一个订单号,查询订单详情
select * from orderitem oi,product p where oi.pid = p.pid and oi.oid = ?
用mapListhandler封装结果集,然后使用BeanUtils封装成指定的bean对象 ,添加到order的items中即可


案例3-在线支付
在线支付:
1.发送那些数据?
第三方规定
2.如何保证数据安全?
数字签名
需要商城将第三方需要的数据,及加密后的数据发送给第三方支付,
第三方获取所有的数据之后,将商城发送过来的数据重新按照分配的商城的密钥和算法重新生成一个数据,
然后和商城传递过来的加密后的数据做对比,若一致,就是没有问题.


商城在第三方开的账户
第三方给商城的密钥
第三方给商城的算法
步骤分析:
在order_info.jsp页面上 填写收货人信息,然后点击 确认订单
/store/order?method=pay
在orderservlet中的pay操作:
1.获取收货人信息 更新数据库中orders表
2.拼装url 给第三方的数据
3.重定向 第三方

在用户完成支付之后,银行通知第三方支付成功,第三方需要通知 用户和商城 支付成功了
要求商城必须有固定的ip

支付结果需要通知商城和客户
url:回调函数
http://localhost:80/store/order?method=callback
在callback中
获取第三方发送过来的数据
判断数据是否被篡改过
若没有被篡改,修改订单状态
若被篡改,提示信息被篡改
///////////////////////////////////////////
///////////////////////////////////////////
///////////////////////////////////////////
扩展:权限控制(粗粒度)-通过filter
过滤器编写步骤:
1.编写一个类
实现filter接口
重写方法
2.编写配置文件
<filter>
<filter-mapping>

编写一个privilegeFilter
判断用户是否登录(session)
若为空
请求转发到msg.jsp 携带信息
扩展:
弹出层



/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
案例1回顾:
查询我的订单
通过 select * from orders where uid = ?
这个只能查询订单的信息,但是订单里面还包含了订单项及商品信息
select * from orderitem oi,product p where oi.pid=p.pid and oi.oid = ???

先查询所有的订单
遍历订单list 获取每一个订单,还需要通过订单号 查询该订单的订单项
然后将订单项添加到所属的订单中
最后返回所有的订单即可
/////////////////////
在线支付:
和银行对接
和第三方支付对接(易宝)

使用易宝支付:
先申请一个帐号.
获取一个密钥和算法

步骤:
1.填写收货人信息
2.点击 确认订单
3./store/order?method=pay
a.获取收货人信息
更新订单
b.收集第三方需要的数据
c.重定向 第三方

4.支付完成之后,回调地址
/store/order?method=callback
a.获取第三方发送过来的诗句
b.判断支付是否成功及判断是否被篡改
c.若没有篡改
修改订单的state 改成1 (已支付)

















原创粉丝点击