基于SSH框架的电子产品在线商城系统 - 源码深度解析
在当今数字化零售浪潮中,电子产品销售行业正面临传统模式效率低下、信息不对称、用户体验差等核心挑战。为应对这些痛点,我们基于成熟的SSH(Struts2 + Spring + Hibernate)集成框架,设计并实现了一套企业级电子产品B2C交易平台。该系统不仅为电子消费品商家提供完整的线上销售解决方案,还通过优化的技术架构为消费者打造了便捷高效的购物体验。
系统架构与技术栈深度解析
本平台采用经典的三层架构模式,每一层的技术选型都经过精心考量,确保系统的高性能和高可维护性。
表现层设计
- Struts2框架:利用其强大的拦截器机制处理用户请求过滤、权限验证等横切关注点
- OGNL表达式语言:实现数据在Action与JSP页面间的灵活传递,确保业务逻辑与视图展示的清晰分离
- MVC模式:严格遵循模型-视图-控制器设计模式,提高代码的可读性和可维护性
业务逻辑层实现
- Spring IoC容器:统一管理各个Service组件,采用依赖注入方式组织业务模块
- 低耦合设计:显著降低模块间的依赖关系,提升系统的可测试性和可维护性
- 声明式事务管理:为订单处理、库存更新等关键业务操作提供可靠的数据一致性保障
- AOP编程支持:通过面向切面编程实现日志记录、性能监控等通用功能
数据持久层架构
- Hibernate ORM框架:通过对象关系映射将Java实体与数据库表结构建立关联
- 缓存机制:利用一级缓存和查询缓存有效提升数据访问性能
- 映射策略:支持复杂的关联关系处理,包括一对一、一对多、多对多等关系
- HQL查询语言:提供面向对象的数据库查询方式,减少SQL注入风险
前端与构建工具
- JSP + JSTL:结合标准标签库进行动态内容渲染
- JavaScript + CSS:实现丰富的用户交互效果和界面样式美化
- Maven构建工具:进行依赖管理和构建流程标准化,确保开发环境的统一性
数据库设计亮点与优化策略
数据库设计是系统稳定性的基石,本平台的表结构设计体现了多个技术创新点。
商品订单表(sp_order)的外键约束设计
CREATE TABLE `sp_order` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`num` int(11) DEFAULT NULL COMMENT '数量',
`sp_id` int(11) DEFAULT NULL COMMENT '商品ID',
`user_id` int(11) DEFAULT NULL COMMENT '用户ID',
`code` varchar(255) DEFAULT NULL COMMENT '订单号',
PRIMARY KEY (`id`),
KEY `FK_8hvg6wn4chkpvb4ou2stckwpf` (`sp_id`),
KEY `FK_rl0sqd6lc3rt9m9b72ogrcbjl` (`user_id`),
CONSTRAINT `FK_8hvg6wn4chkpvb4ou2stckwpf` FOREIGN KEY (`sp_id`) REFERENCES `sp` (`id`),
CONSTRAINT `FK_rl0sqd6lc3rt9m9b72ogrcbjl` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='商品订单表'
设计优势分析:
- 数据完整性:通过外键约束确保订单记录的商品ID和用户ID必须在对应的商品表和用户表中存在
- 查询性能优化:为sp_id和user_id字段建立B+树索引,显著提升多表关联查询效率
- 防止脏数据:参照完整性约束有效防止了无效数据的产生
- 级联操作支持:可配置级联更新和删除,保证数据一致性
商品表(sp)的软删除设计
CREATE TABLE `sp` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`isDelelet` int(11) DEFAULT NULL COMMENT '是否删除',
`jj` varchar(255) DEFAULT NULL COMMENT '简介',
`price` varchar(255) DEFAULT NULL COMMENT '价格',
`type` int(11) DEFAULT NULL COMMENT '类型',
`urls` varchar(255) DEFAULT NULL COMMENT '图片地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='商品表'
软删除机制的价值:
- 数据完整性保留:保留历史数据完整性,便于后续的数据分析和审计追踪
- 关联数据一致性:避免因物理删除导致的关联数据不一致问题
- 业务灵活性:支持商品下架后的快速重新上架操作,减少运维成本
- 价格字段设计:varchar类型更好地适应电子产品促销活动中的价格区间表示需求
用户表(user)的扩展性设计
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`createTime` datetime DEFAULT NULL COMMENT '创建时间',
`password` varchar(255) DEFAULT NULL COMMENT '密码',
`phone` varchar(255) DEFAULT NULL COMMENT '电话',
`realname` varchar(255) DEFAULT NULL COMMENT '真实名字',
`username` varchar(255) DEFAULT NULL COMMENT '用户名',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='用户表'
扩展性设计考量:
- 时间戳记录:createTime字段记录用户注册时间,为用户行为分析提供数据基础
- 身份信息分离:realname与username字段分离设计,支持昵称登录与真实姓名业务场景分离
- 移动端兼容:电话字段为短信验证、移动端登录等功能预留扩展空间
- 密码安全:采用varchar类型存储加密后的密码,支持多种加密算法
核心功能实现深度解析
用户认证与权限管理
系统采用基于角色的访问控制(RBAC)模型,实现精细化的权限管理。不同角色拥有不同的操作权限,确保系统安全性。
用户登录功能实现:
public class UserLoginAction extends ActionSupport {
private String username;
private String password;
private UserService userService;
public String execute() {
try {
User user = userService.validateLogin(username, password);
if (user != null) {
ActionContext.getContext().getSession().put("currentUser", user);
return SUCCESS;
} else {
addActionError("用户名或密码错误");
return INPUT;
}
} catch (Exception e) {
addActionError("登录过程出现异常");
return ERROR;
}
}
// Getter和Setter方法
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
public void setUserService(UserService userService) {
this.userService = userService;
}
}

