`
Brooke
  • 浏览: 1180732 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

ssh框架技术分析(转)

阅读更多
[color=olive][/color]Struts,Hibernate,Spring优缺点
1.struts

struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC的web应用程序的开发。

优点:

Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。使开发者能更深入的了解其内部实现机制。

除此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活动用,能大大提高开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。

关于页面导航,我认为那将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。

另外,struts是业界"标准"(很多成功案例),学习资源丰富,HTML标签非常优秀

缺点:

Taglib是Struts的一大优势,但对于初学者而言,却需要一个持续学习的过程,甚至还会打乱你网页编写的习惯,但是,当你习惯了它时,你会觉得它真的很棒。

Struts将MVC的Controller一分为三,在获得结构更加清晰的同时,也增加了系统的复杂度。

ActionForms使用不便、无法进行单元测试(StrutsTestCase只能用于集成)

【IT168技术文档】

    Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。使开发者能更深入的了解其内部实现机制。 Struts开放源码框架的创建是为了使开发者在构建基于Java Servlet和JavaServer Pages(JSP)技术的Web应用时更加容易。Struts框架为开放者提供了一个统一的标准框架,通过使用Struts作为基础,开发者能够更专注于应用程序的商业逻辑。Struts框架本身是使用Java Servlet和JavaServer Pages技术的一种Model-View-Controller(MVC)实现.

具体来讲,Struts的优点有:

    1. 实现MVC模式,结构清晰,使开发者只关注业务逻辑的实现.

    2. 有丰富的tag可以用 ,Struts的标记库(Taglib),如能灵活动用,则能大大提高开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。

    3. 页面导航.页面导航将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。

    4. 提供Exception处理机制 .

    5. 数据库链接池管理

    6. 支持I18N

    缺点:

    一、 转到展示层时,需要配置forward,每一次转到展示层,相信大多数都是直接转到jsp,而涉及到转向,需要配置forward,如果有十个展示层的jsp,需要配置十次struts,而且还不包括有时候目录、文件变更,需要重新修改forward,注意,每次修改配置之后,要求重新部署整个项目,而tomcate这样的服务器,还必须重新启动服务器,如果业务变更复杂频繁的系统,这样的操作简单不可想象。现在就是这样,几十上百个人同时在线使用我们的系统,大家可以想象一下,我的烦恼有多大。



    二、 Struts 的Action必需是thread-safe方式,它仅仅允许一个实例去处理所有的请求。所以action用到的所有的资源都必需统一同步,这个就引起了线程安全的问题。

    三、 测试不方便. Struts的每个Action都同Web层耦合在一起,这样它的测试依赖于Web容器,单元测试也很难实现。不过有一个Junit的扩展工具Struts TestCase可以实现它的单元测试。

    四、 类型的转换. Struts的FormBean把所有的数据都作为String类型,它可以使用工具Commons-Beanutils进行类型转化。但它的转化都是在Class级别,而且转化的类型是不可配置的。类型转化时的错误信息返回给用户也是非常困难的。

    五、 对Servlet的依赖性过强. Struts处理Action时必需要依赖ServletRequest 和ServletResponse,所有它摆脱不了Servlet容器。

    六、 前端表达式语言方面.Struts集成了JSTL,所以它主要使用JSTL的表达式语言来获取数据。可是JSTL的表达式语言在Collection和索引属性方面处理显得很弱。

    七、 对Action执行的控制困难. Struts创建一个Action,如果想控制它的执行顺序将会非常困难。甚至你要重新去写Servlet来实现你的这个功能需求。

    八、 对Action 执行前和后的处理. Struts处理Action的时候是基于class的hierarchies,很难在action处理前和后进行操作。

    九、 对事件支持不够. 在struts中,实际是一个表单Form对应一个Action类(或DispatchAction),换一句话说:在Struts中实际是一个表单只能对应一个事件,struts这种事件方式称为application event,application event和component event相比是一种粗粒度的事件。

   

    Struts重要的表单对象ActionForm是一种对象,它代表了一种应用,这个对象中至少包含几个字段,这些字段是Jsp页面表单中的input字段,因为一个表单对应一个事件,所以,当我们需要将事件粒度细化到表单中这些字段时,也就是说,一个字段对应一个事件时,单纯使用Struts就不太可能,当然通过结合JavaScript也是可以转弯实现的。


2.Hibernate

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

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

大多数开发机构经常采取创建各自独立的数据持久层。一旦底层的数据结构发生改变,那么修改应用的其余部分使之适应这种改变的代价将是十分巨大的。Hibernate适时的填补了这一空白,它为Java应用提供了一个易用的、高效率的对象关系映射框架。hibernate是个轻量级的持久性框架,功能却非常丰富。

优点:

a.     Hibernate 使用 Java 反射机制 而不是字节码增强程序来实现透明性。

b.     Hibernate 的性能非常好,因为它是个轻量级框架。 映射的灵活性很出色。

c.      它支持各种关系数据库,从一对一到多对多的各种复杂关系。

缺点:它限制您所使用的对象模型。(例如,一个持久性类不能映射到多个表)其独有的界面和可怜的市场份额也让人不安,尽管如此,Hibernate 还是以其强大的发展动力减轻了这些风险。其他的开源持久性框架也有一些,不过都没有 Hibernate 这样有市场冲击力。

上面回贴情绪有点激动,希望谅解,我不是因为有人批评Hibernate而感到不快,而是因为帖子里面的观点实在让我觉得荒谬。不管觉得Hibernate好也吧,不好也吧,我唯一觉得遗憾的是,在中文论坛里面找不到一个对Hibernate的真正高水平的评价。在TSS上有一个关于Hibernate的hot thread,跟了几百贴,其中包括Hibernate作者Gavin和LiDO JDO的CTO,对于JDO和Hibernate有过一些激烈的争论,我曾经耐心的看了一遍,仍然没有发现针对Hibernate真正有力的攻击,那些所谓的攻击无非针对Hibernate没有一个GUI的配置工具,没有商业公司支持,没有标准化等等这些站不住脚的理由。

补充几点我的意见:

一、Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。从这个意义上来说,Hibernate和EJB不是一个范畴的东西,也不存在非此即彼的关系。

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

三、Hibernate不能用来直接和Entity Bean做对比,只有放在整个J2EE项目的框架中才能比较。并且即使是放在软件整体框架中来看,Hibernate也是做为JDBC的替代者出现的,而不是Entity Bean的替代者出现的,让我再列一次我已经列n次的框架结构:

传统的架构:

1) Session Bean <-> Entity Bean <-> DB

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

2) Session Bean <-> DAO <-> JDBC <-> DB

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

3) Session Bean <-> DAO <-> Hibernate <-> DB

就上面3个架构来分析:

1、内存消耗:采用JDBC的架构2无疑是最省内存的,Hibernate的架构3次之,EJB的架构1最差。

2、运行效率:如果JDBC的代码写的非常优化,那么JDBC架构运行效率最高,但是实际项目中,这一点几乎做不到,这需要程序员非常精通JDBC,运用Batch语句,调整PreapredStatement的Batch Size和Fetch Size等参数,以及在必要的情况下采用结果集cache等等。而一般情况下程序员是做不到这一点的。因此Hibernate架构表现出最快的运行效率。EB的架构效率会差的很远。

3、开发效率:在有JBuilder的支持下以及简单的项目,EB架构开发效率最高,JDBC次之,Hibernate最差。但是在大的项目,特别是持久层关系映射很复杂的情况下,Hibernate效率高的惊人,JDBC次之,而EJB架构很可能会失败。

4、分布式,安全检查,集群,负载均衡的支持

由于有SB做为Facade,3个架构没有区别。

四、EJB和Hibernate学习难度在哪里?

EJB的难度在哪里?不在复杂的XML配置文件上,而在于EJB运用稍微不慎,就有严重的性能障碍。所以难在你需要学习很多EJB设计模式来避开性能问题,需要学习App Server和EB的配置来优化EB的运行效率。做EJB的开发工作,程序员的大部分精力都被放到了EB的性能问题上了,反而没有更多的精力关注本身就主要投入精力去考虑的对象持久层的设计上来。

Hibernate难在哪里?不在Hibernate本身的复杂,实际上Hibernate非常的简单,难在Hibernate太灵活了。

当你用EJB来实现持久层的时候,你会发现EB实在是太笨拙了,笨拙到你根本没有什么可以选择的余地,所以你根本就不用花费精力去设计方案,去平衡方案的好坏,去费脑筋考虑选择哪个方案,因为只有唯一的方案摆在你面前,你只能这么做,没得选择。

Hibernate相反,它太灵活了,相同的问题,你至少可以设计出十几种方案来解决,所以特别的犯难,究竟用这个,还是用那个呢?这些方案之间到底有什么区别呢?他们的运行原理有什么不同?运行效率哪个比较好?光是主键生成,就有七八种方案供你选择,你为难不为难?集合属性可以用Set,可以用List,还可以用Bag,到底哪个效率高,你为难不为难?查询可以用iterator,可以用list,哪个好,有什么区别?你为难不为难?复合主键你可以直接在hbm里面配置,也可以自定义CustomerType,哪种比较好些?你为难不为难?对于一个表,你可以选择单一映射一个对象,也可以映射成父子对象,还可以映射成两个1:1的对象,在什么情况下用哪种方案比较好,你为难不为难?

这个列表可以一直开列下去,直到你不想再看下去为止。当你面前摆着无数的眼花缭乱的方案的时候,你会觉得幸福呢?还是悲哀呢?如果你是一个负责的程序员,那么你一定会仔细研究每种方案的区别,每种方案的效率,每种方案的适用场合,你会觉得你已经陷入进去拔不出来了。如果是用EB,你第一秒种就已经做出了决定,根本没得选择,比如说集合属性,你只能用Collection,如果是Hibernate,你会在Bag,List和Set之间来回犹豫不决,甚至搞不清楚的话,程序都没有办法写。


3. Spring

它是一个开源的项目,而且目前非常活跃;它基于IoC(Inversion of Control,反向控制)和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层 中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;它实现了很优雅的MVC,对不同的数据访问技术提供了统一的 接口,采用IoC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现Transcation Managment,等等

优点

a. Spring能有效地组织你的中间层对象,不管你是否选择使用了EJB。如果你仅仅使用了Struts或其他为J2EE的 API特制的framework,Spring致力于解决剩下的问题。

b. Spring能消除在许多工程中常见的对Singleton的过多使用。根据我的经验,这是一个很大的问题,它降低了系统的可测试性和面向对象的程度。

c. 通过一种在不同应用程序和项目间一致的方法来处理配置文件,Spring能消除各种各样自定义格式的属性文件的需要。曾经对某个类要寻找的是哪个魔法般的属性项或系统属性感到不解,为此不得不去读Javadoc甚至源编码?有了Spring,你仅仅需要看看类的JavaBean属性。Inversion of Control的使用(在下面讨论)帮助完成了这种简化。

d.通过把对接口编程而不是对类编程的代价几乎减少到没有,Spring能够促进养成好的编程习惯。

e. Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。

f.      使用Spring构建的应用程序易于单元测试。

g.     Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或local EJBs来实现业务接口,却不会影响调用代码。

h.      Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适用于许多web应用。例如,Spring能使用AOP提供声明性事务管理而不通过EJB容器,如果你仅仅需要与单个数据库打交道,甚至不需要一个JTA实现。

i.     Spring为数据存取提供了一个一致的框架,不论是使用的是JDBC还是O/R mapping产品(如Hibernate)。

Spring确实使你能通过最简单可行的解决办法来解决你的问题。而这是有有很大价值的。

缺点:使用人数不多、jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lbwdi/archive/2008/09/26/2983197.aspx
分享到:
评论

相关推荐

    以SSH框架与jQuery技术为_省略_础的Java_Web开发应用探讨_何晶.pdf

    同时,本文结合时代技术发展的特点,对基于SSH框架的Java-Web数据库配置设计方法进行了研究,并对基于jQuery技术的Java-Web功能优化设计方法进行了探讨。这些研究对SSH框架和jQuery技术的应用于Java-Web的开发应用有着...

    基于SSH框架的音乐网站设计与实现

    本音乐网站基于Java Web技术,采用SSH轻量级框架组合进行设计与实现。网站利用UML建模,结合用户体验进行开发。网站的功能模块主要包括:登录注册、个人信息维护、用户/音乐/新闻管理、排行榜、播放器、个人收藏列表...

    最新-客户关系管理系统-(基于SSH框架+Ajax)

    项目技术和环境简介: Struts1.2、Hibernate3、Spring2.5、Ajax、Dwr、Oracle10g/sql...从需求分析和ER图形基本设计和入手直到编码和测试结束、包含一系列文档! 求有助于对项目整体开发过程的掌握和关键技术的熟悉!

    计算机毕业设计:Java实现的智能家居管理系统(SSH框架,源码+说明+论文,保证可靠运行,附赠计算机答辩PPT模板

    源码的提供使学生可以深入探索系统的实现原理和技术细节,掌握Java编程和SSH框架的精髓。说明文档则对系统的每个模块进行了清晰的解释和说明,帮助学生更好地理解系统的整体架构和功能。毕业论文则为学生提供了一个...

    基于Java web ssh框架+JQuery的学生成绩分析系统设计与实现(源码+数据库+文档+运行视频).zip

    并介绍技术上采用B/S 架构模式开发,MVC架构,MYSQL为后台数据库,TOMCAT为WEB应用服务器,基于JAVA语言开发,软件环境运行平台为WINDOWS系统的学生成绩分析系统的设计与实现。成绩分析系统通过成绩分析功能模块对...

    基于SSH框架的跑步社区网站的设计与实现.caj

    本文以跑步爱好者和体育用品公司的实际应用需求为背景,构建了基于SSH框架的跑步社区网站。本网站主要是为爱好跑步的用户提供一个网上交流的平台,同时也为体育用品公司宣传所推出产品提供一个渠道。本网站提供了现实...

    基于SSH框架煤炭企业物流管理系统的设计与实现

    针对当前煤炭企业物流管理系统存在的问题,提出了利用Struts2-Spring...应用SSH框架设计了系统的架构;介绍了系统的实现。SSH框架能简化煤炭企业物流管理系统的开发,可以有效地降低各层之间的耦合度,提高系统的可维护性。

    基于SSH框架的考试系统的设计与实现.pdf

    采用Struts+Spring+Hibernate,即SSH的三种框架整合的技术来设计和实现在线考试系统,分析设计了考试系统的主要的功能,并给出 了功能模块,同时对主要的技术SSH进行了详细的阐述,简单的说明了数据库的设计。

    基于SSH框架的实验教学平台的研究

    该文通过对Struts,Spring和Hibernate三种框架技术的分析,设计出基于SSH轻量级实验教学平台应用框架。阐述了开发过程中的几个关键技术,并为采用此集成框架进行Web应用系统的设计与开发提供了参考。

    基于JavaSSH框架的洋酒电商销售平台系统.zip

    此设计主要采用JSP开发技术和mysql数据库技术来开发,根据实际需求构建了基于SSH(Struts+Spring+Hibernate)整合框架的电子商务系统,深入了解了轻量级Java EE应用体系结构。最后实现了一个网上购物系统,该系统分为...

    基于SSH架构的在线答疑系统.doc

    2.6.1 SSH框架整合思想 11 2.6.2 SSH框架实现 12 2.7 本章小结 15 第三章 在线答疑系统的需求分析和总体设计 16 3.1 答疑系统主要角色 16 3.2 系统功能描述和总体设计 16 3.2.1 前台系统功能描述及设计 16 3.2.2 ...

    毕业设计-基于JSP的人力外包企业专用HR管理平台ssh+mysql-设计与实现(源码+论文+视频).zip

    按照经典的SSH框架技术和mysql数据库进行了系统架构设计,详细描述了系统的数据库设计,并对系统的主要功能模块进行了详细设计。在此基础上,阐述了系统的实现和测试工作,重点介绍了系统中的主要功能组件和模块的...

    java毕业设计,SSH+EXTJS项目

    SSH框架+Ext技术做前台显示的客户关系管理系统 营销管理:客户开发计划、销售机会管理 二、客户管理:客户信息管理、客户流失管理 三、服务管理:服务创建、服务分配、服务反馈、服务归档 四、统计报表:客户服务...

    java毕业设计,ssh+ext例子

    SSH框架+Ext技术做前台显示的客户关系管理系统 营销管理:客户开发计划、销售机会管理 二、客户管理:客户信息管理、客户流失管理 三、服务管理:服务创建、服务分配、服务反馈、服务归档 四、统计报表:客户服务...

    基于ssh框架的在线考试系统Java_ExamOnlineSystem.zip

    在线考试系统是一种基于互联网的教育技术工具,用于组织、管理和实施在线考试。这种系统通常由软件应用程序支持,为学生和考生提供了在网上参加考试的机会。在线考试系统可以用于各种教育和培训场景,包括学校教育、...

    SSH框架 音乐网站(含简单音乐推荐)J2EE_music.zip

    音乐商城是一个在线平台,用于销售音乐作品,包括数字音乐、CD、唱片、演唱会门票等。以下是音乐商城的一般分析: ...【引流】 ...大数据技术:包括Hadoop、Spark、Hive等用于处理和分析大规模数据集的技术。

    论文研究-基于SSH轻量级框架的电路教学系统设计分析 .pdf

    基于SSH轻量级框架的电路教学系统设计分析,叶庆云,郝伟,在以J2EE为架构的基础上,运用了时下比较流行的而且性能优越的三个开源框架:Struts、Spring和Hibernate,并且运用到了MVC设计模式,将SSH��

    前端用bootstrap框架+ajax异步请求,后台用SSH框架搭建的简单在线考试系统。OnLineTest.zip

    在线考试系统是一种基于互联网的教育技术工具,用于组织、管理和实施在线考试。这种系统通常由软件应用程序支持,为学生和考生提供了在网上参加考试的机会。在线考试系统可以用于各种教育和培训场景,包括学校教育、...

    软件项目投标技术方案.pdf

    软件项目投标技术方案.pdf软件项目投标技术方案.pdf软件项目投标技术方案.pdf软件项目投标技术方案.pdf软件项目投标技术方案.pdf软件项目投标技术方案.pdf软件项目投标技术方案.pdf软件项目投标技术方案.pdf软件项目...

    Java高手真经_应用框架卷_Java_Web核心框架.part1.rar

    本书内容循序渐进,通俗易懂,覆盖了java web开发的最流行框架技术。无论对于java软件设计还是软件开发,本书都是精通开发java web应用的必备的实用手册。 本书适合作为java相关培训机构的教材,也可作为java自学...

Global site tag (gtag.js) - Google Analytics