技术可行性分析报告.docx

上传人:b****6 文档编号:12905355 上传时间:2023-06-09 格式:DOCX 页数:24 大小:358.60KB
下载 相关 举报
技术可行性分析报告.docx_第1页
第1页 / 共24页
技术可行性分析报告.docx_第2页
第2页 / 共24页
技术可行性分析报告.docx_第3页
第3页 / 共24页
技术可行性分析报告.docx_第4页
第4页 / 共24页
技术可行性分析报告.docx_第5页
第5页 / 共24页
技术可行性分析报告.docx_第6页
第6页 / 共24页
技术可行性分析报告.docx_第7页
第7页 / 共24页
技术可行性分析报告.docx_第8页
第8页 / 共24页
技术可行性分析报告.docx_第9页
第9页 / 共24页
技术可行性分析报告.docx_第10页
第10页 / 共24页
技术可行性分析报告.docx_第11页
第11页 / 共24页
技术可行性分析报告.docx_第12页
第12页 / 共24页
技术可行性分析报告.docx_第13页
第13页 / 共24页
技术可行性分析报告.docx_第14页
第14页 / 共24页
技术可行性分析报告.docx_第15页
第15页 / 共24页
技术可行性分析报告.docx_第16页
第16页 / 共24页
技术可行性分析报告.docx_第17页
第17页 / 共24页
技术可行性分析报告.docx_第18页
第18页 / 共24页
技术可行性分析报告.docx_第19页
第19页 / 共24页
技术可行性分析报告.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

技术可行性分析报告.docx

《技术可行性分析报告.docx》由会员分享,可在线阅读,更多相关《技术可行性分析报告.docx(24页珍藏版)》请在冰点文库上搜索。

技术可行性分析报告.docx

技术可行性分析报告

 

XXXXX系统

技术可行性分析报告

 

项目名称:

项目编号:

编写:

审核:

批准:

日期:

 

 

1项目简介

2系统构成

 

模块名称

模块描述

 

3产品技术平台分析

3.1系统运行环境

网络环境:

硬件平台:

操作系统平台:

数据库平台:

Web服务:

3.2开发环境

网络环境:

硬件平台:

操作系统平台:

数据库平台:

Web服务:

4主要关键技术

主要关键技术

技术解释

J2EE

J2EE(Java2EnterpriseEdition)即Java2企业版,是提供给开发者的采用组件技术构建分布式系统的编程框架。

Struts2框架

Struts2是一个兼容Struts1和WebWork的MVC框架,它是以Webwork的设计思想为核心,吸收了Struts1的优点。

Spring框架

Spring是轻量级的容器,是一个开源框架。

iBatis框架

iBatis是目前流行的轻量级持久层架构,学习上手快,使用灵活、性能高效等特点。

Log4j

Log4j是Apache的一个日志记录的开放源代码项目。

XML解析器

目前流行的XML解析器主要有DOM、SAX、JDOM、DOM4J等。

WebService

WebService也叫XMLWebServiceWebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。

是:

通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。

RMI-IIOP

采用IIOP协议(互联网内部对象请求代理协议)进行javaRMI远程方法访问。

Ajax

AJAX全称为“AsynchronousJavaScriptandXML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。

C语言

C语言是一种高效的结构化语言。

SNMP

简单网络管理协议(SimpleNetworkManagementProtocol)

RRD/JRobin

RRD是RoundRobinDatabase(环状数据库)的缩写。

JRobin是一个使用Java实现的开源的RRD处理程序和绘图引擎。

Flash

Flash是交互式矢量图和Web动画的标准。

JNDI

Java命令与目录服务

JUnit

Java单元测试的工具

DOM

DocumentObjectModel文档对象模型。

CSS

CascadingStyleSheets层叠样式表单。

Maven2

ApacheJakarta项目的高级项目管理工具,比Ant更简单、更先进

5关键技术的解决方案

5.1Struts2框架

ApacheStruts2即是之前大家所熟知的WebWork2。

在经历了几年的各自发展后,WebWork和Struts社区决定合二为一,也即是Struts2。

