estore系统设计文档(2)

2019-08-20 19:04

表单提交时,校验分为两种 : 客户端校验 、服务器端校验 ------ 只有服务器端校验才能确保数据准确

商品图片上传到服务器端后,保存在哪个目录 ??? 必须直接在WebRoot下及其除WEB-INF、META-INF 子目录外

一般情况下,一张表对应Domain类 --- DAO类 ---- Service类

商品列表查看

条件查询、分页查询

列表中显示原图,因为原图比较大,页面加载非常缓慢 ,页面布局不会很美观 ---------------- 缩略图

* Java中通过图形界面技术,生成小图

在Product类中添加 getImgurl_s方法,用来获取缩略图路径

将生成缩略图代码 添加 AddProductServlet中

商品详细信息查看

通过在列表中点击 商品图片或者商品名称 进入详情查看页面

权限控制过滤器

原理:在过滤器获得来访者资源路径,判断路径需要哪些权限,获取当前登陆用户信息,判断当前登陆用户是否具有需要权限, 如果具有放行,否则抛出权限不足异常 因为系统中只存在三种角色: 未登录(游客)、已登录(管理员、客户)

1、为每类角色定义配置文件,管理员 admin.txt 客户 user.txt ---- 将需要admin角色才能访问资源放入 admin.txt中,将需要user角色才能资源 放入user.txt 2、在src下创建admin.tx 和 user.txt 读取两个文件

getServletContext().getRealPath(\// 如果工程路径中有中文和空格,该方法可以使用

XXX.class.getResource(\ // 如果工程路径中有中文和空格,该方法无法读取到文件 ,空格和中文会进行URL编码

在系统中插入admin 角色 insert into users values(null,'admin',md5('123'),'超级管理员','service@estore.com','admin',1,null,null);

添加商品到购物车

购物车对象,不保存在数据库中,使用Session来保存用户购物车数据

保存购物车对象 Map key 商品对象 value 商品购买数量

流程 :添加商品到购物车流程,点击添加到购物车,将商品id传递Servlet ,从Session中取出购物车对象,判断商品是否已经在购物车中,如果不在添加商品到购物车数量 1 ,在购物车取出原有数量+1

1) 如果Map的key是一个自定义对象,重写 hashcode和equals

2) 如果商品不在购物车中,需要根据商品 id 查询商品所有信息,添加购物车

3) 添加商品到购物车

Session中信息在服务器正常关闭时,会被序列化到硬盘中 ---- Product实现 Serializable接口 完成序列化

显示与修改购物车数据

购物车信息保存在Session中,不需要去查询数据库,将Session中信息显示出来

1) 在购物车中显示总价

2) 购物车修改 :

清空购物车 : request.getSession().removeAttribute(\ 删除购物车中单项商品 : cart.remove(product) ; 注意:删除一项后,判断购物车是否为空,如果为空 移除购物车对象

* 删除确认功能

写法一:直接在href中 触发js函数,询问用户是否确认,如果确认,location.href 发起删除请求 -----

阻止href默认事件 : e.preventDefault() ---- 必须支持事件 FF支持、IE不支持 IE阻止href默认事件 function confirmDel(e){ // 询问用户是否确认 var isConfirm = window.confirm(\商品不要了吗?多好的商品啊!\ if(!isConfirm){ // 用户选择取消,阻止 a 标签 默认事件 href发生 if(e&&e.preventDefault){ // e对象存在,preventDefault方法存在 ---- 火狐浏览器 e.preventDefault(); }else{

// 不支持e对象,或者没有preventDefault方法 ---- IE window.event.returnValue = false; } } }

修改购物车中商品购买数量 ---- JavaScript 控制购物数量修改

订单生成

在listcart.jsp 添加进入结算中心 ---- order.jsp

重点:

1) 向orders表插入订单信息后,同时需要向orderitem表插入 订单中每项数据 2) 多表插入 (数据完整性问题) --- 事务管理 Connection con = null;

// 2.insert orderItem

ProductDao pdao=new ProductDao();

List orderitems = order.getOrderItems(); for (int i = 0; i < orderitems.size(); i++) {

oderDao.addOrderItem(con,orderitems.get(i)); //一个订单中

// 3.update product 数量

pdao.updateProductPnum(con,orderitems.get(i));

// 1.insert orders

OrderDao oderDao = new OrderDao(); OrderDao.addOrder(con, order);

try {

con = DataSourceUtils.getConnection(); con.setAutoCommit(false);

有多个商品

}

} catch (Exception e) {

try { }

e.printStackTrace();

throw new RuntimeException(\订单生成失败\);

DbUtils.rollback(con); e1.printStackTrace(); } catch (SQLException e1) {

} finally { }