安全拦截器实现:
public class AuthInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
Map<String, Object> session = invocation.getInvocationContext().getSession();
Object user = session.get("currentUser");
if (user == null) {
return "login";
}
return invocation.invoke();
}
}
商品管理模块
商品管理模块支持完整的CRUD操作,采用Hibernate实现高效的数据持久化:
@Service
@Transactional
public class ProductServiceImpl implements ProductService {
@Autowired
private ProductDao productDao;
@Override
public void saveProduct(Sp product) {
productDao.save(product);
}
@Override
@Transactional(readOnly = true)
public List<Sp> findAllProducts() {
return productDao.findAll();
}
@Override
@Transactional(readOnly = true)
public Sp findProductById(Integer id) {
return productDao.findById(id);
}
@Override
public void updateProduct(Sp product) {
productDao.update(product);
}
@Override
public void deleteProduct(Integer id) {
// 实现软删除逻辑
Sp product = productDao.findById(id);
product.setIsDelelet(1);
productDao.update(product);
}
}
技术特色:
- 注解驱动:使用Spring的@Service和@Transactional注解简化配置
- 软删除实现:通过更新isDelelet字段实现逻辑删除,保持数据完整性
- 只读事务优化:查询操作使用readOnly事务提升性能
- 异常处理:统一的异常处理机制保证业务稳定性
性能优化与安全考量
缓存策略实施
- Hibernate二级缓存:配置Ehcache实现应用级缓存
- 页面静态化:对商品详情页等静态内容进行缓存优化
- 数据库连接池:使用Druid连接池管理数据库连接
安全防护措施
- SQL注入防护:使用Hibernate参数化查询避免SQL注入
- XSS攻击防护:对用户输入进行过滤和转义处理
- 会话安全:设置合理的会话超时时间和安全令牌
本系统通过合理的架构设计和细致的技术实现,为电子产品在线销售提供了一个稳定、高效、安全的解决方案,具有良好的可扩展性和维护性。