本系统采用SSH(Struts,Spring,Hibernate)框架来开发。SSH框架是目前J2EE领域里最热门而且用得较为成熟的一套开源框架,它是基于MVC设计模式之上,在充分发挥MVC设计模式优点的同时,也创造出了自己的开发特点,降低了应用程序的耦合性,更进一步提高了应用程序的复用性、移植性、灵活性、扩展性和应用性能。SSH是一套轻量级的开发框架,相对于EJB重量级开发框架,SSH在继承了它的优点的同时,在开发和执行效率上都有了相当程度的提高,同时对于开发者而言,它比EJB更容易学习和撑握,开发速度也更快。目前Struts和Spring发展到2.0版本,Hibernate发展到3.0版本,SSH框架也正在不断地进行优化和升级,运行也越来越稳定。
1 软件环境
a)服务器端:
操作系统:Windows NT/2000/2003
网站服务器:Tomcat7.x + jdk1.7.x
数据库管理系统:MySQL5.x
b)用户端: 操作系统:WindowsNT/2000/2003/XP professional/Windows 7/Windows 8/Windows 10
2 Struts、Hibernate和Spring的整合
2.1 Spring整合Hibernate
1、在Spring的配置文件ApplicationContext.xml中配置Hibernate对SessionFactory的设置。如下面的示例代码。
org.hibernate.dialect.MySQLDialect
true
true
update
cn/shop/user/vo/User.hbm.xml
当Spring的IoC容器配置了SessionFactory Bean,它随应用的部署启动而加载,可以利用Spring依赖注入特性将该Bean注入其它Bean。我们由配置文件还可以看出,以声明式的方式管理SessionFactory时,可以让应用在不同数据源间切换,一旦持久层服务发生改变,程序代码不需要改动,只需修改配置文件即可,使得系统的可维护性加强。
2、使用Spring中的HibernateDaosupport和HibernateTemplate类简化Hibernate DAO实现类的编写,完成数据持久化的操作。
3、通过Spring的事务机制进行统一的事务管理。Spring可以采用编程式和声明式两类事务管理。声明式的事务管理更灵活。可以在Spring中使用注解式的声明式事务管理:
2.2 Spring整合Struts2
Spring也提供了MVC模式的支持,但Struts是比较单纯的MVC框架,开发中更倾向Spring和Struts整合开发。
Struts和Spring的整合比较简单顺畅。整合关键点是:将Struts中的Action的实例生成不再由Struts负责,而交给Spring容器管理,主要目的是让控制器与业务逻辑组件实现分离。基于该目的,我们采用工厂模式策略,让Spring容器管理Action,利用IoC的依赖注入特性为控制器注入业务逻辑组件。Struts只单纯扮演控制器的角色。
下面是Spring和Struts整合的关键步骤。
Struts的核心控制器必须能装载Spring的应用程序环境。
Spring和Struts整合有两种方式
1、Struts2的Action由Struts2框架自身创建.
2、Struts2的Action交给Spring框架创建.
我们推荐使用第二种方式,因为第二种方式,Action类由Spring容器进行管理,可以方便的对Action类进行AOP的编程.但第二种有一个关键地方:就是在Struts2框架创建Action类的时候,默认是多例的.而Spring容器在管理类的时候,默认创建是单例的.单例的这种方式就容易产生线程安全问题.所以一定要配置类的scope属性.
在Spring的配置文件中:
在Struts的配置文件中:
2.3 Struts2、Hibernate和Spring的整合开发
将两组整合放在一起进行开发,就可以进行三者的组合开发。在进行三者整合开发时,一般可以采取由上往下和由下往上的分层开发的原则,多数实际项目开发,往往采用后者的开发模式,即:
(1)从底层开发,先开发领域对象,即一些实体类,这些领域对象会在各层之间进行传递,利用Hibernate做好领域对象和数据库表的映射关系。
(2)DAO层的开发。它是专门独立出来对数据进行持久化,即处理数据的CRUD操作,也是利用Spring对Hibernate提供的DAO支持类HibernateDaoSupport来实现的。每个DAO组件对应一个数据库表。
(3)Service层的开发。这层主要是具体业务组件开发,主要用于处理各类业务逻辑,并且能隔离事务和对其他资源调度。
(4)Action层开发。主要是处理Web请求,由Spring进行管理。
2.4 前台分页方法改进
本系统前台采用的分页方法原理是,第一次查询时把所有要查询的数据都从数据库里查询出来,然后把这些数据放到一个session中缓存起来,以后再查询时就从session缓存中去取需要的数据,这种做法的优点在于,只访问一次数据库减少了对数据库服务器的负担,把数据缓存在本地,每次查询速度比去直接访问数据库查询要快得多。采用此种分页方法既减少于数据库的访问,又提高了数据查询速度,可谓是一举两得。
2.5 数据库设计
本系统采用的数据库为Mysql5.0,本系统所有与数据库相关的开发都遵从Mysql5.0数据库开发原则。
3 功能实现
3.1 网站前台功能实现
3.1.1 前台页面效果图
前台首页:
商品详情页面:
购物车页面:
3.1.2 前台部分实现代码
SSH整合中的分页工具类:
publicclass PageHibernateCallback implementsHibernateCallback>{
private String hql;
private Object[] params;
private int startIndex;
private int pageSize;
public PageHibernateCallback(String hql,Object[] params,
int startIndex, intpageSize) {
super();
this.hql= hql;
this.params = params;
this.startIndex = startIndex;
this.pageSize = pageSize;
}
public ListdoInHibernate(Session session) throws HibernateException,
SQLException {
}
}
3.2 网站后台功能实现
3.2.1 后台页面效果图
一级分类管理页面:
商品管理页面:
3.2.2 后台主要实现代码
后台登录拦截器:
publicclass PrivilegeInterceptor extends MethodFilterInterceptor{
@Override
protected StringdoIntercept(ActionInvocation actionInvocation) throws Exception {
// 获得Session中存的后台的用户:
AdminUser adminExistUser =(AdminUser) ServletActionContext
.getRequest().getSession().getAttribute("adminExistUser");
if(adminExistUser == null){
// 没有登录:
ActionSupport support =(ActionSupport) actionInvocation.getAction();
support.addActionError("您还没有登录!请先去登录!");
return support.LOGIN;
}else{
// 已经登录
returnactionInvocation.invoke();
}
}
}
4 总结
以企业实际的系统开发需求为项目背景,遵循Java EE应用软件分层的模型,将系统划分为四个层次,即域模型层、持久层、业务逻辑层和表示层,并且整合了目前企业开发中最流行的开源框架Struts、Hibernate和Spring作为系统的主体架构。Struts框架着重于MVC模式的实现,Hibernate框架完成ORM映射和持久化工作,Spring框架贯穿表示层、业务层、持久层,它主要执行业务逻辑和事务管理,向下整合Hibernate处理数据持久化操作,向上整合Struts处理请求与业务逻辑的调用。三者的整合,提供了一种易扩展、易维护的高性能Web框架模型。