Struts2是一个兼容Struts1和WebWork的MVC框架,它是以Webwork的设计思想为核心,吸收了Struts1的优点。

Struts2体系结构

Struts2框架的大致处理流程如下:

Ø浏览器发送请求,例如请求/mypage.action、/reports/myreport.pdf等;

Ø核心控制器FilterDispatcher根据请求调用合适的Action;

ØWebWork的拦截器链自动对请求应用通用功能,例如workflow、validation或文件上传等功能;

回调Action的execute方法,该execute方法先获得用户请求参数,然后执行某种数据操作,既可以是将数据保存到数据库,也可以从数据库中检索数据。

实际上Action只是一个控制器,他会调用业务逻辑组件来处理用户的请求。

Struts1.x与Struts2比较

特性

Struts1.x

Struts2

Action类

Struts1.x要求Action类要扩展自一个抽象基类。

Struts1.x的一个共有的问题是面向抽象类编程而不是面向接口编程。

Struts2的Action类实现了一个Action接口,连同其他接口一起来实现可选择和自定义的服务。

Struts2提供一个名叫ActionSupport的基类来实现一般使用的接口。

当然,Action接口不是必须的。

任何使用execute方法的POJO对象可以被当作Struts2的Action对象来使用。

线程模型

Struts1.xAction类是单例类,因为只有一个实例来控制所有的请求。

单例类策略造成了一定的限制,并且给开发带来了额外的烦恼。

Action资源必须是线程安全或者同步的。

Struts2Action对象为每一个请求都实例化对象,所以没有线程安全的问题。

(实践中,servlet容器给每一个请求产生许多丟弃的对象,并且不会导致性能和垃圾回收问题)。

Servlet依赖

Struts1.x的Action类依赖于servletAPI,当Action被调用时,以HttpServletRequest和HttpServletResponse作为参数传给execute方法。

Struts2的Action和容器无关。

Servlet上下文被表现为简单的Maps,允许Action被独立的测试。

Struts2的Action可以访问最初的请求(如果需要的话)。

但是,尽可能避免或排除其他元素直接访问HttpServletRequest或HttpServletResponse。

易测性

测试Struts1.x的主要问题是execute方法暴露了ServletAPI这使得测试要依赖于容器)。

第三方的扩展,如StrutsTestCase,提供了一套Struts1的模拟对象(来进行测试)。

Struts2的Action可以通过初始化、设置属性、调用方法来测试。

依赖注入的支持也是测试变得更简单。

捕获输入

Struts1.x使用ActionForm对象来捕获输入。

象Action一样,所有的ActionForm必须扩展基类。

因为其他的JavaBean不能作为ActionForm使用,开发者经常创建多余的类来捕获输入。

DynaBeans可以被用来作为替代ActionForm的类来创建。

但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。

Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。

输入属性可能是有自己(子)属性的rich对象类型。

Action属性能够通过web页面上的taglibs访问。

Struts2也支持ActionForm模式。

rich对象类型,包括业务对象,能够用作输入/输出对象。

这种ModelDriven特性简化了taglib对POJO输入对象的引用。

表达式语言

Struts1.x整合JSTL,所以它使用JSTL的表达式语言。

表达式语言有基本的图形对象移动,但是对集合和索引属性的支持很弱。

Struts2使用JSTL,但是也支持一个更强大和灵活的表达式语言--"ObjectGraphNotationLanguage"(OGNL)。

将值绑定到页面

Struts1.x使用标准JSP机制来绑定对象到页面上下文。

Struts2使用“ValueStack”技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。

ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。

类型转换

Struts1.x的ActionForm属性经常都是String。

Struts1.x使用Commons-Beanutils来进行类型转换。

转换每一个类,而不是为每一个实例配置。

Struts2使用OGNL进行类型转换。

提供基本和常用对象的转换器。

验证

Struts1.x支持在ActionForm的validate方法中手动校验,或者通过CommonsValidator的扩展来校验。

同一个类可以有不同的校验内容,但不能校验子对象。

