Struts的优缺点
Struts优点:
(1)实现MVC模式,结构清晰,使开发者只关注业务逻辑的实现。
(2)具有丰富的Tag标签库,如能灵活运用,能大大提高开发效率。
(3)页面导航使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有很大好处。
(4)提供Exception处理机制。
(5)数据库链接池的管理。
(6)支持应用国际化。
Struts缺点:
(1)转到展示层时,需要配置forward,如果有十个展示层的jsp,需要配置十次struts,而且还不包括有时候目录、文件变更,需要重新修改forward,注意,每次修改配置之后,要求重新部署整个项目,而tomcate这样的服务器,还必须重新启动服务器
(2)Struts的Action必需是thread-safe方式,它仅仅允许一个实例去处理所有的请求。所以action用到的所有的资源都必需统一同步,这个就引起了线程安全的问题。
(3)测试不方便。Struts的每个Action都同Web层耦合在一起,这样它的测试依赖于Web容器,单元测试也很难实现。不过有一个Junit的扩展工具Struts TestCase可以实现它的单元测试。
(4)类型的转换。Struts的FormBean把所有的数据都作为String类型,它可以使用工具Commons-Beanutils进行类型转化。但它的转化都是在Class级别,而且转化的类型是不可配置的。类型转化时的错误信息返回给用户也是非常困难的。
(5)对Servlet的依赖性过强。Struts处理Action时必需要依赖ServletRequest和ServletResponse,所有它摆脱不了Servlet容器。
(6)前端表达式语言方面。Struts集成了JSTL,所以它主要使用JSTL的表达式语言来获取数据。可是JSTL的表达式语言在Collection和索引属性方面处理显得很弱。
(7)对Action执行的控制困难。Struts创建一个Action,如果想控制它的执行顺序将会非常困难。甚至你要重新去写Servlet来实现你的这个功能需求。
(8)对Action执行前和后的处理。Struts处理Action的时候是基于class的hierarchies,很难在action处理前和后进行操作。
(9)对事件支持不够。在struts中,实际是一个表单Form对应一个Action类(或DispatchAction),换一句话说:在Struts中实际是一个表单只能对应一个事件,struts这种事件方式称为application event,application event和component event相比是一种粗粒度的事件。
Spring优缺点
Spring优点:
(1)Spring能有效地组织你的中间层对象,不管你是否选择使用了EJB。如果你仅仅使用了Struts或其他为J2EE的API特制的framework,Spring致力于解决剩下的问题。
(2)Spring能消除在许多工程中常见的对Singleton的过多使用。根据我的经验,这是一个很大的问题,它降低了系统的可测试性和面向对象的程度。
(3)通过一种在不同应用程序和项目间一致的方法来处理配置文件,Spring能消除各种各样自定义格式的属性文件的需要。
(4)通过把对接口编程而不是对类编程的代价几乎减少到没有,Spring能够促进养成好的编程习惯。
(5)Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。
(6)使用Spring构建的应用程序易于单元测试。
(7)Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或local EJBs来实现业务接口,却不会影响调用代码。
(8)Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适用于许多web应用。例如,Spring能使用AOP提供声明性事务管理而不通过EJB容器,如果你仅仅需要与单个数据库打交道,甚至不需要一个JTA实现。
(9)Spring为数据存取提供了一个一致的框架,不论是使用的是JDBC还是O/R mapping产品(如Hibernate)。
spring缺点:
jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器
Hibernate优缺点
Hibernate优点
(1)hibernate是基于ORM技术的开源框架,对JDBC进行了轻量级的封装,使用面向对象的思想来操纵数据库。
(2)hibernate提供了session缓存和二级缓存,对于不需要进行复杂查询的系统,性能有提升。
(3)使用Hibernate,移植性好(只要使用Hibernate标准开发,更换数据库时,只需要配置相应的配置文件就可以了,不需要做其它任务的操作)。
(4)Hibernate实现了透明持久化。当保存一个对象时,这个对象不需要继承Hibernate中的任何类、实现任何接口,只是个纯粹的POJO对象。
(5)Hibernate是一个没有侵入性的轻量级框架。
(6)不需要手动编写SQL语句(不需要编辑JDBC),只需要操作相应的对象就可以了,就可以存储、更新、删除、加载对象,提高生产效率。
(7)Hibernate代码测试方便。
Hibernate缺点
(1)hibernate学习成本比较高。
(2)不适合有复杂的sql查询(统计)。
(3)不适合批量操作数据(针对单一对象的增删查改)。