随着电子商务的快速发展,传统水果零售行业面临着销售渠道单一、客户群体受限以及库存管理效率低下的挑战。基于JSP+Servlet技术栈构建的"鲜果优选"电商平台,为中小型水果商家提供了一套完整的线上销售解决方案。该系统采用经典的MVC架构模式,实现了业务逻辑、数据展示与用户请求控制的清晰分离。
系统架构与技术栈
该平台采用分层架构设计,前端使用JSP页面结合HTML、CSS和JavaScript实现用户界面,后端基于Servlet处理业务逻辑,数据持久层通过JDBC连接MySQL数据库。系统严格遵循MVC设计模式,Servlet作为控制器负责接收和分发请求,JavaBean封装业务逻辑,JSP页面专注于视图展示。
核心代码结构展示了系统的请求处理机制:
@WebServlet("/product/*")
public class ProductServlet extends HttpServlet {
private ProductService productService = new ProductServiceImpl();
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
String path = request.getPathInfo();
switch(path) {
case "/list":
listProducts(request, response);
break;
case "/detail":
showProductDetail(request, response);
break;
}
}
}
数据库设计亮点分析
系统数据库包含10个核心表,其中商品表、订单表和用户表的设计体现了良好的规范化程度。
商品信息表设计
CREATE TABLE product (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
category_id INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
stock INT DEFAULT 0,
description TEXT,
image_url VARCHAR(200),
status TINYINT DEFAULT 1,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (category_id) REFERENCES category(id)
);
该表设计采用外键约束确保数据完整性,价格字段使用DECIMAL类型避免浮点数精度问题,状态字段支持商品上下架管理,时间戳字段便于销售数据分析。
订单表设计
CREATE TABLE orders (
id VARCHAR(32) PRIMARY KEY,
user_id INT NOT NULL,
total_amount DECIMAL(10,2) NOT NULL,
status ENUM('pending','paid','shipped','completed','cancelled'),
payment_method VARCHAR(50),
shipping_address TEXT,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES user(id)
);
订单表使用定长字符串作为主键,支持分布式系统生成唯一标识。状态字段采用枚举类型确保数据一致性,金额字段维护订单总额信息。
核心功能实现解析
商品展示与购物车管理
商品展示模块采用分页查询技术,优化大数据量下的性能表现。核心DAO实现如下:
public class ProductDAO {
public List<Product> getProductsByPage(int page, int pageSize) {
String sql = "SELECT * FROM product WHERE status=1 LIMIT ?,?";
try (Connection conn = DataSourceUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, (page-1)*pageSize);
pstmt.setInt(2, pageSize);
ResultSet rs = pstmt.executeQuery();
// 结果集处理逻辑
}
}
}

购物车功能基于Session实现,支持商品添加、数量修改和批量删除:
public class CartServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
String action = request.getParameter("action");
HttpSession session = request.getSession();
Cart cart = (Cart) session.getAttribute("cart");
if("add".equals(action)) {
Product product = productService.getById(productId);
cart.addItem(product, quantity);
}
}
}

订单处理流程
订单生成过程包含库存验证、金额计算和事务处理:
public class OrderService {
@Transactional
public String createOrder(Order order, List<CartItem> items) {
// 库存验证
for(CartItem item : items) {
if(!checkStock(item.getProductId(), item.getQuantity())) {
throw new RuntimeException("库存不足");
}
}
// 生成订单号
String orderId = generateOrderId();
order.setId(orderId);
// 保存订单主信息
orderDAO.save(order);
// 保存订单明细
for(CartItem item : items) {
OrderDetail detail = new OrderDetail(orderId, item);
orderDetailDAO.save(detail);
// 更新库存
updateStock(item.getProductId(), -item.getQuantity());
}
return orderId;
}
}

后台管理系统
管理员后台提供完整的商品管理和订单处理功能:
@WebServlet("/admin/*")
public class AdminServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
String path = request.getPathInfo();
if("/product/publish".equals(path)) {
// 商品发布逻辑
Product product = extractProductFromRequest(request);
productService.publishProduct(product);
} else if("/order/process".equals(path)) {
// 订单处理逻辑
String orderId = request.getParameter("orderId");
orderService.processOrder(orderId);
}
}
}

实体模型与业务逻辑
系统核心实体模型采用面向对象设计,每个实体对应相应的业务操作:
public class User {
private Integer id;
private String username;
private String email;
private String password;
private String role;
private Date createTime;
// 业务方法
public boolean validatePassword(String inputPassword) {
return PasswordUtil.verify(inputPassword, this.password);
}
}
public class Product {
private Integer id;
private String name;
private BigDecimal price;
private Integer stock;
private String description;
public boolean isAvailable() {
return stock > 0;
}
}
性能优化与安全措施
系统在性能优化方面采用数据库连接池技术:
public class DataSourceUtil {
private static BasicDataSource dataSource;
static {
dataSource = new BasicDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/fruit_shop");
dataSource.setUsername("username");
dataSource.setPassword("password");
dataSource.setInitialSize(5);
dataSource.setMaxTotal(20);
}
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
}
安全方面实现输入验证和SQL注入防护:
public class SecurityUtil {
public static String escapeHtml(String input) {
return StringEscapeUtils.escapeHtml4(input);
}
public static boolean isValidProductId(String id) {
return id != null && id.matches("\\d+");
}
}
功能展望与优化方向
移动端适配优化:开发响应式设计,使用Bootstrap框架重构前端界面,提升移动设备用户体验。实现方案包括媒体查询和弹性布局。
支付集成扩展:集成微信支付和支付宝接口,使用支付SDK和异步通知机制处理支付结果。
推荐算法实现:基于用户行为数据构建协同过滤推荐系统,使用Redis缓存用户画像和商品相似度矩阵。
性能监控体系:集成Prometheus和Grafana实现系统监控,对关键业务接口进行性能指标采集和告警。
微服务架构迁移:将单体应用拆分为商品服务、订单服务、用户服务等微服务,使用Spring Cloud框架实现服务治理。
该系统通过严谨的架构设计和完整的功能实现,为传统水果零售业提供了可靠的数字化转型方案。其模块化设计和清晰的代码结构为后续功能扩展和维护奠定了坚实基础。