使用Servlet结合JSP开发购物车功能。
1. 数据库关系
创建数据库cart,在cart下创建四个表。
这四个表的关系是:
order指该用户完成的一次订单,存储的是对应的用户信息(uid);而orderItem指的是订单中的每一条订单项,存储对应的订单id(oid),以及买的产品(pid)和购买数量。
表关系也比较好理解。
- 一种产品可以对应多个订单项。
- 多个订单项对应一个订单。
- 多个订单对应一个用户。
2. 项目结构
这里指的是java代码目录下的包结构
- bean
- servlet
- dao
- util
其中bean包存放实体类,类属性为private,提供getter和setter,与数据库的记录形成一一对应(即数据库表的一条数据对应一个实体对象);
servlet包存放Servlet类,处理前端发来的请求,以及将响应发送回前端;
dao包存放与数据库相关操作的类,通过它对数据库进行CRUD;
util包存放工具类,我这里将加载数据库驱动和获取数据库连接封装到工具类DBUtil中,且使用静态方法和静态代码块,方便重复使用。
3. 项目逻辑
3.1 产品模块
效果:在浏览器中输入127.0.0.1/Cart/listProduct,网页会展示product表中的全部商品。
流程:
注意:
- MySQL的Maven依赖设置:
1 | <dependency> |
- Servlet的Maven依赖设置:
1 | <dependency> |
- JSP中使用了JSTL标准标签库,使用需要先在Maven中引入依赖:
1 | <dependency> |
再在JSP文件头部写如下代码:
1 | <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> |
一定要把忽略EL表达式设置为False,否则不能使用${}直接获取值。
- 路径问题。重定向中”/“代表
http://ip:port/
,而转发中”/“代表http://ip:port/项目名称
。我这里设置的基础路径是http://ip:port/Cart(项目名)
。而不使用”/“则默认使用基础路径。所以这里转发中加不加”/“都可以;而重定向中要么使用”/Cart/映射”,要么就不加,直接使用映射。
如果转发或重定向到JSP文件,可以加上JSP文件在web目录下的路径。例如我的listProduct.jsp放在webapp/list目录下,那么我的转发代码可以是:
1 | request.getRequestDispatcher("/list/listProduct.jsp").forward(request, response); |
3.2 用户模块
效果:在登录页面输入账户密码,如果正确(和数据库user表中的数据吻合),则显示产品页面。
流程:
3.3 订单项模块
效果:在产品页面点击购买,再点击显示购物车,可以显示刚才想要购买的物品。
流程:
3.4 订单模块
效果:点击生成订单,显示订单的每一条订单项,并将订单项存入数据库。
流程:
4. 源码
源码我放在GitHub上啦,需要的小伙伴可以自行克隆😀
5. 参考
感谢How2J的教程~😋