基于J2EE网络超市平台建设中的框架应用与设计
2010-04-11王红艳朱全银沈建春施晓春
王红艳,朱全银,沈建春,施晓春
(淮阴工学院计算机工程学院,江苏淮安223003)
0 引言
在发达国家,技术服务体系建设是政府公共服务的基本国策之一。随着中国经济与社会的进步与发展,政府的服务能力加强,各级各类部门都在为行业或产业提供相关的服务。江苏省政府就大力支持并建设了国家级科技服务平台2个,省级科技服务平台46个,这些科技服务体系为江苏省科学技术与经济发展起到了非常重要的作用。而面向特色产业的科技网络超市,国内很多省份都有相关的政府投资与政策扶持,如农业科技相关的服务超市就非常普及。目前,江苏省着力打造为民服务的特色产业技术服务网络超市,正是代表着国内相关科技创新服务体系建设的新趋势。
随着互联网技术的进一步发展和普及,电子商务也已经变得非常成熟,在B2B的领域中要有两大技术体系:基于J2 EE的网络开发和基于.NET的网络开发。J2EE以其开放性、灵活性、安全性和技术成熟度在企业级电子商务系统的开发中占据了重要的地位,例如著名的阿里巴巴,因此J2EE技术以它安全、高效以及可移植性得到了越来越广泛的应用和支持。
1 机械电子产业的现状及设计目标分析
1.1 系统现状分析
1.1.1 产用传统营销模式
传统市场营销策略是由迈卡锡教授提出的4P组合,即产品、价格、渠道和促进。这种理论的出发点是企业的利润,而没有将顾客的需求放到与企业的利润同等重要的地位上来。在传统营销模式中,制造商生产出成品后往往通过制造商→批发商→零售商→消费者的营销渠道对外销售产品,产品一般需要经历好几个环节才能到达消费者手中,这样冗长的供应链不仅降低了产品的时效性,而且增加了产品的成本。传统营销的本质就是借助市场了解客户需求,然后生产出他们需要的产品。传统营销的特点:①服务思想急待提升,服务体系不完整;②服务流程长,服务效果差;③一线服务缺乏力度,整体服务形象不醒目[1]。
1.1.2 综合性服务平台
目前,信息化日益成熟,各行各业都在做的信息化技术的变革,但是我国大多数企业信息化程度还是不够。在技术信息、咨询、开发、试验、推广以及产品研制、设计、加工、检测等方面没有得到相互的支持导致资源严重浪费。同样,企业的服务支持也存在着问题,服务支持能够很好的为客户与其他企业提供帮助,能够为企业和库户建立良好的信息通道。
1.2 平台系统分析
基于 J2EE(Java 2 Platform,Enterprise Edition)规范,采用MVC分层设计思想,同时加入国际上使用比较广泛的软件框架,即:数据层的Hibernate框架、控制层的 Struts框架、业务层的Spring框架与显示层的JQuery框架,为平台开发提供了一整套合理的解决方案,不仅使得系统的开发变得更加便捷和高效,而且降低了维护系统的难度和成本。系统的前台采用WEB2.0设计风格,同时局部采用AJAX异步传输模式,使得用户的使用体验有了较大程度的提高。此外平台从语言环境到软件配置,所有环节都是跨平台、跨操作系统的,这种开发方式可以使得系统具有更高的可配置性与兼容性。
1.3 设计目标的关键问题分析
机械电子特色产业科技服务超市(平台)的设计涉及五个方面的问题。
1.3.1 客户端设计
客户端的设计主要是针对系统界面的设计,是用户接触的入口点,界面的亲和力、友好程度会直接影响用户浏览系统时的感受。另外客户端的设计还要方便用户操作,尽量满足客户的浏览需求。
1.3.2 服务器端设计
对于服务器端来说,稳定性,可维护性和安全性是最重要的三个要素,而这些都取决于程序设计的框架,选取合适的框架技术来搭建服务器就成为了问题的核心。
1.3.3 数据库设计
数据库的选择将直接影响系统处理数据的效率,根据用户的数量和并发量选取合适的数据库技术是服务器高效工作的关键因素之一,同时也需要考虑到安全方面和效率方面等多个因素。
1.3.4 系统运行效率
系统运行和响应时间直接影响到用户的感受,因此,一个网站的访问量和受欢迎程度也大致取决于此。所以,必须设计高效的信息处理算法并保证客户端与服务器端网络性能。
1.3.5 系统内部搜索效率
作为一个B2B的应用系统除了提供较快的访问速度外还需提供一个速度快并且效率高的产品搜索功能。在用户查询产品时,能够高效的查询到相关的产品信息,这样才能提高平台的可操作性和用户访问量[2]。
1.4 关键技术及复杂性分析
对于1.3中所述的问题,相应的技术解决方案有:
1.4.1 J2EE 技术
J2EE是一种利用Java 2平台来简化和完善企业级的开发、部署和管理相关复杂问题的一个体系方案。方便数据库存取的JDBC API、CORBA技术以及能够在Internet应用中保护数据的安全模式等,同时更全面的提供了对EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server Pages)以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。J2EE体系结构提供很多中间层的集成框架用来满足无需太多费用而又需要高可用性、高安全性以及可扩展性的应用的需求。通过提供一个的统一的方案平台,J2EE降低了开发系统时的复杂度,同时提供对现有应用程序集成强有力支持,有良好的向导支持打包和部署应用,添加目录支持,增强了安全机制,提高了系统性能[3]。
1.4.2 Unified Modeling Language(UML,统一建模语言)
UML(Unified Modeling Language,统一建模语言)是用来对软件开发系统进行可视化建模的一种语言。UML为面向对象开发系统的产品进行说明、可视化和编制文档的一种标准语言。UML最适于数据建模,业务建模,对象建模,组件建模。UML作为一种模型语言,它使开发人员专注于建立产品的模型和结构,而不是选用什么程序语言和算法实现。当模型建立之后,模型可以被UML工具转化成指定的程序语言代码[4]。
1.4.3 MVC 与 Struts2 框架
MVC(Model-View -Controller),即把一个应用的输入、处理、输出流程按照 Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。MVC减弱了业务逻辑接口和数据接口之间的耦合,让视图层更富于变化。Struts2是MVC的一种实现,它将Servlet和JSP标记用作实现的一部分。Struts2的目的是为了帮助开发人员减少在运用MVC设计模型来开发Web应用的时间。开发人员仍然需要学习和应用该架构,不过Struts2可以完成其中Web开发中一些繁重的工作[5]。
1.4.4 Hibernate 框架
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。Hibernate不但方便了程序员对数据库的操作,而且提供了许多可配置的功能,如一级缓存,二级缓存等[6]。
1.4.5 Spring 框架
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事务。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring是轻量级的,完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。此外,Spring是非侵入式的,Spring应用中的对象不依赖于Spring的特定类。Spring通过一种称作控制反转(IoC)的技术促进了松耦合。Spring允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发。Spring可以将简单的组件配置组合成为复杂的应用。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你[7]。
1.4.6 FreeMarker框架
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在 Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成 XML,JSP或Java文等。使用FreeMarker可以彻底的分离表现层和业务逻辑。使用FreeMarker可以提高开发效率。使用FreeMarker后,作为界面开发人员,只专心创建HTML文件、图像以及Web页面的其他可视化等方面,而程序开发人员则专注于系统实现,负责为页面准备要显示的数据。
2 系统平台设计
2.1 S2SH 架构
对于具有严格分层的J2EE体系,Struts2只能作为其中的Web层解决方案,如果不与其它轻量级框架整合,将严重影响Struts2功能的发挥。另一方面,目前各种轻量级框架往往在处理某一层面的问题时表现突出,而在其它层面上表现一般。例如:Struts2在系统的控制和表现层面上具有很强的优势,但在组件的管理和数据的持久化等层面上存在不足,Spring借其控制反转容器,在组件的管理和组件依赖注入等层面上表现出色;Hibernate可实现对象到关系的映射,允许以面向对象的方式操作关系数据库,在实现数据的持久化层面上表现非凡。因此,将Struts2、Hibernate、Spring进行整合是非常必要的。通过整合,可充分发挥这三种框架的优势,达到优势互补的效果,以进一步提高Web应用系统的重用性、灵活性、维护性和扩展性[8]。
S2SH严格采用三层结构:Web层、业务层和持久层,每层又进一步细分为:
(1)Web层包括视图层和核心控制层,由Struts2构建用于拦截用户的请求,并调用业务层的Action进行处理。
(2)业务层包括业务逻辑控制层、业务逻辑层和数据访问层,由Struts2和Spring整合构建,通过调用业务逻辑组件进行用户业务逻辑请求的处理,并通过数据访问对象(Data Access Object,DAO),调用持久层的组件进行数据持久化操作。
(3)持久层包括数据持久层和数据库层,由Spring和Hibernate整合构建,进行对象到关系数据库的映射操作。
在S2SH中Spring处于核心地位。向上整合Struts2,向下整合Spring。Spring充分利用Ioc容器的特性和功能,通过配置文件,将专注于控制业务逻辑组件和结果视图的Action、专注于业务逻辑实现的业务逻辑对象(Business Object,BO)、专注于数据底层持久化操作的数据访问对象(DAO)、底层数据库内存镜像的会话工厂(SessionFactory)等组件统一在其管理之下,统一管理这些组件生命周期的各个阶段,并利用其依赖注入功能,实现可配置编码的耦合方式,实现 Action与 BO、BO与DAO、DAO与SessionFactory的低耦合,使得系统具有良好的解耦性,从而保证利用S2SH开发的应用系统在重构时不会发生“牵一发而动全身”的效果,提高了系统的可扩展性、可维护性和可复用性。Struts2、Spring、Hibernate整合的顺序如图1所示。
2.2 FreeMarker+Struts2 构架
FreeMarker是一个用Java编写的模板引擎,能够将数据与页面模板分离,根据指定的模板输出多种规格的文本,如HTML、XML、RTF等。
在设计模板时不需要关心所需要的数据源,只需预先在需要填充数据地方预留替换占位符,这样在模板引擎解析模板时就可以动态地加载数据,替换占位符的内容。其工作原理如图1所示。图中模板文件中预留${Cus2tomer.Name}充当占位符,当程序运行时,模板解释引擎解析模板,用程序传递 Customer.Name= ”Tom”的值替换${Customer.Name}部分,这样在终端用户看到的结果页面就是结果输出页面。简单而言,FreeMarker将数据文件和模板文件二者合并后进行输出[9]。
FreeMarker是Struts2默认的模板技术,支持JSP标签,内嵌XML DOM解析,功能更强大,使用方便快捷。此外,FreeMarker支持控制语言、指令语句及内置函数等功能,这样处理 Sequence和Hash对象时具有较强的灵活性。
FreeMarker不支持脚本代码,只提供对数据的分析与访问,这样就避免在模板页面出现业务逻辑代码,使程序的业务逻辑层与视图展现层清晰明确,程序设计员专注于项目业务逻辑开发,而美工人员则专注于模板的设计,使开发人员分工更明确。
此外,使用FreeMarker生成纯文本的静态文件有利于减轻服务器负担。如果JSP页面发布于服务器,接受用户的请求时就需要不断地与服务器进行交互,服务器将耗费较大的硬件资源,而如果用户访问使用FreeMarker生成的纯文本的HTML、XML等文档时,此时服务器占用相对较少的硬件资源,而且对用户的服务器请求响应也尤为迅速。对于具有巨大访问量的服务器而言,页面使用FreeMarker模板输出为纯文本页面,能够极大地提高服务器的响应速度,缩短反应时间,降低对硬件资源的占用率。
2.3 平台结构设计
依照机械电子特色产业科技超市的需求,将系统整体规划为两大部分:页面显示前端和业务逻辑后台,对于整个应用程序来说,所有业务逻辑的资源(包括所有Java代码和系统运行时所需要的XML配置文件)归档在“src”文件夹中,所有的页面显示资源(包括页面,图片资源和脚本资源)归档在系统的根目录下,对于一个体系复杂的平台系统来说,有必要将各类代码和文件统一管理,方便系统的维护和扩展。
页面显示部分主要负责系统UI设计,包括软件界面的整体风格、页面布局、图片元素以及脚本特效,这些文件保存在应用根目录下。平台系统的表现层使用Freemarker模板框架,根目录下user_case用于存放模板文件,由Freemarker生成的静态页面则全部放在根目录下,在user_case下分别针对文件的功能建立了对应的文件夹,js文件夹存放系统的javacript,css用于存放系统用到的css源文件,images文件夹存放图片文件,catalog文件夹存放分类信息的页面源文件,product文件夹存放产品的页面源文件等等,其中系统主页面和错误页面在user_case目录下。另外系统后台文件存在于根目录下的单独文件夹中,页面显示部分文件结构如表1所示。
表1 页面显示部分文件结构
系统的业务逻辑部分主要负责除页面显示以外所有的控制操作,其划分标准按照Java的分层设计原则分为以下几个包:entity包(主要编写实体对象类,用以描述数据库中的表结构)、dao.inf包(保存数据库操作类相应的接口)dao.impl包(用于实现dao.inf包下的接口,主要编写数据库操作代码,与数据库取得连接并进行数据读取和存储操作,impl是 implement的缩写)、facade包(存放系统的控制层类实现门面模式)、action包(数据流转向的Java代码在此包中实现,运用了struts2框架)、validate包(用于系统用户提交数据时的后台验证)、util包(存放系统需要的工具类)。平台系统的业务逻辑部分的文件结构如表2所示。
2.4 jQuery框架
jQuery是一套跨浏览器的JavaScript库,强化HTML与JavaScript之间的操作。由John Resig在2006年1月的BarCamp NYC上释出第一个版本。目前全球有28%的站台使用jQuery,是目前最受欢迎的JavaScript库。
表2 业务逻辑部分文件结构
jQuery能够使用户的HTML页面保持JavaS-cript动作与HTML内容分离,也就是说,不用再在网页里面插入一堆JS代码来调用命令了,只需为网中的元素定义好id即可。除了能够更为方便的使用JS外,jQuery还有一个特点就是具有插件机制,程序员可以去网上下载自己喜欢的一些JS特效的插件,完全降低了开发的难度[9]。
jQuery的使用方法:将下载到的jQuery-1.3.2.min.js文件保存到系统根目录下的js文件夹中,此外将基于jQuery框架的jQuery-ui-1.8rc3.custom.min.js的UI插件文件放置在同样的目录下,这个UI插件提供了许多常用的界面JS方法。
在需要使用jQuery的页面中加入以下代码,即可在页面中使用jQuery框架和插件:
<script type="text/javascript"src="js/jQuery/jQuery -1.3.2.min.js" > < /script>
<script type="text/javascript"src="js/jQueryjQuery-ui-1.8rc3.custom.min.js" > < /script>
使用jQuery的目的主要是规范和简化HTML中的JavaScript代码的编写,使得JavaScript代码具有更高的可维护性和代码重用性。例如,在一份HTML文档中,有一个 id号为“u_account”,class为“u_name”的div层,使用了jQuery,获取这个DIV的操作为:
$("#u_account")或者 $(“.u_name”);
在使用了jQuery后,对HTML页面的控制变得非常简洁。正如jQuery的宗旨一样“写更少的代码,做更多的事”,代码量的减少却没有削减JavaScript对DOM模型的控制能力,jQuery大量封装了具有兼容性的API函数,这些脚本代码可以灵活地实现对页面的显示、动作与特效。
2.5 JSON 数据传输
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。在Ajax应用中可以用于服务器向客户端传送数据,提高了客户端解析的速度并且易于使用。JSON建构于两种结构:
1)“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组(associative array)。
2)值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们,这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能[10]。
2.6 Ajax局部刷新
Ajax即“Asynchronous JavaScript and XML”(异步JavaScript和XML),是由 Jesse James Gaiiett创造的名词,是指一种创建交互式网页应用的网页开发技术。在基于数据的应用中,用户需求的数据,可以从独立于实际网页的服务端取得,并且可以被动态地写入网页中,给缓慢的Web应用体验使之像桌面应用一样。
Struts 2其中的一个重要的功能就是通过Ajax标志增加互动性和灵活性,而且使用这些Ajax标志与普通的Struts标志同样简单。基于不重新发明轮子的原则,Struts 2并没有开发新的Ajax框架,而是使用时下Java EE平台中比较流行的Ajax框架——Dojo和DWR,当然同样可以采用其他的JS框架进行Ajax的操作。在一些出名的程序员们的无私奉献下,开发了Struts 2的JSON插件(Plugin),极大地方便了我们输出JSON结果(Result)。因此采用JSON进行Ajax的数据传输,极大的减少了开发的复杂度[11]。
以系统中会员注册功能为例,Ajax的数据验证方式是:
(1)浏览器收集用户数据,包括用户名、密码。
(2)JavaScript脚本对用户名和密码进行简单的长度、格式等条件的验证。如果不正确,则在页面中即时显示用户数据错误信息,提醒用户修改数据。
(3)信息的简单检查确认无误后,浏览器将收集到的数据整合成JSON数据对象,以异步的方式从后台发送数据给服务器。
(4)服务器接收到数据后,检查数据库,判断是否存在同样的用户名。并将结果反馈给浏览器。
(5)浏览器接收服务器传来的反馈信息,并将结果立即在页面中显示,提示用户数据的合法性。
在采用了jQuery框架以后,使用Ajax技术的门槛也大大降低了,代码也变得更加简洁,jQuery对Ajax的异步操作提供有完善的API接口函数,代码如下:
这段代码中type参数指的传值类型;url参数值为”accountVal.action”(这是一个 Struts定义的action地址)处理请求的地址;dataTpye参数指的是传值的方式,这里为json传值;data参数就是要发送到服务端的数据,success参数是指服务器端成功处理完数据后客服端将要进行的动作;error参数是指Ajax处理发生错误时所做的处理。
3 数据结构设计
系统数据库使用MySQL数据库,支持AIX、FreeBSD、HP - UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统,并且为多种编程语言提供了API。这些编程语言包括 C、C++ 、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。MySQL支持多线程,可以充分利用CPU资源,其优化的SQL查询算法,能够有效地提高查询速度,可以处理拥有上千万条记录的系统要求。系统的数据库表结构如图2所示,共设有13张表,分别为:管理员表(t_admin)、管理员组表(t_admingroup)、产品类型表(t_catalog)、产品信息表(t_product)、产品评论表(t_evaluate)、友情链接表(t_friendlink)、客服信息表(t_clientservice)、会员信息表(t_member)、会员留言表(t_message)、会员-产品收藏关系表(t_mem_pro)、新闻类型表(t_news_topic)、新闻信息表(t_new)、公告表(t_notice)。其中除t_mem_pro多对多关系表不含有主键以外,每张表的ID字段都设置为主键字段,t_admin表中的gid为外键与t_admingroup表为多对一的双向关系;t_product表的cid为外键与t_catalog为多对一的双向关系;t_evaluate表中的pid为外键与t_product为多对一的双向关系;t_message表中mid为外键与t_member表为多对一的双向关系;t_new表中的tid为外键与t_news_topic表为多对一的双向关系;t_mem_pro表为t_member表和t_product表的多对多双向关系生成的关联表;t_friendlink表和t_clientservice表相对来说独立于系统。表的命名方式为:在所有实体表的英文名前加上“t”标识,这样做的好处是防止系统中表的结构被他人利用黑客字典恶意探测,可以有效提高系统数据的安全性。
3.1 Hibernate数据库连接
使用Java连接数据库最常用的方法是使用JDBC(Java Data Base Connectivity)方式,JDBC是一种用于执行数据库SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为JAVA程序员和数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯Java API编写数据库应用程序。
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库[12]。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。Hibernate默认提供多级缓存机制,能够有效提高应用程序的运行效率。此外,Hibernate框架的引入,将数据库设计与Java源代码开发隔离开来,大幅度地降低了系统数据层的耦合程度,Java代码中不再关心数据库的URL地址、数据库的端口、数据表名称等等琐碎的细节,这些数据连接的信息交给Hibernate的XML配置文件,由一系列的配置文件作为数据库与应用程序之间的枢纽,从而将数据层整合起来。在MVC程序设计模式中,Hibernate框架是数据模型层与系统控制层之间的桥梁。
图2 系统数据结构图
Hibernate使用Java的反射机制与数据库取得连接,所有的连接信息在Hibernate的XML配置文件中定义,包括:数据库的URL地址、数据库的用户名/密码、数据库的连接驱动器等信息,以下代码描述了系统的应用程序与MySQL数据库取得联系的基本配置文件。
在XML配置文件中,首先定义数据库的URL地址,对于本地的测试系统,其IP设置为localhost指向本地计算机,端口号设置MySQL安装时默认启动的3306端口,数据库名为test,使用UTF-8字符集编码与数据库连接。数据库的用户名设为root,这个在MySQL安装时可以添加其他用户名。数据库驱动器名的 Java描述为 com.mysql.jdbc.Driver,这是MySQL与Java连接时所调用的JDBC驱动程序入口点,指向一个Class类,驱动器JAR包可以从MySQL官方网站下载得到。上述代码在Hibernate 的配置文件 hibernate.cfg.xml中定义,完成与数据库的基本连接,所有参数在XML配置文档中描述清楚后,工程代码中不再重新定义,达到了Java代码与数据库参数相互隔离的目的,有效地降低了系统耦合度,从而使得数据层的开发与应用层的开发可以同时进行互不影响。
3.2 Hibernate实体映射
在完成数据库连接后,Java代码需要能够操纵数据库中每一张表的记录,在原生态的JDBC程序设计中,JAVA与数据库的通信是面向过程化的SQL语句执行,使用数据库事务将每个SQL命令封装成集合提交给数据库,而引入了Hibernate框架后,对数据库表的操作不再是程式化的SQL命令操作,而是面向对象化的对类的操作。
Hibernat要求数据库中每一张实体表在工程文件中都有一个唯一的Class类与之对应,对表的操作,经过Hibernate框架的处理转变成对类的操作。一张表的一个字段就是一个类中的一个私有属性,对表中记录的添加、删除、修改转变成对类的实例的添加、删除、修改。Hibernate不仅支持标准化的SQL语法,同时支持面向对象的数据查询语言HQL。使用Hibernate框架的应用系统,设计者对数据库的控制完全转化成对工程中类的调用,不仅使得代码简单易懂、层次清晰,而且面向对象的设计思想与人类认知世界的本质是类似的,这使得Hibernate应用程序的开发更符合Java程序员的编程习惯,有效地提高开发效率。
从数据库中的一张表到Java代码的一个类的转化,Hibernate仍然需要使用XML配置文件来维护它们之间的映射关系,所以每一张表对应一个简单 Java对象类(POJO,Plain Ordinary Java Objects),每一次映射都需要一个XML配置文档来帮助Hibernate理解映射过程中的数值类型定义。系统中一共有13张表,其中有12张式实体表,另外1张是多对多的中间表,所以在Hibernate的配置文件hibernate.cfg.xml中共需要描述12张表的映射关系,它们分别是管理员表与Admin类的映射、管理员组与AdminGroup类的映射、产品类型表与Catalog类的映射、客服信息表与ClientService类的映射、产品评论表与Evaluate类的映射、友情链接表与FriendLink类的映射、会员信息表与Member类的映射、新闻信息表与Message类的映射、新闻类型表与New类的映射、产品信息表与Product类的映射,其配置代码如下所示:
<mapping resource="com/me/hibernate/entity/Notice.hbm.xml"/>
上述代码指定了Hibernate启动时加载的配置文件地址,可以看到一共加载了12个XML配置文档,分别对应了12个POJO类。以新闻信息类为例,启动时会加载New.hbm.xml文件,在这个文件中有如下定义:
这段配置信息详细描述了数据库中的t_new表需要以怎样的方式与POJO类进行字段到类的私有成员变量的一一映射关系。表3给出了每个独立字段的映射关系。
表3 New字段映射关系
此外New类还需要维护与新闻类型表之间的 多对一的关系关系,t_new表的tid字段设置为一个外键,其指向了t_news_topic表的ID字段,所以这两张表建立了多对一的关系,故而在Hibernate映射关系中需要用<mamy-to-one>标签来描述描述这样的多对一关系。
与此类似Hibernate启动时还需加载另外11张表的配置信息,以便能够形成JAVA对象控制表中的各个记录。
4 结论
机械电子科技服务超市(平台)在使用J2EE的整体解决方案上集合了Struts、Hibernate、Spring框架,采用MVC三层架构设计。平台系统使用了Tomcat服务器和MySQL数据库运行环境,可以在大多数服务器平台之上稳定运行。系统使用的四个国际标准框架,有效地处理了系统在整体层次上的松耦合状态,系统的每一层都可独立于其他层存在,提高了系统的灵活性和可移植性,适合二次开发和系统扩展,并且使得系统的日后维护成本和难度也大为降低。
[1]孙小英.网络营销与传统营销的探究[J].企业家天地,2009(2):261.
[2]林元元.搜索引擎优化技术(SEO)的应用[J].软件导刊,2009,8(11):147-149.
[3]刘琳琅,吴清江.J2EE在Web电子交易市场开发中的应用研究[J].福建电脑,2003(11):7-9.
[4]伍小荣,伍庆华.J2EE组件的UML建模[J].微计算机应用,2002,23(6):340 -343.
[5]Yanfang Wang,Chunyan Guo,Lei Song.Architecture of E-Commerce Systems Based on J2EE and MVC Pattern[C].ICMeCG,2009:284 -287.
[6]苏芬平,刘更,王海伟.数据库管理系统持久层的Hibernate解决方案[J].计算机工程与设计,2008,29(12):2991-2997.
[7]孙丹.Spring框架下Web应用系统设计与实现[J].电脑编程技巧与维护,2009(10):13-26.
[8]温立辉.SSH框架在软件工程J2EE三层架构体系中的应用[J].科技资讯,2009(31):79-80.
[9] FreeMarker project.Freemarker[EB/OL].http://freemarker.org/index.html,2010.6.1
[10]李峰,刘彦隆.基于 SSH框架与 jQuery技术的 JavaWeb开发应用[J].科技情报开发与经济,2010(6):106-109.
[11]Trac Power.JSON -RPC 1.0.JSON -RPC 1.1 Specification[EB/OL].http://json-rpc.org/wd/JS ON -RPC -1 -1 - WD -20060807.html,2010.6.1
[12]Nana Qi,Zhimin Yang.Research of Struts2 framework and web application based on Ajax[C].ITIME,2009:903-908.