
1. 项目背景与核心需求宠物商城系统作为典型的B2C电商平台其核心业务逻辑与传统电商有高度相似性但在商品管理、服务预约等环节存在特殊需求。这个Java Web项目采用MVC分层架构前端使用JSPEL表达式JSTL标签库后端基于Servlet处理业务逻辑数据持久层选用JDBC直连MySQL方案。这种技术组合既能满足毕业设计的技术考察要求又符合企业级应用的基础架构规范。关键提示选择JDBC而非MyBatis等ORM框架既避免了过度依赖第三方库导致的配置复杂度又能充分展示对SQL原生操作的理解——这是许多高校毕设答辩时的加分项。2. 系统架构设计详解2.1 技术栈选型依据Java 8保持与大多数教学环境的版本兼容性Tomcat 9Servlet 4.0规范支持满足JSP 2.3要求MySQL 5.7提供JSON字段支持以适应宠物特征扩展前端三件套纯HTML/CSS/JS实现避免Vue/React等框架增加学习成本2.2 数据库ER图关键设计CREATE TABLE pet ( id int(11) NOT NULL AUTO_INCREMENT, category_id int(11) COMMENT 宠物分类, name varchar(50) NOT NULL COMMENT 宠物名称, tags json DEFAULT NULL COMMENT 特征标签, price decimal(10,2) NOT NULL COMMENT 售价, stock int(11) NOT NULL DEFAULT 0 COMMENT 库存, vaccination tinyint(1) DEFAULT 0 COMMENT 是否接种疫苗, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;3. 核心功能模块实现3.1 购物车并发控制采用Session存储临时购物车数据结账时通过MySQL事务保证数据一致性// 伪代码示例 Connection conn dataSource.getConnection(); try { conn.setAutoCommit(false); // 1. 扣减库存 updatePetStock(conn, petId, quantity); // 2. 生成订单 createOrder(conn, order); // 3. 清空购物车 clearCart(request.getSession()); conn.commit(); } catch (SQLException e) { conn.rollback(); throw new BusinessException(库存不足); }3.2 宠物分类检索优化实现带缓存的分类树查询public ListCategory getCategoryTree() { String cacheKey category_tree; ListCategory cached cache.get(cacheKey); if (cached null) { cached categoryMapper.selectAll(); cache.put(cacheKey, cached, 3600); } return cached; }4. 典型问题排查实录4.1 中文乱码解决方案在web.xml中配置全局过滤器filter filter-nameencodingFilter/filter-name filter-classorg.apache.catalina.filters.SetCharacterEncodingFilter/filter-class init-param param-nameencoding/param-name param-valueUTF-8/param-value /init-param /filter4.2 图片上传路径处理String savePath getServletContext().getRealPath(/uploads); File saveDir new File(savePath); if (!saveDir.exists()) saveDir.mkdirs(); Part filePart request.getPart(file); String fileName UUID.randomUUID() .jpg; filePart.write(savePath File.separator fileName);5. 项目扩展建议安全加固添加XSS过滤器实现CSRF Token校验密码采用BCrypt加密性能优化引入连接池HikariCP添加Redis缓存层实现静态资源CDN加速业务扩展宠物医疗服务预约宠物社区论坛直播看宠功能实战经验在答辩演示时提前准备两套数据库——一套空库用于演示新增流程一套预置数据的库用于展示查询功能。这样能避免现场操作时的等待时间。