onlineMallServlet

介绍

基于Servlet实现的在线商城
只是一个小demo很多细节还需要打磨,比如账号密码格式验证等,主要用来学习Servlet和MVC开发模式,以后使用框架开发时再打磨细节。

代码

gitee仓库

环境

1.JDK11
2.tomcat 9.0.50
3.mysql 8.0.25 表结构见最后

管理工具

maven 4.0.0

需求分析

1.用户登录注册(商家和用户)
2.用户浏览购物商城页面
3.购买物品
4.商家管理商品(增删改查)
5.买家查看购买记录
6.卖家查看销售记录

关键技术点

0.技术架构:Servlet+MVC+JSP+Mysql
1.MVC开发模式controller、entity、dao、view层分离
2.DAO层使用数据库连接池HikariCP
3.不使用默认的servlet,重写servlet的Service以实现一个servlet处理多个请求,模拟框架中的@Controller的功能

遇上问题

1.多次刷新页面或者多次操作会崩溃报错message from server: “Too many connections”
很明显是说connection过多,但是我已经释放资源了啊,难道是没释放成功?
查看show processlist;发现,使用连接池会创建很多sleep的连接,而且每从连接池getConnection一次,会创建一大堆连接
不使用数据库连接池后,就没问题了,conn会自动成功释放。
难道是try-with-resource不能自动释放数据库连接池的conn?经过深入研究发现原来是代码写的不对,导致创建了多个数据源,
每个数据源都申请了大量的connection

体会

1.MVC模式实现各层次之间解耦
2.体会到了框架的好处

  • 不使用IOC时要手动创建各层次对象,有了IOC可以直接注入
  • 不使用SpringMVC需要手动处理请求路由和请求数据等信息,有了SpringMVC请求和数据直接映射到对应的方法和JavaBean
  • 不使用Spring的持久层JdbcTemplate每次数据库连接操作都要手动管理和释放
  • 不集成ORM框架JAP或Hibernate等每次从数据库查询的结果都要手动装配成JavaBean
  • 不使用Spring的声明式事务,就要使用手动设置事务的提交回滚等操作

3.体会到前后端分离好处
如果使用JSP,会使得前后端耦合性太强,后端不能专注于后端功能的开发
4.体会到Spring组件化使用的方便,比如当前这个项目中可以只使用SpringIOC而不使用SpringMVC和SpringJDBC,组件可以任意
选择,只要导入对应的包即可
5.SpringBoot就是把Spring这些组件预装好,如果需要定制化配置,再修改配置文件即可。

mysql中的表

共有3张表:用户表t_user 商品表t_item 用户商品购买关系表t_tran_history

CREATE TABLE `t_user` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '用户名',
  `password` varchar(255) DEFAULT NULL COMMENT '密码',
  `type` varchar(255) DEFAULT NULL COMMENT '用户类型',
  `balance` decimal(10,2) unsigned zerofill DEFAULT '00000000.00' COMMENT '账户余额',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `user_name` (`username`)
) 
CREATE TABLE `t_item` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '商品id',
  `name` varchar(255) DEFAULT NULL COMMENT '商品名称',
  `price` decimal(10,2) DEFAULT NULL COMMENT '商品价格',
  `publisher` varchar(255) DEFAULT NULL COMMENT '商品发布者',
  `buyer` varchar(255) DEFAULT NULL COMMENT '商品购买者',
  PRIMARY KEY (`id`)
) 
CREATE TABLE `t_trans_history` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '交易记录id',
`item_id` BIGINT DEFAULT NULL COMMENT '出售商品id',
`buyer_id` BIGINT DEFAULT NULL COMMENT '购买商品id',
PRIMARY KEY ( `id` )
)
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