1 Star 0 Fork 0

张长贵 / onlineMallServlet

Create your Gitee Account
Explore and code with more than 12 million developers,Free private repositories !:)
Sign up
This repository doesn't specify license. Please pay attention to the specific project description and its upstream code dependency when using it.
Clone or Download
contribute
Sync branch
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README

onlineMallServlet

介绍

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

环境

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` )
)

Empty file

About

基于Servlet实现的在线商城---为了理解框架到底有什么好处,先用最原始的办法开发一个项目! expand collapse
Java
Cancel

Releases

No release

Contributors

All

Activities

Load More
can not load any more
Java
1
https://gitee.com/zhangchanggui/online-mall-servlet.git
git@gitee.com:zhangchanggui/online-mall-servlet.git
zhangchanggui
online-mall-servlet
onlineMallServlet
master

Search