1. 项目背景与核心价值
"多鱼"旧物交易平台是一个基于JSP技术的校园二手物品交易系统。作为一名计算机专业毕业生,选择这个题目作为毕业设计既符合专业培养目标,又具有实际应用价值。在高校环境中,每年都有大量闲置物品(如教材、电子产品、生活用品等)需要流转,而传统线下交易方式存在信息不对称、交易效率低等问题。
这个平台的核心价值在于:
- 为校园用户提供便捷的二手交易渠道
- 实现闲置物品的高效流通和资源再利用
- 降低学生的生活成本
- 锻炼开发者全栈开发能力(前端+后端+数据库)
我在开发过程中发现,一个成熟的校园二手平台需要特别关注以下几个特性:
- 用户认证的真实性(确保校园用户身份)
- 物品分类的合理性(符合学生实际需求)
- 交易流程的简洁性(降低使用门槛)
- 系统的稳定性和安全性
2. 技术选型与架构设计
2.1 技术栈选择
基于项目需求和开发成本考虑,我选择了以下技术组合:
前端技术:
- JSP(JavaServer Pages):作为视图层技术,便于与Java代码结合
- HTML5/CSS3:构建响应式页面布局
- JavaScript/jQuery:实现动态交互效果
- Bootstrap框架:快速搭建美观的UI界面
后端技术:
- Java Servlet:处理业务逻辑和请求转发
- JDBC:数据库连接和操作
- MySQL:关系型数据库存储数据
开发环境:
- Eclipse IDE:Java开发主流工具
- Tomcat 9.0:Web应用服务器
- Maven:项目构建和依赖管理
提示:选择JSP+Servlet这套传统Java Web技术栈,主要考虑到学校课程体系的延续性,以及毕业答辩时老师的技术偏好。虽然现在Spring Boot更流行,但对于毕业设计来说,基础技术栈更能体现扎实的基本功。
2.2 系统架构设计
系统采用经典的MVC三层架构:
code复制表示层(View) JSP页面
控制层(Controller) Servlet
模型层(Model) JavaBean + DAO
这种分层设计使得:
- 各层职责明确,便于协作开发
- 代码结构清晰,易于维护
- 业务逻辑与表现分离,提高可扩展性
3. 数据库设计与实现
3.1 数据库表结构
根据校园二手交易场景,设计了以下核心表:
用户表(user)
sql复制CREATE TABLE `user` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
`password` varchar(32) NOT NULL,
`real_name` varchar(20) DEFAULT NULL,
`student_id` varchar(15) DEFAULT NULL,
`phone` varchar(11) DEFAULT NULL,
`email` varchar(30) DEFAULT NULL,
`avatar` varchar(100) DEFAULT 'default.jpg',
`credit_score` int(11) DEFAULT '100',
`register_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`user_id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
商品表(product)
sql复制CREATE TABLE `product` (
`product_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`category_id` int(11) NOT NULL,
`title` varchar(50) NOT NULL,
`description` text,
`price` decimal(10,2) NOT NULL,
`original_price` decimal(10,2) DEFAULT NULL,
`status` tinyint(4) DEFAULT '1' COMMENT '1-在售 2-已售 3-下架',
`view_count` int(11) DEFAULT '0',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`product_id`),
KEY `user_id` (`user_id`),
KEY `category_id` (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
商品图片表(product_image)
sql复制CREATE TABLE `product_image` (
`image_id` int(11) NOT NULL AUTO_INCREMENT,
`product_id` int(11) NOT NULL,
`image_url` varchar(100) NOT NULL,
`sort_order` int(11) DEFAULT '0',
PRIMARY KEY (`image_id`),
KEY `product_id` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.2 数据库优化实践
在实际开发中,我遇到了几个性能问题并进行了优化:
-
索引优化:
- 为经常查询的字段(如user_id, category_id)添加索引
- 避免在WHERE条件中对字段进行函数操作,防止索引失效
-
连接池配置:
xml复制<!-- context.xml中配置DBCP连接池 -->
<Resource
name="jdbc/multiFishDB"
auth="Container"
type="javax.sql.DataSource"
maxTotal="50"
maxIdle="10"
maxWaitMillis="10000"
username="root"
password="123456"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/multi_fish?useSSL=false&characterEncoding=utf8"/>
- 事务管理:
java复制// 使用JDBC事务确保数据一致性
Connection conn = null;
try {
conn = dataSource.getConnection();
conn.setAutoCommit(false); // 开启事务
// 执行多个SQL操作...
conn.commit(); // 提交事务
} catch (SQLException e) {
if(conn != null) conn.rollback(); // 回滚
throw e;
} finally {
if(conn != null) conn.close();
}
4. 核心功能模块实现
4.1 用户认证模块
校园二手平台对用户真实性要求较高,我设计了以下认证流程:
-
注册流程:
- 前端表单验证(JS验证手机号、学号格式)
- 后端校验(防止重复用户名)
- 密码MD5加密存储
java复制// 密码加密工具类 public class MD5Util { public static String encode(String str) { try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(str.getBytes()); byte[] byteDigest = md.digest(); StringBuilder buf = new StringBuilder(); for (byte b : byteDigest) { buf.append(String.format("%02x", b & 0xff)); } return buf.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return null; } } } -
登录流程:
- Session管理用户登录状态
- 添加验证码防止暴力破解
jsp复制<!-- 登录表单示例 --> <form action="login" method="post"> <div class="form-group"> <label>用户名</label> <input type="text" name="username" class="form-control" required> </div> <div class="form-group"> <label>密码</label> <input type="password" name="password" class="form-control" required> </div> <div class="form-group"> <label>验证码</label> <input type="text" name="captcha" required> <img src="captcha.jpg" onclick="this.src='captcha.jpg?d='+Math.random()"> </div> <button type="submit" class="btn btn-primary">登录</button> </form>
4.2 商品发布与管理
商品模块是平台的核心,主要功能包括:
-
商品发布流程:
- 多图片上传(使用Apache Commons FileUpload)
- 富文本编辑器(整合CKEditor)
- 自动生成缩略图(使用Thumbnailator库)
-
商品展示优化:
- 分页查询(前端使用Bootstrap Pagination)
- 多条件筛选(价格区间、分类、新旧程度等)
- 热门商品推荐(基于浏览量和发布时间)
java复制// 商品分页查询Servlet示例
public class ProductListServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int page = 1;
int size = 10;
try {
page = Integer.parseInt(request.getParameter("page"));
} catch (NumberFormatException e) {}
String keyword = request.getParameter("keyword");
int categoryId = 0;
try {
categoryId = Integer.parseInt(request.getParameter("categoryId"));
} catch (NumberFormatException e) {}
ProductDAO dao = new ProductDAOImpl();
PageInfo<Product> pageInfo = dao.findByPage(page, size, keyword, categoryId);
request.setAttribute("pageInfo", pageInfo);
request.getRequestDispatcher("/product/list.jsp").forward(request, response);
}
}
4.3 交易流程设计
校园二手交易有其特殊性,我设计了简化的交易流程:
-
联系卖家:
- 站内消息系统
- 联系方式脱敏显示(如手机号显示为138****1234)
-
交易状态管理:
- 商品状态机设计
mermaid复制stateDiagram [*] --> 待审核 待审核 --> 已上架: 审核通过 已上架 --> 已下架: 卖家下架 已上架 --> 交易中: 买家下单 交易中 --> 已售出: 确认交易 交易中 --> 已上架: 取消交易 已售出 --> [*] -
评价系统:
- 买卖双方互评
- 信用积分计算
5. 系统安全与性能优化
5.1 安全防护措施
-
SQL注入防护:
- 使用PreparedStatement
- 输入参数过滤
java复制// 安全的SQL执行方式 String sql = "SELECT * FROM user WHERE username = ? AND password = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, MD5Util.encode(password)); ResultSet rs = pstmt.executeQuery(); -
XSS防护:
- 使用JSTL的<c:out>输出转义
- 富文本内容白名单过滤(使用Jsoup)
-
文件上传安全:
- 限制文件类型(通过后缀名和MIME类型双重校验)
- 限制文件大小
- 随机生成存储文件名
5.2 性能优化实践
-
前端优化:
- 静态资源合并与压缩
- 使用浏览器缓存
- 图片懒加载
-
后端优化:
- 数据库查询优化(避免N+1查询问题)
- 使用连接池
- 热点数据缓存(使用HashMap实现简单缓存)
-
Tomcat优化:
xml复制<!-- server.xml中配置线程池 -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
maxThreads="200"
minSpareThreads="20"
acceptCount="100"
redirectPort="8443" />
6. 项目部署与测试
6.1 部署方案
-
开发环境:
- Windows 10 + Eclipse + Tomcat 9.0 + MySQL 5.7
-
生产环境部署:
- 使用War包部署
bash复制# 打包命令 mvn clean package # 部署到Tomcat的webapps目录 cp target/multifish.war /usr/local/tomcat/webapps/ -
数据库迁移:
- 使用mysqldump导出导入
bash复制# 导出 mysqldump -u root -p multifish > multifish.sql # 导入 mysql -u root -p multifish < multifish.sql
6.2 测试策略
-
单元测试:
- 使用JUnit测试核心业务逻辑
java复制@Test public void testUserLogin() { UserService service = new UserServiceImpl(); User user = service.login("admin", "123456"); assertNotNull(user); assertEquals("管理员", user.getRealName()); } -
功能测试:
- 编写测试用例覆盖主要功能点
- 使用Postman测试API接口
-
性能测试:
- 使用JMeter模拟并发用户
- 重点关注商品列表页的响应时间
7. 开发心得与扩展方向
在实际开发过程中,我总结了以下几点经验:
-
开发技巧:
- 先设计好数据库再开始编码,可以避免后期大量修改
- 使用Git进行版本控制,每个功能一个分支
- 编写清晰的代码注释,方便后期维护
-
常见问题:
- JSP页面中文乱码:统一使用UTF-8编码
- Tomcat热部署失效:配置reloadable="true"
- 静态资源加载失败:检查web.xml中Servlet映射
-
项目扩展方向:
- 增加微信小程序端
- 引入推荐算法(基于用户浏览历史)
- 添加拍卖功能
- 实现物流跟踪
这个毕业设计项目让我全面实践了Java Web开发的各项技术,从需求分析到系统部署的完整流程。特别是对校园场景下的二手交易特点有了深入理解,比如如何平衡交易便捷性和安全性,如何设计符合学生使用习惯的界面等。