基于SSH架构的在线项目协作平台设计与实现
2018-08-11范士领盛凯合肥职业技术学院
范士领 盛凯 合肥职业技术学院
引言:随着行业的完善和细分,各行业(尤其是软件行业)出现了越来越多的中小型公司、兼职团队和自由职业者,这些公司或团队的组成及合作方式非常动态、变化极大、灵活性非常高,他们通常无法在一起面对面工作和沟通,甚至工作的时间段也不一致;加上资金有限,也没有能力购买一整套协作和沟通的软件。目前市场上存在的项目管理软件,如微软的project,存在着很多的缺陷:费用相对较高,复杂,分享比较麻烦,无法集成其他方面的功能,比如在线方面的功能。软件项目管理工作面临着极大的挑战,迫切需要一个高效,方便的资源共享,动态监控,指导各软件项目开发管理的信息化工作平台的支持。
在线项目协作平台的目标是搭建一个基于Web的在线项目管理协作平台,方便项目负责人对于项目的规划、管理、任务分配、项目进度的把握,成员之间协作、沟通、分享资料和互相通知,以适应项目和团队的快速变化和远程协作。
1 平台的框架技术
目前,在软件开发技术方面,提高应用系统开发效率的方法较多,其中比较成熟的技术有基于MVC模式的Struts2技术、Spring2技术和Hibernate3技术,而将这三种技术有机结合起来构建SSH框架,不但可以有效提高系统开发效率,而且在系统安全性、稳定性和健壮性、扩展性上都有良好的改进。在线项目协作平台软件综合应用了Struts2、Spring2和Hiberhate3这三种最新的软件框架技术,使其具有良好的架构和稳定的性能。
1.1 Struts2框架
Struts2是现今WEB开发技术中运用最广泛的实现了MVC模式开源框架, 相对于Strutsl来说,Struts2并不是简单的升级, 而是从WebWork升级而来的新版Struts。在Strutsl的基础上作了大量的改进,并融入了Struts1和WebWork2的优点,Struts2使用了webwork设计核心,而不是Struts1设计核心。Struts2将一个Web系统的程序分为模型、视图和控制器三个部分。模型由JavaBean、EJB等组件构成;视图由JSP、HTML、Struts2标签,JSTL标签组成;控制器由Action来实现。
1.2 Spring2框架
Spring2是一种轻量级J2EE开源框架,提供了管理业务对象的一致方法并且鼓励对接口编程而不是对类编程的良好习惯。它以控制反转(inversion of control,IoC)或依赖注入(dependency injection,DI)原则和面向方面编程(aspect-oriented programming,AOP)思想为基础,提供管理业务对象服务。IoC/DI是Spring的核心,即组件的关系由容器来控制,而非传统的程序代码,从而极大改善了代码的可重用性。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory使用IoC模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
1.3 Hibernate3技术
Hibernate框架使用O/R映射技术,对JDBC进行轻量级的对象封装,让普通的Java对象(Plain Old Java Objects,POJO)变成持久化类,管理Java类到数据库表的映射,并提供数据查询和获取数据的方法。Hibernate3,在以前的版本上,做了三个方面变化:API的变化,元数据,HQL查询语句,产品的性能,兼容性,稳定性都得到了提高。
1.4 集成策略与总体软件架构
在平台中采用了如下的整合策略:
(1)Struts2中的Action和数据逻辑层的数据操作bean交由Spring2容器来管理,在Struts2中采用伪Action来代替真实的Action,真实的Action位于Spring2容器中。
(2)数据操作bean仅针对POJO对象操作,而POJO对象与数据库中数据的映射、数据的关系逻辑及数据的持久化工作由Hibernate3来实现。
(3)数据操作bean中的POJO对象由Spring2注入,POJO的属性值则由Hibernate来生成。整合后的框架结构如图 1:
图 1 基于Struts2+Spring2+Hibernate3平台的总体软件架构
2 在线项目协作平台模块结构
在线项目管理系统是部署于WEB服务器上的基于B/S架构的应用系统。系统用户可以使用设定的帐号登录系统。系统结构图如图2:
图 2在线项目协作平台模块结构图
3 在线项目协作平台的实现
该项目的开发环境为Windows XP,数据库使用SQL Servser 2005,Web Server使用 Tomcat v6.0 Server,开发语言为 java,开发工具为eclipse。在建立项目后,需要导入struts2,spring2和hibernate所需的.jar包。以项目管理模块添加项目为例,介绍基于SSH项目的具体实现。
3.1 增加项目的时序图
页面提交请求,该请求交由Action处理,Action调用Service进行业务逻辑处理,处理后调用Dao层服务实现数据的持久化。如图3:
图 3 增加项目的时序图
3.2.xml文件配置和类的实现
SSH整合后的框架所用的配置文件主要有web.xml,struts.xml,applica-tionContext.xml,若干.hbm.xml文件如项目所用的Projec-t.hbm.xml等,类的设计包括Domain域模型层,业务逻辑层(Action层和Service层),持久层的设计。
首先在web.xml中加载pring2框架,在web中编写如下内容:<listener><listener-class>org.springframework.web.context.ContextLoaderLis-tener</listener-class></listener>
这样在Web应用启动时将加载Spring2框架,遇到html或者jsp请求,将通过struts2的伪Action过渡将请求转发给Spring MVC处理。
完成了web.xml配置后,首先设计Domain域对象模型,并确定它们的关联关系。可以借助Hibernate提供的DDL工具,自动地生成域模型对象及对应的.hbm.xml文件。以Project为例,生成的域对象如下:
public class Project{
private Integer id; private String proName;
public String getProName() { return proName; }
public void setProName(String proName) { this.proName = proName;}
…… }
在生成域对象同时,还生成了Project.hbm.xml,该文件也可以手动配置。.hbm.xml文件的主要作用是实现实体类(域对象)与数据库表字段之间的相互映射。
域模型层设计好后,可以进行业务逻辑层的设计,该层主要设计Action层代码和Service层代码,所使用的配置文件有struts.xml,applicationCont-ext.xml。Action 层和 Service层代码如下:
// Action层代码
public class ProjectAction{
public String saveNewProject() {
if(this.projectService.saveNewProject(project)==true)
return Action.SUCCESS; else return Action.ERROR; }
…… }
// Service层代码
public class ProjectService {
public boolean saveNewProject(Project project)
{ return (this.projectDao.saveNewProject(project)); }
…… }
struts.xml主要是将具体Action请求过渡给spring2处理,配置如下:
<struts><package name="onlineproject"extends="struts-default">
<action name="SaveNewProject"class="SaveNewProjectTemp"
method="saveNewProject">
<result name="success">/SaveSuccess.jsp</result>
<result name="error">/SaveError.jsp</result>
</action></package></struts>
由上面的配置,将通过class="SaveNewProjectTemp"伪Action过渡将请求转由spring2处理。
applicationContext.xml实现Spring2对所有的Action管理和具体请求处理,另外还可以配置连接数据库和连接池的相关参数。配置如下:
<bean id="SaveNewProjectTemp"
class="com.online.ui.action.ProjectAction"scope="prototype">
<property name="projectService" ref="projectService"/>
</bean>
<bean id="projectService" class="com.online.service.ProjectService">
<property name="projectDao"ref="projectDao" />
</bean>
<bean id="projectDao" class="com.online.dao.impl.ProjectHibernateDao">
<property name="sessionFactory"ref="mySessionFactory" />
</bean>
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/onlineproject" />
<property name="username" value="root" />
<property name="password" value="1" />
</bean>
……
由上面的配置,spring2通过bean id="SaveNewProjectTemp"实现struts2到spring2过渡,将struts2拦截的请求转由某个具体的 Action 如 com.online.ui.action.ProjectAction 进行业务逻辑的处理,在处理过程中注入属性和对象。
最后进行持久层设计,DAO模式是持久层的标准模式。项目使用Dao层定义统一的接口,由Dao接口层实现具体的接口。以下是持久层代码:
// Dao层代码
public interface ProjectDao
{ public boolean saveNewProject(Project project); ……}
// Dao接口层代码
public class ProjectHibernateDao extends HibernateDaoSupport implements ProjectDao {
public boolean saveNewProject(Project project){
try {this.getHibernateTemplate().save(project);return true;}
catch (Exception e) { e.printStackTrace();}return false;}
}
Spring2对Hibernate3进行了很好的集成,HibernateTemplate提供了一系列的方法来实现数据库表的增删改查操作。通过在ProjectHibernateDao中注入HibernateTemplate,实现保存功能。
3.3 页面设计
页面设计使用jsp+struts2标签,增加项目所用的页面有projectForm.jsp,SaveSuccess.jsp,SaveError.jsp。需要在页面的开始引入<%@taglib uri="/struts-tags" prefix="s"%>。使用struts2标签,在表单提交的时候,可以自动将各标签的属性值映射为类的属性值。
4 结束语
在线项目协作平台,使用了SSH技术架构,使系统的开发效率、扩展性、重用性、易维护性得到提高。该软件平台,有效的规范了软件项目管理的流程,加强了员工之间的沟通与协作,为软件企业提供了一个高效、方便的资源共享、动态监控、指导各软件项目开发管理的信息化工作平台。