基于srus的数据库应用系统的比较研究_第1页
基于srus的数据库应用系统的比较研究_第2页
基于srus的数据库应用系统的比较研究_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于srus的数据库应用系统的比较研究

本文在j2e开发的许多重要应用项目的背景下,介绍并比较了基于struts的j2e数据库访问技术,并提出了基于struts的访问模式。1基于struts的数据库访问技术1.1生成struts/类型后的图如图1所示,用户发出一个*.do的HTTP请求,控制组件接收到这个请求后,首先查找针对这个请求的动作映射,接着检查是否曾创建过相应的动作对象(Action实例),如果没有则生成一个动作对象,控制组件会保存这个动作对象供以后使用.然后调用ActionMapping的方法得到ActionForm对象.最后把ActionForm作为参数传给动作对象的execute方法,这个方法结束之后会返回给控制组件一个ActionForward对象.控制组件接着从这个对象中获取下一个视图的路径和重定向属性.如果为重定向则调用HttpServletResponse的方法来显示下一个视图,否则相继调用RequestDispatcher,ServletContext的方法续传HTTP请求到下一个视图.通过上面的介绍,我们对Struts有了最基本的了解,但是本文的目的不是介绍Struts,而是着重于讨论基于Struts的四种常用数据库访问方法以及性能对比.1.2数据库连接方式JSP直接连接数据库是Java在Web应用中最简单的一种方式.如图2所示,客户端发出查询客户信息的HTTP请求,Action将请求直接转发给JSP页面,在JSP页面中通过JDBC获得数据库连接,查询出客户信息,最后将客户信息返回到客户端浏览器.基于这种方式,程序员编写的代码是最少的,但是缺点很多,例如:1、业务逻辑、控制逻辑和视图都在一个JSP页面中,不易维护,2、每次访问都要重新同数据库建立连接,速度比较慢.1.3数据库分离模式JavaBean直接连接数据库比JSP直接连接数据库要复杂一点,如图3所示,客户端发出查询客户信息的HTTP请求,Action接到请求后,调用数据访问对象DAO(执行数据库访问的JavaBean)的查询客户信息的方法getClientImfor(),在这个方法中,通过JDBC获得数据库连接,查询出客户信息.最后通过控制器(ActionServlet)转发HTTP请求到JSP页面,在JSP页面中仅仅是获得客户信息并显示.基于这种方式,程序员编写的代码比方法一中稍微多一点,但解决了一个很重要的问题,即:实现了业务逻辑、控制逻辑和视图的分离(MVC模式),维护上要比方法一方便的多了.但是缺点也是很明显的,例如:同方法一一样,每次访问都要重新同数据库建立连接,速度比较慢.1.4数据库的连接方式JavaBean借助连接池访问数据库比JavaBean直接连接数据库又要复杂一点,如图4所示,客户端发出查询客户信息的HTTP请求,Action接到请求后,调用数据库访问对象DAO的查询客户信息的方法getClientImfor(),在这个方法中,获得数据库连接不是通过JDBC直接连接数据库,而是利用JNDI名称查找数据源(DataSource),然后通过DataSource定位到连接池(ConnectionPool),并从连接池中取出一个已经存在的连接对象,凭借此对象直接执行数据库操作,查询出客户信息.最后通过控制器(ActionServlet)转发HTTP请求到JSP页面,在JSP页面显示.基于这种方式,程序员编写的代码量和方法二中差不多,但它在性能上却远远优于方法二.首先,它和方法二一样解决了MVC模式问题.同时也解决了方法二中的速度问题,方法二中每次访问时都要重新和数据库建立连接,所以速度慢,本例中每一次访问都是从连接池中获得一个已经存在的连接,省去了建立连接的系统开销.所以在速度上比方法一和方法二快很多.这种访问方法完美的解决了前面提出的两个问题,对于一般的小型Web应用已经足够了.但是对于大型的、分布式的、事务控制比较复杂的Web应用又显的力不从心.1.5系统效果分析SessionBean借助连接池访问数据库比JavaBean借助连接池访问数据库还要复杂一点,如图5所示,客户端发出查询客户信息的HTTP请求,Action接到请求后,调用Java类(Class)的方法,在Java类中凭借JNDI得到SessionBean的远程接口对象.然后调用SessionBean的远程接口方法,在此方法中调用DAO的查询方法,最后在DAO中和方法三一样是通过连接池访问数据库.获得客户信息.再经控制器(ActionServlet)转发HTTP请求到JSP页面,在JSP页面显示.基于这种架构的系统不仅具有JavaBean借助连接池访问数据库的优点,而且对于大型的、分布式的、事务控制比较复杂的Web应用处理的得心应手,为什么会有这种效果呢?原因有以下几点:1.明显符合MVC模式(利于团队开发及维护);2.利用了连接池技术(大大提高了系统响应速度);3.使用了EJB组件(EJB本身就是为了解决大型的、分布式的、复杂事务的、可移植性的Web应用所提出的).所以这种架构是当前开发大型分布式系统所推崇的.2系统性能测试为了直观的反映出性能差异,我们对上面四种访问方式分别做了一个例子,使用了完全一样的开发环境、后台数据库表结构及完全相同的业务功能.2.1数据库webJbuiderX,Weblogic8.1,Oracle9i,Struts1.0.2,其中数据库名和SID都是:orcl,用户名:system,密码:manager.表名:TEST,字段名:ID(varchar2(10)),NAME(varchar2(10)).其中Weblogic8.1服务器数据源JNDI名称是:KHFWDataSource2.2直接连接数据库的连接测试内容,程序中循环调用40次,模拟并发.响应时间如下:JSP直接连接数据库第一次2033ms后来是:2233,2133,2123,2153JavaBean直接连接数据库第一次2524ms后来是:2133,2093,2273,2254JavaBean通过连接池访问数据库第一次822ms后来是:400,420,390,391SessionBean通过连接池访问数据库第一次821ms后来是:521,521,521,5193基于j2ee架构的开发建议从测试结果可以看出:JSP直接连接数据库和JavaBean直接连接数据库性能相当,而JavaBean借助连接池和SessionBean借助连接池访问数据库性能相当,并且后者响应等待时间小于前者5倍左右.我认为主要功劳在连接池上,因为前者每一次访问数据库都要重新和数据库建立连接,这个操作很费系统开销;而后者是直接从连接池中获取一个连接的实例,所以非常快.依据实际项目中的开发经验,对基于J2EE架构的开发工作提出如下建议:(1)推荐使用连接池(上文已经说明原因).(2)恰当使用静态对象,静态方法.这里说的恰当使用就是对一些频繁访问的对象,而且对象中的属性值相对比较固定的情况下.其实从实现核心上看,连接池技术正是通过静态对象实现的,它的原理如下:存在一个静态的集合对象,比如:对象数组(Object),我们把它的长度初始化为10,然后将10个数据库的连接对象(Connection)放入这个对象数组中,在需要连接时,直接从对象数组中找到一个就可以了,这样节省了很多的系统开销.同时可以看出,连接池也符合静态对象的使用原则:频繁访问,连接属性相对固定.(3)使用SessionBean借助连接池访问数据库的方案中,在Web层初始化SessionBean的时候提倡将远程接

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论