崔 荔, 邵春晖, 崔 磊
(1.长安大学 信息工程学院,陕西 西安 710064;2.西北大学 信息学院,陕西 西安 710064)
随着计算机技术、网络技术、通信技术的迅速发展和人们生活水平及需求的不断提高,目前,网络正以一种前所未有的冲击力在影响着人类的活动,包括人类的生产和日常生活。网络的快速发展,颠覆了传统的信息传播方式,冲破了传统的时间,空间的局限性。极大的改变了人类的物质文化生活水品。新闻发布系统由此应运而生,更大加快了人们信息的接收速度。
针对新闻发布系统的发展现状,文中提出了一种基于J2EE平台的新闻发布系统,在本系统中,利用MVC设计模式,采用struts框架和hibernate框架的整合来进行软件开发,通过两个框架的整合设计,可以给程序带来开发灵活、层次清晰、低耦合、后期易维护的好处。
J2EE是Java2平台企业版,它的核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共同的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,企业内部或外部难以互通的窘境[1]。
基于JAVA的动态Web开发有两种常用的开发模型:Model1和 Model2。
在Model1模式下,整个Web应用几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接做出响应,用少量的JavaBean来处理数据库连接、访问等操作。Model1模式的实现比较简单,适用于快速开发小规模项目,但从工程化的角度看,它的局限性非常明显:JSP页面身兼View和Controller两种角色,将控制逻辑和表现逻辑混杂在一起,从而导致代码的重用性非常低,给应用的可扩展性和可维护性增加了难度。
Model2模式实现了业务逻辑、显示逻辑和控制逻辑的分离,即是基于MVC的框架。MVC框架也就是模型-视图-控制器(Model-View-Controller)设计模式。其中 M代表Model,V代表View,C代表Controller。MVC设计模式的目的是增加代码的可重用性,减少数据描述和应用操作的可耦合度,并提高代码的可读性。同时,也可提高系统的可维护性、可扩展性、灵活性以及封装性。
Struts框架[2]其实是 MVC设计模式在 J2EE Web组件技术上的具体应用,在该框架中,主要是利用MVC设计模式中的模型(M)、视图(V)、控制器(C)3 种不同形式的组件来构建具体的Web应用系统。其中,模型组件由JavaBean承担,完成业务逻辑和数据处理等方面功能;视图组件由JSP页面承担,完成展现前台界面数据的功能;控制器组件由Struts的Action类承担,完成视图组件与模型组件的交互功能。
对于J2EE应用而言,不可避免的涉及数据库的访问操作,而目前的企业应用系统开发中所使用的数据库大部分都是关系型数据库,在传统的Web应用开发中,直接使用JDBC与数据库交互,需要编写大量的SQL语句,修改维护都很不方便,而且破坏了Java的面向对象设计思想,因此需要一种对象与关系型数据库之间的映射机制,以便后期在修改业务逻辑时是修改映射文件而不是Java代码。Hibernate[3]作为目前流行的对象关系映射(Object/Relation Mapping,ORM)框架,对JDBC进行了轻量级的对象封装,使得我们可以以面向对象的思想来操纵数据库,Hibernate可以应用在任何使用JDBC的场合,因此从某种意义上说,Hibernate不仅能够取代JDBC,而且还进一步完善和扩展了JDBC的功能。
MySQL[4]是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL使用的是结构化查询语言 (SQL),SQL是用于访问数据库的最常用标准化语言。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
新闻发布系统[5]是将新闻、信息栏目和业界动态等信息集中起来发布、管理、查询等的一种网站应用程序。网站内容通过后台界面加入数据库,然后通过已有的网页模板格式发布到网站前台界面上。
系统从逻辑上可分为两大模块:前台新闻浏览模块和后台新闻管理模块[6]。前台新闻浏览模块包含用户登录、新闻主页、新闻浏览、新闻访问统计4个子模块。后台新闻管理模块包含用户管理、新闻类型管理、新闻信息管理3个子模块。系统体系结构图如图1所示。
图1 系统体系结构图Fig.1 System structure
考虑到新闻发布系统后期的可维护性与可扩展性,使用Struts与Hibernate框架整合开发能很好的降低程序的耦合性[7]。系统总体上可分为以下5个层次:
1)客户层:运行于客户机器上的浏览器,处理与用户的交互;
2)视图层:视图是应用程序的用户界面,实现模块的外观,它是应用程序的外观表现,可以访问业务逻辑层的数据,而不必关心业务逻辑和控制器的具体情况。它只是作为用户输入数据并进行操作的方式和界面。整个视图层建立在Struts框架基础上,其中Model(模型组件)交由业务逻辑层实现,View(视图组件)由JSP页面组成,Controller(控制器组件)则由Action类与Struts的配置文件struts.xml组成。
3)业务逻辑层:完成系统所需的业务,为视图层提供所需要的业务方法,由JavaBean等构成。由于模型与数据的格式无关,因此一个模型可以为多个视图提供数据,从而增强代码的可重用性。
4)数据持久层:由 Hibernate组成,Hibernate从数据库层中获取数据,然后生成持久对象(Persistent Object,PO),再把PO传给业务逻辑层。
5)数据库层:存放新闻发布系统相关信息数据。
Struts框架是一个基于 Model-View-Controller(MVC)设计模式的应用框架,它将页面显示、业务逻辑处理和数据处理功能在逻辑上分离,从而降低了耦合度。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。本系统的表现层由Struts框架实现,通过配置文件struts.xml将模型、视图、控制器各组件联系起来。控制器负责应用程序的调度,它负责接收从视图层传来的客户请求,然后通过配置文件将不同的请求交予不同的模型去处理,同时将相关数据传递到模型层,模型层对数据处理完毕之后再返回给控制器,控制器将获得的数据转发给视图层,最终由视图层经过浏览器的解析把数据呈献给客户。
以保存新闻操作为例,struts.xml的业务逻辑代码如下:
当管理员在浏览器中点击保存新闻后,该JSP页面会提交一个名为save的请求,struts框架会在struts.xml配置文件中寻找对应的action name,找到后在NewsAction类中找到save方法。save方法进行数据持久化操作后,返回字符串为success时(新闻保存成功),浏览器跳转到success.jsp页面,返回字符串为error时 (新闻保存失败),浏览器则跳转到error.jsp页面。
基于Hibernate框架构建的数据持久层需要创建数据访问对象(DAO)、值对象(VO)、和 Hibernate Mappings映射文件。其中每个VO封装了持久层对象的数据,对应于数据库中的一张表,由一些属性及对应的getter/setter方法组成;DAO用于持久化VO,每个DAO类均定义了查询、插入、更新、删除等数据库操作的基本方法;Hibernate Mappings映射文件告诉Hibernate怎样把对象持久化到关系数据库中。
以持久化新闻操作为例,将一条新闻保存在数据库中需要以下4个步骤:
1)配置 hibernate.cfg.xml文件
在hibernate的配置文件中定义连接数据库的相关信息,部分代码如下所示:
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/cms
123456
org.hibernate.dialect.MySQLDialect
……
2)定义映射文件News.hbm.xml
每个持久化类都要有与之对应的映射文件,映射文件名为“类名.hbm.xml”,这个映射文件定义O/R映射的规则。例如持久化类News包含title、content、click 3个属性,其对应的映射文件News.hbm.xml包含了OR映射所需的元数据,元数据中 包含了持久化类的声明,以及类中各属性到数据库表各字段的映射关系,部分代码如下所示:
3)定义持久化类News.java:
持久化类是指需要被hibernate持久化到数据库中的类,持久对象是一个普通的JavaBean,部分代码如下所示:
public class News{
private int id;//新闻编号
private String title;//新闻标题
private String content;//新闻内容
private int click;//新闻点击次数
public String getId() {return id;}
public void setId(int id) {this.id=id;}
public String getTitle() {return title;}
public void setTitle(String title) {this.title=title;}
public String getContent() {return content;}
public void setContent (String content) {this.content=content;}
public int getClick() {return click;}
public void setClick(int click) {this.click=click;}
}
4)定义持久化操作类NewsDAO.java
Hibernate为Java程序员提供了面向对象的API和接口来操纵数据库,从而避免了在业务逻辑中嵌入大量的JDBC访问和事物控制代码。在开发中通常利用Configuration、SessionFactory、Session、Transaction、Query 这 5 个核心接口对持久 化对象进行存储和事务控制,部分代码如下所示:
public class NewsDAO{
public void save(){
Configuration cfg=new Configuration ();//配 置 和 启 动Hibernate
SessionFactory sf=cfg.configure().buildSessionFactory();//初始化 Hibernate
Session session=sf.getCurrentSession();//创建 session 实例
session.beginTransaction();//事物开始
session.save(news);//保存持久化对象
session.getTransaction().commit();//事务提交
}
}
文中分析了Struts和Hibernate框架实现的原理,结合新闻发布系统提出了一种基于MVC设计模式的Struts与Hibernate整合使用的Web应用系统,着重介绍了框架模型主要层次的技术实现。通过将两种技术结合起来开发J2EE应用,能极大地提高开发效率,使系统更加具有灵活性。
[1]白胜普.J2EE企业级应用测试实践[M].北京:清华大学出版社,2009.
[2]孙卫琴.精通Struts基于MVC的Web设计与开发[M].北京:电子工业出版社,2004.
[3]王国辉,马文强.Hibernate应用开发完全手册[M].北京:人民邮电出版社,2007.
[4]李立功,赵扬.MySQL程序设计与数据库管理[M].北京:科学出版社,2001.
[5]茹蓓,张磊.新闻信息发布管理系统的现状及改进[J].平原大学学报,2004(6):60-61.RU Bei,ZHANG Lei.The current situation and improving of the news announcing and managing system[J].Journal of Pingyuan University,2004(6):60-61.
[6]韩霄.基于J2EE的新闻发布系统的分析与设计[J].网络安全技术与应用,2011(10):61-63.HAN Xiao.Analysis and design of News Releases system based on J2EE[J].Network Security,2011(10):61-63.
[7]董袁泉.基于Hibernate和 Struts框架的J2EE应用开发[J].沙洲职业工学院学报,2011(3):10-13.DONG Yuan-quan.J2EE Application and development based on the hibernate and struts framework[J].Journal of Shazhou Professional Institute of Technology,2011(3):10-13.