Struts优缺点
优点:
1.开源软件,能更深入的了解其内部实现机制。
2.Taglib标记库,灵活动用,能大大提高开发效率。
3.页面导航使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统
各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者
接手这个项目时,这种优势体现得更加明显。
4.提供Exception处理机制.
5.数据库链接池管理
6.Struts的Action必需是thread-safe方式,它仅仅允许一个实例去处理所
有的请求。所以action用到的所有的资源都必需统一同步,这个就引起了线程安
全的问题。
缺点:
Taglib是Struts的一大优势,但对于初学者而言,却需要一个持续学习的过程,
甚至还会打乱你网页编写的习惯,但是,当你习惯了它时,你会觉得它真的很棒。
Struts将MVC的Controller一分为三,在获得结构更加清晰的同时,也增加了系
统的复杂度。
ActionForms使用不便、无法进行单元测试(StrutsTestCase只能用于集成)
Spring的原理和优点
Spring真正的精华是它的Ioc模式实现的BeanFactory和AOP,它自己在这
个基础上延伸的功能有些画蛇添足。
Ioc模式是什么
可伸缩性和重/轻量,谁是实用系统的架构主选?
Spring
它是一个开源的项目,而且目前非常活跃;它基于IoC(InversionofControl,反
向控制)和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层中
必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某
一个模块;它实现了很优雅的MVC,对不同的数据访问技术提供了统一的接口,
采用IoC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现
TranscationManagment,等等
优点
a.Spring能有效地组织你的中间层对象,不管你是否选择使用了EJB。如果你仅
仅使用了Struts或其他为J2EE的API特制的framework,Spring致力于解决剩
下的问题。
b.Spring能消除在许多工程中常见的对Singleton的过多使用。根据我的经验,
这是一个很大的问题,它降低了系统的可测试性和面向对象的程度。
c. 通过一种在不同应用程序和项目间一致的方法来处理配置文件,Spring能消
除各种各样自定义格式的属性文件的需要。曾经对某个类要寻找的是哪个魔法般
的属性项或系统属性感到不解,为此不得不去读Javadoc甚至源编码?有了
Spring,你仅仅需要看看类的JavaBean属性。InversionofControl的使用(在下
面讨论)帮助完成了这种简化。
d.?通过把对接口编程而不是对类编程的代价几乎减少到没有,Spring能够促进
养成好的编程习惯。
e.Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring
应用中的大多数业务对象没有依赖于Spring。
f. 使用Spring构建的应用程序易于单元测试。
g.Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能
选择用POJOs或localEJBs来实现业务接口,却不会影响调用代码。
h.Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,
它们适用于许多web应用。例如,Spring能使用AOP提供声明性事务管理而不
通过EJB容器,如果你仅仅需要与单个数据库打交道,甚至不需要一个JTA实
现。
i. Spring为数据存取提供了一个一致的框架,不论是使用的是JDBC还是O/R
mapping产品(如Hibernate)。
Spring确实使你能通过最简单可行的解决办法来解决你的问题。而这是有有很大
价值的。
缺点:
使用人数不多、jsp中要写很多代码、控制器过于灵活,缺少一个公用控 制器
Hibernate
优点:
Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架。
Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访
问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。
Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC
驱动,和数据库都有一定的关系,但是和使用它的Java程序,和AppServer没
有任何关系,也不存在兼容性问题。
Hibernate不能用来直接和EntityBean做对比,只有放在整个J2EE项目的框
架中才能比较。并且即使是放在软件整体框架中来看,Hibernate也是做为JDBC
的替代者出现的,而不是EntityBean的替代者出现的,
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常
轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵
数据库。
Hibernate可以应用在任何使用JDBC的场合。
Hibernate使用Java 反射机制而不是字节码增强程序来实现透明性。
Hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。
它支持各种关系数据库,从一对一到多对多的各种复杂关系。
缺点:
它限制您所使用的对象模型。(例如,一个持久性类不能映射到多个表)。
让我再列一次我已经列n次的框架结构:
传统的架构:
1)SessionBean<->EntityBean<->DB
为了解决性能障碍的替代架构:
2)SessionBean<->DAO<->JDBC<->DB
使用Hibernate来提高上面架构的开发效率的架构:
3)SessionBean<->DAO<->Hibernate<->DB
就上面3个架构来分析:
1、内存消耗:采用JDBC的架构2无疑是最省内存的,Hibernate的架构次之,EB
的架构1最差。
2、运行效率:如果JDBC的代码写的非常优化,那么JDBC架构运行效率最高,
但是实际项目中,这一点几乎做不到,这需要程序员非常精通JDBC,运用Batch
语句,调整PreapredStatement的BatchSize和FetchSize等参数,以及在必要的
情况下采用结果集cache等等。而一般情况下程序员是做不到这一点的。因此
Hibernate架构表现出最快的运行效率。EB的架构效率会差的很远。
3、开发效率:在有JBuilder的支持下以及简单的项目,EB架构开发效率最高,
JDBC次之,Hibernate最差。但是在大的项目,特别是持久层关系映射很复杂的
情况下,Hibernate效率高的惊人,JDBC次之,而EB架构很可能会失败。