# cafe-j2ee **Repository Path**: FEcandy_admin/cafe-j2ee ## Basic Information - **Project Name**: cafe-j2ee - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-10-25 - **Last Updated**: 2023-10-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 一个简易的模拟咖啡厅点餐系统 ## 主要使用了JSP+Servlet+Mysql来进行开发,不含后端框架 ### 其他技术: 1. Bootstrap做前端美化工作 2. 使用Apache的Common系列的包来简化JDBC的部分 3. 还用到了JSTL,jQuery,Chart.js等来优化页面 ## 基本功能: 1. 用户注册,用户/管理员登录 2. 用户修改个人信息、密码 3. 管理员对用户进行增删改查(分页) 4. 管理员对餐点进行增删改查(分页),可上传图片 5. 根据餐点的类型/名称关键词进行搜索(分页) 6. 用户将餐点添加到购物车中 7. 在购物车中可对餐点的数量进行增加/删除餐点 8. 下订单(检查/修改库存) 9. 历史订单查询(用户/管理员),管理员可以通过用户名/订单号进行查询 10. 餐点欢迎度(点餐率)分析,生成图表显示 ### 难点: 1. 环境配置(Tomcat与JDK的版本使用问题,DBCP/C3P0数据库连接池的配置问题) 2. 登录(会话)维持————session/cookies 3. 分页显示————PageModel/jdbc-mysql查 ### 实现图 ![主页](https://github.com/Clovers4/coffee-javaweb/blob/master/resouce/sample/index.jpg) ![登录](https://github.com/Clovers4/coffee-javaweb/blob/master/resouce/sample/login.jpg) ![注册](https://github.com/Clovers4/coffee-javaweb/blob/master/resouce/sample/register.jpg) ![修改个人信息](https://github.com/Clovers4/coffee-javaweb/blob/master/resouce/sample/user-modify-info.jpg) ![搜索餐点](https://github.com/Clovers4/coffee-javaweb/blob/master/resouce/sample/search.jpg) ![购物车](https://github.com/Clovers4/coffee-javaweb/blob/master/resouce/sample/shoppingcart.jpg) ![历史订单查看详情](https://github.com/Clovers4/coffee-javaweb/blob/master/resouce/sample/user-history-order-details.jpg) ![购买餐点](https://github.com/Clovers4/coffee-javaweb/blob/master/resouce/sample/item-logined.jpg) ![查看餐点热度](https://github.com/Clovers4/coffee-javaweb/blob/master/resouce/sample/items-heat.jpg) ### 1. 准备工作 #### 1.1 学习javaweb相关知识。 - 考虑到第一次制作,就不使用后端框架进行开发了,不过开发到后期,确实意识到使用Spring框架的AOP特性能更好地管理日志,MyBatis等ORM框架也能减少繁琐的JDBC的代码。 #### 1.2 查询相关网站,寻找一些基本思路以及材料 - 由于该项目是学习任务且缺少美工,可以利用[星巴克中国官网](https://www.starbucks.com.cn/) 来提取一些图片资料进行加快进度。 #### 1.3 绘制基本思路流程,考虑架构,分清各个层次的任务 - 对web开发、html知识尚有欠缺,一边学习html/css/js,同时弄清楚JSP/Servlet/Filter/Listner的用处以及DAO/Service层的职责。绘制流程图,使思路更加清晰。 #### 1.4 配置相关环境 - 搭建好jdk1.8,tomcat8.0,mysql8.0的环境,并进行测试可用 - 使用Navicat作为Mysql的可视化工具 - 使用GitHub作为版本控制的工具 ### 2. 开发 #### 2.1 以域名反写的规则新建各个包,划清职责,确立代码规范 - 项目的基本架构和代码规范非常重要,需要保证后期功能增多之后,尽量减少出现职责不一,debug困难的情况。 #### 2.2 利用Navicat生成模型,划分各个表的职责 - 比较纠结的是各个字段的名字,规范。 #### 2.3 制作基本工具类(JDBCUtil),基本Filter - 使用了DBCP数据池连接池来优化连接(C3P0配置的过程出现问题,无法解决) - 同时配合TransactionFilter来实现进入Servlet之前开启事务,退出Servlet之后Commit/Rollback的功能 - 使得Service层和Dao层能够更专注其自身的职责,不需要逐层获取Connection,而是通过将Connection利用ThreadLocal绑定的方式来获取。 - 此外,还有CharacterEncodingFilter/NoCacheFilter等。这里没有使用Spring提供的Filter。 #### 2.4 前后端交替开发(1人) - 由于本身就没有进行前后端分离,且对web开发流程尚不熟悉,该项目是独自开发的。 - 参考[孤傲苍狼的javaweb学习总结(教学)](https://www.cnblogs.com/xdp-gacl/category/574705.html)等资料逐步实现各模块/层次的功能。 - 基本流程为编写网页->PO/VO/FormBean->DAO->Service->Servlet - 同时使用BootStrap开发各网页,js只用来做了前端表单验证/反馈的功能。 - 使用bootstrap fileinput插件美化了图片上传功能,使用Chart.js制作了网页图表显示的功能。 ### 3. 完善/优化 #### 3.1 注释完善 #### 3.2 命名调整 #### 3.3 Debug ### 不足与进阶 #### 不足 1. 命名与注释到后期略显不足,需要改善 2. Service层与Controller层的设计有问题,方法和职责的分配都有点问题。 3. 复杂度太高,且有大量冗余代码(如:日志等)根据Eclipse搜索"\n"的结果来看,除去引入的css/js文件,代码量似乎达到了1W行。 4. 前后端耦合度太高,复用性太低。 5. VO与entity层是不同的,此处本来应该用DTO来做。 #### 进阶 1. 补充/系统地学习一遍html/css/js。可以考虑使用Vue.js对前端代码进行优化。 2. 可以考虑使用Spring的AOP特性来对硬编码的日志记录代码进行优化。 3. 可以考虑使用Maven来管理jar包 4. 可以考虑使用Mybatis来完成数据持久化工作