try { }

DbUtils.commitAndClose(con); e.printStackTrace(); } catch (SQLException e) {

3) 订单生成后 ,商品数量更新减少

订单列表查询与取消

管理查询订单 --- 所有人订单信息 普通用户 ---- 只能查询自己的订单

在订单生成后,查看订单列表 、也可以通过index.jsp 进入订单查看页面

重点:查询订单时,同时查询订单项目信息

1) 查询订单基本信息时,查询下单用户昵称和用户名 在Order类中 添加 用户的 username 和 nickname字段

select orders.*,users.username,users.nickname from orders,users where orders.user_id = users.id;

2) 查询订单项信息时,查询商品的名称和单价 在OrderItem类中 添加商品的name和price 字段 select orderitem.*,products.name,products.price from orderitem,products where orderitem.produtct_id = products.id and orderitem.order_id = ?

订单取消 : 删除订单表信息时,同时删除订单项信息 (订单项信息依赖 订单信息 ,必须先删除订单项) 注意事项

1) 可以取消未支付的订单,如果订单已经支付,将无法取消

2) 管理员不能取消任何用户未支付订单,普通用户只能取消 自己的未支付的订单

取消订单进行事务管理 :删除订单项、删除订单、恢复商品数量

订单在线支付

1) 网站进行支付,根据易宝支付接口请求规范,生成易宝需要数据,将数据提交到易宝指定网址 https://www.yeepay.com/app-merchant-proxy/node

* 在提交支付请求给易宝,需要将请求中数据,使用易宝提供密钥和算法进行加密,获得数字签名 hmac码 ,将hmac码发送给易宝 2) 易宝会连接银行,进行支付 3) 支付后,浏览器会以重定向方式访问 网站回调程序,易宝在收到银行转账后,会以Socket方式通知网站

* 在浏览器重定向通知后,提供给用户支付成功显示页面 (不要去修改订单状态) * 在网站收到易宝点对点通知后,回复易宝success,修改订单状态

数字签名原理:将数据 使用密钥和算法加密后 获得数字签名hmac,将数据和数字签名hmac一起发送给易宝,易宝采用同样密钥和算法对数据进行加密获得数字签名hmac,比较请求中数字签名hmac与加密后获得数字签名hmac是否一致,如果一致 签名hmac有效 (数据没有被篡改 )

流程入口: 未支付订单可以进行支付,管理员不允许支付

orders.jsp 点击在线支付 1) pay.jsp 银行选择页面

2) PayServlet 准备易宝支付参数

* 提供密钥和算法 商家编号 真实的 将PaymentUtil 复制 utils包 , 将 merchantInfo.properties 复制 src

* responseURL 支付成功后 回调地址 ,该地址会收到 浏览器重定向和服务器点对点两次通知 ,确保该地址 可以被易宝访问 (estore项目必须要配置缺省虚拟主机) 将PayServlet 准备易宝参数,传递JSP 确认

3) confirm.jsp 通过form的隐藏域 提交参数给易宝网址 https://www.yeepay.com/app-merchant-proxy/node

4) CallbackServlet 回调程序

收到浏览器重定向和服务器点对点两个通知

浏览器重定向,显示支付成功,不要修改订单状态 服务器点对点,修改订单状态,回复success

将支付相关页面进行权限控制

* 千万不要将/callback 配置 user.txt中,因为/callback 是由易宝访问,不应该有权限控制

销售榜单导出功能

获得商品销售情况,需要查询orderitem表 ------- 统计已支付订单项内容

1) 榜单中存在哪些信息?(已支付订单中商品) 商品信息 products表 销售数量 orderitem表 订单支付情况 orders表

select * from products,orderitem,orders where products.id = orderitem.product_id and orderitem.order_id = orders.id ;

进行商品分组查询 group by

select products.* , sum(orderitem.buynum) totalSaleNum from products,orderitem,orders where

products.id = orderitem.product_id and orderitem.order_id = orders.id and orders.paystate = 1 group by products.id order by totalSaleNum desc;

2) 榜单文件是什么格式? 导出Excel 使用 POI类库

csv 格式文件 , 逗号分隔文件 1) 信息当中有,在两端加 双引号

2) 信息当中有\在之前加双引号 转义

文件下载

设置Content-Type、Content-Disposition 头信息 文件流输出 (输出文件内容)

Excel 默认读取字符集gbk

作业:

作业功能:编写定时器,在ServletContextListener中启动,每晚12点启动,将当天的未支付订单删除


estore系统设计文档(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:新人教版七年级英语下册Unit 12 what did you do last weekend教

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: