用 Servlet 和 JSP 写电商平台:有点古早,但真的练基本功
起因
现在再写 Servlet + JSP,好像有点复古。
前端早就 React、Vue 满天飞,后端也基本都是 Spring Boot 起步。但我还是觉得,亲手用 Servlet 和 JSP 写一个电商 demo,很适合补 Web 基本功。
因为它没有那么多框架帮你藏细节。请求怎么进来,Session 怎么存,页面怎么跳,DAO 怎么查数据库,都得自己写。
项目在这里:yfgug/project
功能大概长这样
这个电商平台不是玩具页面,基本购物流程是完整的:
- 用户模块:注册、登录、注销、改密、修改收货地址。
- 商品模块:分类浏览、分页查询、关键词搜索、商品详情。
- 推荐模块:滚动横幅、热门推荐、新品推荐。
- 购物车:基于 Session 保存购物车,异步加入商品。
- 订单模块:购物车结算、订单生成、支付方式选择。
技术上用的是传统 Java Web:Servlet、JSP、JSTL、Filter、DAO、Service。数据库访问用了 Apache DBUtils,连接池配置里实际使用的是 Druid,也保留了传统依赖说明。
Session 购物车
购物车这块挺能体现传统 Web 项目的味道。
用户点”加入购物车”时,前端请求 goods_buy。后端从 Session 里拿 Order 对象,如果没有就新建一个,再根据商品 id 查库存,库存足够就加入购物车。
这段逻辑不复杂,但它把几个基础点串起来了:
- Session 不是抽象概念,它真的可以存当前用户的临时状态。
- Servlet 处理的是一次请求,但购物车需要跨请求保留。
- 后端不能相信前端,加入购物车前还是要查库存。
以前我只知道 Session 是会话。写完之后才更具体地理解,它就是很多传统 Web 应用维持状态的关键。
DAO 层也有坑
不用 ORM 的时候,SQL 会离你很近。
DBUtils 的 QueryRunner 能少写很多样板代码,BeanHandler、MapListHandler 也能把结果集处理得舒服一点。但 SQL 本身还是要自己负责。
比如分页查询,不能只想着页面显示几条,还要算:
- 当前第几页。
- 每页多少条。
- 总记录数。
- 总页数。
limit从哪里开始。
这些东西看着琐碎,但电商列表页离不开。
为什么这种项目还有意义
这个项目写完之后,我更能理解 Spring Boot 为什么舒服。
不是因为 Servlet/JSP 不能用,而是因为传统 Java Web 里太多事情需要你亲自管理:
- 编码过滤器。
- 路由映射。
- Session 状态。
- JSP 页面跳转。
- DAO 手写 SQL。
- 依赖包手动放到
WEB-INF/lib。
写一遍之后,再去用 Spring MVC、Spring Boot,就不会觉得那些自动配置是魔法。它们只是把这些老活儿包装好了。
最后
这个电商平台不算现代,但很适合练手。
它让我知道一个 Web 应用不是只有页面,也不是只有数据库。真正的项目是一条完整链路:用户点按钮,请求进入后端,后端处理状态和数据,再把结果返回到页面。
这条链路走通了,后面学什么框架都轻松一点。
