# XYSHOPPING **Repository Path**: cgxx9943/hmshopping ## Basic Information - **Project Name**: XYSHOPPING - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-11-20 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # XYSHOPPING ## 项目简介 前后端分离的JavaWeb项目,对JavaWeb和数据库知识进行一个汇总学习,整体难度不大,业务层面除**在线支付**、**文件上传**功能外,都是一些基础的增删改查,加强对SQL语句的编写能力,同时可以感受到**事务**的作用,并且利用**Redis**进行了缓存处理。 ### 主要技术 HTML + JavaScript + jQuery + Servlet + JDBC + Redis + AJAX + Maven + Git ## 项目模块 - 用户模块 - 登录 - 注册 - 退出 - 修改 - 商品模块 - 商品的展示 - 分类展示 - 购物车模块 - 订单模块 - 在线支付 - 后台管理模块 ### 数据库表 * 用户表 (user) * 商品表 (product) * 分类表 (category) * 订单表(orders) * 中间表(orderitem) #### 表关系结构 ![表关系结构](https://gitee.com/cgxx9943/hmshopping/blob/master/image-20201202093946231.png "表关系结构") ## 项目重点 ### 使用ThreadLocal实现参数传递 编写一个工具类`RRHolder`实现 ```java public class RRHolder { private static final ThreadLocal requestThreadLocal = new ThreadLocal<>(); private static final ThreadLocal responseThreadLocal = new ThreadLocal<>(); public static void setRequest(HttpServletRequest request){ requestThreadLocal.set(request); } public static void setResponse(HttpServletResponse response){ responseThreadLocal.set(response); } public static HttpServletRequest getRequest(){ return requestThreadLocal.get(); } public static HttpServletResponse getResponse(){ return responseThreadLocal.get(); } } ``` ### 在线支付 #### RSA算法 数据传输过程中,可以使用**`RSA算法`**对数据进行**,**加密、解密**或**签名、验签**两种手段来保证数据的安全性。 **加密的作用是防止信息被泄露** **签名的作用是防止信息被篡改** 通常这两者都是组合在一起使用的。 #### 加密、解密简述 RSA算法提供一对**钥匙**,分别是**公钥和私钥**。只有私钥能解密公钥。 以客户端和服务器通信为例,客户端拥有自己的**公钥和私钥**,服务器拥有自己的**公钥和私钥**。 客户端向服务器发送数据“A”,就要使用**服务器的公钥**对“A”进行加密,通过一系列的RSA算法让这个数据变得难以破解。 服务器收到**加密数据**后,使用**自己的私钥**进行解密,同样需要经过一系列的RSA算法计算。 #### 签名、验签简述 同样使用**公钥和私钥进行**,以客户和服务器传输为例。 客户端拥有一对**公钥和私钥**,私钥只属于自己,公钥二者都有。 客户端用自己的**私钥**对消息加签,形成**签名**,并将**加签的消息**和**消息本身**一起传递给服务器。 服务器接收消息后,利用**客户端的公钥**进行**验签**,**如果验签出来的内容与消息本身一致**,证明传输过程中,消息没有被篡改。 #### 组合使用_非对称加密 假设场景:A向B发送消息 A和B都有自己的一套**公钥和私钥**,当A要给B发送消息时,先用**B的公钥**对消息**加密**,在对**加密的消息**使用**A的私钥**进行**签名**。 在B收到消息后,使用**A的公钥**进行**验签**,验签成功后,使用自己的**私钥**对消息解密。 这样在传输过程中,即保证了消息的不会被泄露,又保证了消息不会被篡改。 **总结:公钥加密、私钥解密、私钥签名、公钥验签**。 #### 第三方支付平台的使用 参考:[支付宝开发文档](https://opendocs.alipay.com/open/01didh) ### 使用动态代理实现事务增强 该部分由**装饰者设计模式**演变而来,体会设计模式在实际工程上的应用。