SSH2+AJAX框架在新闻业务系统中的研究与实现
张璐 张建伟 张霖
(新华通讯社通信技术局)
摘要:随着计算机和网络的发展,新闻的时效性要求越来越高。信息技术作为新闻行业的基础工程,其地位的重要性更加凸显。“技术先行”正逐步在新闻行业引领着一种全新的风尚。作为新闻传播的基础工程,如何快速、高效地开发整合现有资源,满足层出不穷的新需求,是每一个IT工程师必须要面对的一个棘手的问题。MVC(Model-View-Controller)模式把系统进行了分层,使系统层次清晰,解耦良好,便于维护及扩展。伴随着WEB2.0的兴起,如何提高用户的体验成为新的命题。针对这些问题,本文主要介绍了基于SSH2(Struts2+Spring+Hibernate)的框架整合方案,并将Ajax技术融入到这个框架中去,设计实现新华社新闻传送系统。 关键字:数据传输 SSH2 Ajax框架 jQuery
1 SSH2框架及Ajax介绍
SSH2是Struts2+Spring+Hibernate三种框架的简称[1][2][3][4],是WEB开发业界最为熟知的JAVA EE Web组件层的开发技术,一种事实上的工业标准。 Struts2和它的上一代Struts1,都是一个用于开发JAVA EE网络应用的开源网络应用程序框架。开发者可以借助他们提供的MVC框架进行web应用的开发。Model是应用程序中和关系数据库打交道的逻辑,View是在浏览器中呈现给用户的页面,Controller在Model和View之间传递信息。开发者只要写一个配置文件,就能将上述三者结合起来。 Spring提供一个面向JAVA企业应用的综合编程框架。它提供的控制反转和面向切面的编程,可以最大程度的减小代码量,减少系统耦合,本系统的审计功能就是通过配置spring从而快速实现的。Spring和Hibernate结合使用,可以通过配置参数实现自动初始化数据库JDBC连接,自动创建事务,开发者只需要实现事务内的业务逻辑即可。 Hibernate是一个开源的对象关系映射框架,它可以将面向对象的领域模型映射到传统的关系数据库中,即将JAVA中的类映射成关系数据库中的表。借助于高层次的对象函数解决了“对象-关系”不匹配的问题。 Ajax应用本质上是一种RIA,即Rich Internet Application,可以理解为运行在B/S结构上的C/S应用。采用标准的浏览器,就能够具有类似C/S应用的操作,让用户有高交互性、高效率响应的体验。RIA代表着目前Web应用的发展趋势。Google地图就采用RIA技术。Ajax采用的大部分都是已经存在的技术[5],如JavaScript、CSS,并不属于特定厂商,是一种真正开源风格的RIA。在Ajax的开发过程中,为了解决重复出现的问题,出现了一些框架,比如JQuery、DWR等,在此次开发中也用到了这些框架。
2 全媒体新闻传送系统需求分析
全媒体新闻传送系统是一个为实现新闻稿件的交互共享和重要稿件的即时传递,而设计开发的基于SSH2架构的全媒体稿件共享传送系统。系统需求分析如图1所示。
该系统除满足用户日常工作需求的快速执行外,还要具备易用性、时效性、安全性、简
单便捷的互动能力,为此,系统应设计实现成为集多媒体稿件上传、下载、分类浏览、稿件确认、评论、打印、新稿提示、历史稿件定期打更、安全审计于一体的B/S架构系统。 该系统具有以下主要功能特征: 1、基于用户名/口令和IP地址的用户登录认证; 2、基于任务的新闻稿件浏览、管理和维护; 3、基于稿件确认状态的业务流程的实现; 4、留言板和来稿提示。
3 系统设计
3.1 系统设计概述
采用上文介绍的SSH2框架和Ajax技术及相关框架,能缩短开发周期,整体上提高项目的易维护程度。 本系统的架构图如图2所示,系统分为表现层、控制层、业务逻辑层、数据访问层和数据持久层。每层都有明确的任务,并且彼此独立。 表现层包含用于提交用户请求及显示模型数据的表单页面,由JSP页面、实现Ajax交互的Javascript函数和展示网站元素布局样式的CSS文件组成。表现层向控制层提交的请求都由Ajax的重要组成部分--XMLHttpRequest或Struts2的action完成。XMLHttpRequest调用的还是Struts2的action,与action区别的是,XMLHttpRequest的返回结果直接被Javascript函数解析,解析后的结果直接呈现页面上,而不需要整个页面的重新载入。 控制层基于Struts2实现。它接受表现层传入的action请求,执行相关业务逻辑,并将执行结果返回给表现层。将业务逻辑层置于Spring容器中,一方面可以使action的配置更为灵活,另一方面通过面向切面的编程,可以避免代码膨胀,利于系统维护和修改。控制层将与数据库交互的请求向下传递给了数据访问层。 数据访问层基于Hibernate框架,它将底层MySQL数据库的表结构映射成对象模型,封装了对持久化对象的增、删、改、查等各种操作,以面向对象的方式提供给上层操作数据库的接口。 系统设计之初就考虑了异常处理的问题,控制层、业务逻辑层和数据访问层中任何一层产生的异常,系统都能在表现层上给予清晰提示,从而帮助开发人员迅速定位问题,及时解决软件缺陷。
3.2 数据库及数据持久层设计
本系统的数据持久层是基于Hibernate实现的,因此在数据库设计过程中除明确业务流程、业务模型外,主要工作是进行持久层内部对象模型之间的面向对象分析。 所谓面向对象分析,就是根据系统需求提取应用中的对象,将这些对象抽象成类,再从这些类中抽取出需要持久化保存的部分。这些需要持久化保存的类就是持久化对象(PO)。系统可根据预先定义好的对象模型关系,通过O/R关系映射自动生成系统表结构及主键、外键约束关系。
3.3 数据访问层DAO组件设计
实现对象化后,通过DAO(Data Access Object)组件可实现对数据库的增、删、改、查操作。引入DAO层组件后,数据库的访问逻辑被封装在DAO组件中,通过调用DAO组件,实现数据库的各种访问。DAO组件包括工厂类、DAO接口、DAO接口的实现类。 借助DAO组件,可使业务逻辑与底层数据库解耦,业务逻辑层无需关注底层数据库的访问操作方式,甚至无需关心底层数据是何种数据库。DAO层分离了数据访问的实现与业务逻辑的实现。
3.4 业务逻辑组件
在DAO组件上层,封装了业务逻辑组件,是系统具体的业务所涉及的各种操作流程。比如:用户登录模块,需要用到用户管理组件,用户访问授权组件等;上述两个组件对底层数据库的访问是通过各自的DAO实现完成的。 借助于DAO层的抽象,系统业务逻辑与数据访问逻辑解耦,大大增强了系统的灵活性。
4 系统实现
4.1 开发环境选择
选择JDK1.6作为Java开发运行环境,Eclipse作为开发工具,Tomcat 7作为中间件服务器,Apache 2.2作为Web 服务器,MySQL作为关系数据库。
4.2 系统实现
借助SSH2框架,根据图3所示流程,笔者所在部门快速实现了全媒体新闻传送系统。以登录功能为例进行说明。 1 设计数据库表结构 登录相关的数据库表有两张:分别是用户表和IP地址表。
表1 用户表
字段 | 类型 | 长度 | 说明 |
Id | Long |
| 自增主键 |
Acl_id | Long |
| 关联的IP地址 |
username | String | 50 | 登录用户名 |
departmentId | String | 50 | 所属部门 |
lastLoginTime | Date |
| 上次登录时间 |
password | String | 50 | 登录密码 |
typeId | Int |
| 普通用户/管理员 |
isEnabled | string | 50 | 是否启用 |
表2 IP地址表
字段 | 类型 | 长度 | 说明 |
Id | Long |
| 自增主键 |
IP | String | 50 | IP地址 |
Position | String | 50 | 办公位置 |
2 登录相关业务逻辑
表3 登录模块代码
序号 | 类名及所在包名 | 说明 |
1 | com.xh.infodelivery.sys.actions.user.LoginAction | Struts2 action:登录 |
3 | com.xh.infodelivery.sys.facade.UserFacade | 业务逻辑层:session管理 |
4 | com.xh.infodelivery.sys.service.AccessCtrlService com.xh.infodelivery.sys.service.impl.AccessCtrlServiceImpl | 业务逻辑层:IP合法性验证 |
5 | com.xh.infodelivery.sys.service.UserService com.xh.infodelivery.sys.service.impl.UserServiceImpl | 业务逻辑层:用户名/口令验证;更改登录时间 |
6 | com.xh.infodelivery.sys.dao.UserDao com.xh.infodelivery.sys.dao.impl.UserDaoImpl | DAO层 |
1)DAO层代码包括对记录的新增、修改、删除、查询等操作
2)Struts2 action中如下:
public String execute() throws Exception { ActionContext ctx = ActionContext.getContext(); HttpServletRequest request = (HttpServletRequest) ctx .get(ServletActionContext.HTTP_REQUEST); String ip = request.getRemoteAddr(); ...... AccessCtrl accessCtrl = null; try{ accessCtrl = accessCtrlService.checkAccess(ip); }catch (DaoException e){ log.error("AccessCtrl find Error in Dao-level!", e); throw e; } if (accessCtrl == null) { throw new ValidationException("非授权IP访问!", ExceptionConstants.ACTION_VALIDATIONCODE); } User user = null; try{ user = findUser(getUsername(), getPassword()); }catch (DaoException e){ throw e; }catch (Exception e){ log.error("Other Error in method [findUser]!", e); throw e; } if (user == null) { throw new ValidationException("用户名/密码不正确!", ExceptionConstants.ACTION_VALIDATIONCODE); } HttpSession s = request.getSession(); User tmp = (User)getSession().get(Constant.USER_KEY); if (tmp != null && tmp.getLoginid().equals(user.getLoginid())){ try{ setIp(ip); setUser(user); userService.updateLastLoginTimeById(user.getId()); return SUCCESS; }catch (DaoException e){ ...... 3) 业务逻辑接口如下: public interface UserService { public User isExist(String userName) throws Exception; public boolean isValidity(User user);//判断是否是合法用户 public boolean verifyPassword(User user, String password); public void updateLastLoginTimeById(Long id) throws Exception;//更改用户最近登录时间 }
4.3 系统展示
登录系统后,显示图5所示页面。系统提供基于新闻任务的多媒体稿件管理模式。“稿件展示区”显示的是新闻任务列表。在系统中首先要建立新闻任务,然后以附件形式为该任务上传多媒体新闻稿件。上传成功后,所有创建的新闻任务在稿件展示区域内分页显示,每个新闻任务包括新闻标题、类型、创建用户和创建时间,便于使用人员浏览查看。 点击某新闻任务,页面动态展开该任务的详细信息,用户可查看该任务内的稿件,如图6所示。 图6所示为展开的新闻任务,该新闻任务中包括一条音频稿件。如果想上传更多稿件,可以点击图6中的“追加附件”按钮,会弹出图7所示的添加附件对话框。用户可以选择本地稿件进行上传。追加稿件成功后,将更新所在任务的最新修改时间。首页会按任务的最新修改时间排序显示任务列表。来稿提示区滚动显示最近4小时上传的稿件。 图5中的留言评论区供用户对稿件发表修改意见,便于用户间的沟通。 系统能够支持包括图片、文本、音频、视频等多种媒体格式文件的单张或批量上传、下载和打印。 系统通过在登录模块中加入IP访问控制和账号/密码认证两种方式来提高访问的安全性。所有操作,包括用户登录、新建任务、上传稿件、稿件确认、打印、留言等等均可在系统日志中记录留痕,从而实现审计功能。
5 系统运行
从需求调研、系统设计到代码编写,以及软硬件安装调试,历时近六个月。目前,全媒体新闻传送系统已经正式上线运行。该系统在十八大会议期间作为稿件传送的重要传输通道,为提高新闻时效发挥了重要作用。 为了最大程度地保证系统运行的稳定性及可靠性,使用了双机部署,两台机器互为主备。系统架构上采用了主备机的数据库同步、文件系统同步配置,可做到数据实时同步。如果单台主机出现问题,可平滑切换到备用系统工作,不影响在线业务的正常运行。
6 结语
在新媒体呈现快速发展趋势的今天,媒体机构快速使用新技术、尝试新应用,在保留既有客户的基础上,更吸引潜在客户,在新一轮的市场环境中发掘并创造新的价值。这些都依赖企业应用系统对市场需求的快速响应和同步。框架可以在软件开发和升级中助开发人员一臂之力,成熟的框架完成了那些基本的、重复的功能,意味使用他的人可以缩减大量开发时间;拥有广大的使用群体,意味有丰富的技术支持资源;开源软件,意味全球软件开发人员都可以在其上修改、完善,所用框架将会持续升级。如果对框架有深入的了解,理解框架中的代码,将使之能更好地为业务服务,尤其是在它不适合业务需要时,可以对其进行封装甚至修改。
7 参考文献
1 孙卫琴.精通 Struts:基于 MVC 的 Java Web 设计与开发, 北京:电子工业出版社, 2005. 2 孙卫琴. 精通 Hibernate:Java 对象持久化技术详解(第 2 版), 北京:电子工业出 版社, 2010. 3 孙卫琴. Tomcat 与 Java Web 开发技术详解(第 2 版),北京:电子工业出版社, 2009. 4 刘中兵. Java Web主流框架整合开发(J2EE+Struts+Hibernate+Spring)(第2版), 北京:电子工业出版社, 2011-3. 5 游丽贞 郭宇春 李纯喜.Ajax引擎的原理和应用.微计算机信息,2006;2
评论 点击评论