Struts2支持通过validate方法和XWork校验框架来进行校验。

XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性

Action执行控制

Struts1.x支持每一个模块有单独的RequestProcessors(生命周期),但是模块中的所有Action必须共享相同的生命周期。

Struts2支持通过拦截器堆栈(InterceptorStacks)为每一个Action创建不同的生命周期。

堆栈能够根据需要和不同的Action一起使用。

总结:

根据struts1.x和struts2.0的对比,struts2.0提供的方法更灵活更易于开发,所以决定采用struts2.0作为教学机管理系统2.0的前台框架。

5.2持久层框架

持久层框架目前比较流行的有Hibernate、ibatis等,下面主要对这两种框架进行介绍。

Hibernate

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

一、Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和AppServer,和EJB没有什么必然的联系。

Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。

从这个意义上来说,Hibernate和EB不是一个范畴的东西,也不存在非此即彼的关系。

二、Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和AppServer没有任何关系,也不存在兼容性问题。

三、Hibernate不能用来直接和EntityBean做对比,只有放在整个J2EE项目的框架中才能比较。

并且即使是放在软件整体框架中来看,Hibernate也是做为JDBC的替代者出现的,而不是EntityBean的替代者出现的。

传统的架构:

1)SessionBean<->EntityBean<->DB

为了解决性能障碍的替代架构:

2)SessionBean<->DAO<->JDBC<->DB

使用Hibernate来提高上面架构的开发效率的架构:

3)SessionBean<->DAO<->Hibernate<->DB

就上面3个架构来分析:

✧内存消耗:

采用JDBC的架构2无疑是最省内存的,Hibernate的架构3次之,EB的架构1最差。

✧运行效率:

如果JDBC的代码写的非常优化,那么JDBC架构运行效率最高,但是实际项目中,这一点几乎做不到,这需要程序员非常精通JDBC,运用Batch语句,调整PreapredStatement的BatchSize和FetchSize等参数,以及在必要的情况下采用结果集cache等等。

而一般情况下程序员是做不到这一点的。

因此Hibernate架构表现出最快的运行效率。

EB的架构效率会差的很远。

✧开发效率:

在有JBuilder的支持下以及简单的项目,EB架构开发效率最高,JDBC次之,Hibernate最差。

但是在大的项目,特别是持久层关系映射很复杂的情况下,Hibernate效率高的惊人,JDBC次之,而EB架构很可能会失败。

✧分布式,安全检查,集群,负载均衡的支持由于有SB做为Facade,3个架构没有区别。

Ibatis

使用ibatis提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate实现ORM而言基本一致,而对于具体的数据操作,Hibernate会自动生成SQL语句,而ibatis则要求开发者编写具体的SQL语句。

相对Hibernate等“全自动”ORM机制而言,ibatis以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。

Hibernate与ibatis优缺点比较:

1.iBATIS非常简单易学,Hibernate相对较复杂,门槛较高。

2.二者都是比较优秀的开源产品

3.当系统属于二次开发,无法对数据库结构做到控制和修改,那iBATIS的灵活性将比Hibernate更适合

4.系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。

在这种情况下iBATIS会有更好的可控性和表现。

5.iBATIS需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。

同样的需求,iBATIS的工作量比Hibernate要大很多。

类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sqlmapping的地方一一修改。

6.以数据库字段一一对应映射得到的PO和Hibernte这种对象化映射得到的PO是截然不同的,本质区别在于这种PO是扁平化的,不像Hibernate映射的PO是可以表达立体的对象继承,聚合等等关系的,这将会直接影响到你的整个软件系统的设计思路。

7.Hibernate现在已经是主流O/RMapping框架,从文档的丰富性,产品的完善性,版本的开发速度都要强于iBATIS

总结:

根据本项目对sql优化灵活性的要求,选择ibatis作为数据持久层框架。

5.3Ajax技术

Ajax概述:

Ajax不是一种技术。

实际上,它由几种蓬勃发展的技术以新的强大方式组合而成。

Ajax包含:

●XHTML和CSS

●使用文档对象模型(DocumentObjectModel)作动态显示和交互

●使用XML和XSLT做数据交互和操作

●使用XMLHttpRequest进行异步数据接收

●使用JavaScript将它们绑定在一起

  传统的web应用模型工作起来就象这样:

大部分界面上的用户动作触发一个连接到Web服务器的HTTP请求。

  服务器完成一些处理---接收数据,处理计算,再访问其它的数据库系统,最后返回一个HTML页面到客户端。

这是一个老套的模式,自采用超文本作为web使用以来,一直都这样用,但看过《TheElementsofUserExperience》的读者一定知道,是什么限制了Web界面没有桌面软件那么好用。

  

传统Web应用模型(左)与Ajax模型的比较(右).

  这种旧的途径让我们认识到了许多技术,但它不会产生很好的用户体验。

当服务器正在处理自己的事情的时候,用户在做什么?

没错,等待。

每一个动作,用户都要等待。

  很明显,如果我们按桌面程序的思维设计Web应用,我们不愿意让用户总是等待。

当界面加载后,为什么还要让用户每次再花一半的时间从服务取数据?

实际上,为什么老是让用户看到程序去服务器取数据呢?

  Ajax如何不同凡响

  通过在用户和服务器之间引入一个Ajax引擎,可以消除Web的开始-停止-开始-停止这样的交互过程.它就像增加了一层机制到程序中,使它响应更灵敏,而它的确做到了这一点。

不像加载一个页面一样,在会话的开始,浏览器加载了一个Ajax引擎---采用JavaScript编写并且通常在一个隐藏frame中。

这个引擎负责绘制用户界面以及与服务器端通讯。

Ajax引擎允许用异步的方式实现用户与程序的交互--不用等待服务器的通讯。

所以用户再不不用打开一个空白窗口,看到等待光标不断的转,等待服务器完成后再响应。

使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。

这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息。

传统的web应用允许用户填写表单(form),当提交表单时就向发送一个请求。

服务器接收并处理传来的表单,然後返回一个新的。

这个做法浪费了许多带宽,因为在前後两个页面中的大部分HTML代码往往是相同的。

由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的。

这导致了用户界面的响应比本地应用慢得多。

与此不同,AJAX应用可以仅向服务器发送并取回必需的数据,它使用SOAP或其它一些基于XML的webservice接口,并在客户端采用JavaScript处理来自服务器的响应。

因为在服务器和浏览器之间交换的数据大量减少,结果我们就能看到响应更快的应用。

同时很多的处理工作可以在发出请求的客户端机器上完成,所以Web服务器的处理时间也减少了。

Ajax应用程序的优势在于:

✧通过异步模式,提升了用户体验

✧优化了和服务器之间的传输,减少不必要的数据往返,减少了带宽占用

✧Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载。

Ajax开发框架:

毫无疑问,Ajax作为当前最火爆的技术之一,其优秀的框架层出不穷。

Prototype、Dwr、Dojo、JQuery、YUi……都是非常出色的产品。

1.JQuery

  特点:

短小精悍(19k),接口设计得精妙(自然语言的风格),与程序思路配合精密。

极大限度地体现了javascript的特性;支持xpath查询,dom1-3,轻松选择需要的元素;css支持;简单的动画实现,支持自定义动画;支持插件开发,现有插件多;完整的api文档以及范例,易学;拥有官方UI程序供使用,效果好。

2.Yui

  特点:

Yahoo发布的AJAX组件库,是一个包含了各个方面,从工具类库到通讯,到UI组件的综合性JS库。

YUL的最大优势在于文档非常齐全,而且有Yahoo的支持,缺点是库目前还不全,功能也不强大。

3.Ext

  特点:

Ext来自于对YUI的扩展,扩展後功能和界面都有了很大的提高。

初期仅仅是对YUI的对话框扩展,后来逐渐有了自己的特色,深受网友的喜爱。

Ext封装了很多组件用于UI的展示,Ext的所有组件都是扩展于Ext.Component,而后子类扩展和集成形成了一个单根的组件树.

4.Prototype

  特点:

一个非常优雅的JS库,定义了JS的面向对象扩展,DOM操作API,事件等等,之上还有rico/script.aculo.us实现一些JS组件功能和效果(尚不够完善),以prototype为核心,形成了一个外围的各种各样的JS扩展库,是相当有前途的JS底层框架,突出特点就是非常易学易用,门槛很低,常常是一两行JS代码就可以搞定一个相关的功能。

同时它也是RoR集成的AJAXJS库。

5.Dojo

  特点:

Dojo包括了Javascript本身的语言扩展,以及各个方面的工具类库,和比较完善的UI组件库;Dojo设计的包加载机制(PackageSystem)和模块化(Libraries)的结构,能保持更好的扩展性,提高执行性能,减轻了用户开发的工作量,并保持一定的灵活性(用户可以自己编写扩展);Dojo官方网站有着丰富的学习资源;专业的开发团队,可以保证更新速度及质量。

6.Mootools

  特点:

小巧高效,完整下载36k;模块化设计,合理规范,优雅的OOP风格;创新的下载过程,可以跟据自己的需要勾选相应的模块下载,BuildYourOwnFramework;Effects模块(moo.fx)轻量高效,可以实现优雅、可定制、easing的动画;完整的API文档,丰富的范例。

7.Dwr

  特点:

把java类转化为javascript类由dwr自动完成,只需简单的配置;应用起来极其简单。

开发者不要该服务器代码就可以集成;容易测试。

和webwork一样,隐藏的http协议;强扩展性。

例如与spring集成,只需修改一点代码;性能。

就与jason等简单比较,dwr性能可能是最好的。

8.Buffalo

  特点:

国人开发的Ajax框架。

定义了Web远程调用的传输基础,并且将远程调用对象完整的序列化到了本地,成为可以被JavaScript编程触及的对象。

Buffalo中的重要组件-BuffaloBinding,提供了将JavaScript对象绑定到HTML元素的能力。

这种绑定将是无侵入的,只需要在HTML元素中加入若干个不影响排版的属性,即可将数据与界面绑定。

9.Qooxdoo

  特点:

不通过常规的HTML来构造页面,完全使用JS以类似VB/Delphi风格的编程方式构造WebGUI界面,比较适合内网面向C/S风格的web应用,而不适合面向Internet的界面多变风格的应用。

10.Spry

特点:

设计规范,功能全面,文档丰富,面向设计人员而不是开发人员。

与其它一些Ajax框架相比,它的服务器端的技术不是很可靠。

它依赖于XML,XML可以很容易被Spry组件接受。

总结:

根据本项目对页面性能要求,要选择性能高的框架jquery作为页面js库,同时选择ext作为皮肤js库。

5.4XML解析器

目前流行的XML解析器主要有DOM、SAX、JDOM、DOM4J等,下面我们就这四种解析器进行分析和比较:

1、DOM

  DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。

DOM是以层次结构组织的节点或信息片断的集合。

这个层次结构允许开发人员在树中寻找特定信息。

分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。

(所以其劣势就是基与大文件的加载速度很慢,因为它是需要全部加载后才操作的).

  用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigationAPIs访问所需的树节点来完成任务。

可以很容易的添加和修改树中的元素。

然而由于使用DOM解析器的时候需要处理整个xml(标准化越来越近了)文档,所以对性能和内存的要求比较高,尤其是遇到很大的xml(标准化越来越近了)文件的时候。

由于它的遍历能力,DOM解析器常用于xml(标准化越来越近了)文档需要频繁的改变的服务中。

  另一方面,对于特别大的文档,解析和加载整个文档可能很慢且很耗资源,因此使用其他手段来处理这样的数据会更好。

这些基于事件的模型,比如SAX。

2、  SAX

SAX解析器采用了基于事件的模型,它在解析xml(标准化越来越近了)文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。

这种处理的优点非常类似于流媒体的优点。

分析能够立即开始,而不是等待所有的数据被处理。

而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中,对内存的要求通常会比较低。

这对于大型文档来说是个巨大的优点。

事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。

特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2