`
thinkerAndThinker
  • 浏览: 284690 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

MVC框架比较-struts1、struts2、springMVC

 
阅读更多

 一、性能:  

       看了几篇关于三者的性能比较的文章:(这些文章和测试我并没有做过实验,仅用于参考)

         结论如下:

         注:测试都没有数据库,也没有复杂业务,action和jsp中内容很简单,目的就是测试MVC部分的性能。 

        1.纯JSP的性能应该最高,这不难理解,JSP被编译成Servlet后,没有任何多余的功能,收到请求后直接处理。(这也验证一句经典的话:越原始效率就越高。

        2.struts1的性能是仅次于纯JSP的,由于struts1采用单例Action模式,且本身的封装相比struts2应该说简单很多,虽然开发效率不如struts2,但已经过多年的实践考验,性能稳定高效。 

        3.相比来说struts2的性能就比较差了,这不难理解,struts2之所以开发方便,是由于采用值栈、OGNL表达式、拦截器等技术对请求参数的映射和返回结果进行了处理,另外还采用大量的标签库等,这些都无疑增加了处理的时间。因此降低了效率。在我们实际的项目中,我测试本地工程访问每秒处理请求数只能达到35左右,应该说还有不少可优化的空间。 

        4.很多人认为struts2性能差是因为它的多例Action模式导致的,但我们采用spring管理struts2的Action,并设置按单例方式生成Action实例后,发现其性能有所提高,但并不是很明显。由此可见,多例Action模式并不是struts2性能瓶颈所在。另外,我们在struts2中采用JSP方式访问,发现其性能依旧和没有采用任何MVC框架的纯JSP之间存在好几倍的差距,这又从另一个侧面证实了我们刚才得出结论,struts2性能的瓶颈不在于它的多例Action模式。     

        struts2框架性能很好, 但struts2的标签性能太差了。 要避免使用 struts2标签。 
      Struts2 由于采用了 值栈、OGNL表达式、struts2标签库等,会导致性能下降,很严重的下降。如果避免或减少使用这些,性能还是很好的。 
       Struts2的
 多层拦截器、 多实例action性能都很好,并不是 导致性能问题的原因。 

       5.SpringMVC3的性能略逊于struts1,但基本是同级别的,这让人眼前一亮,springMVC有着不比struts2差的开发效率和解耦度,但性能却是struts2的好几倍,这让我们灰常振奋,SpringMVC无疑又是项目开发的一个好的选择。唯一的问题就是,目前国内使用面还不太多,各方面的参考资料相对较少,上手的话可能要稍微难点。

 

         我的结论:使用这三个框架并不会带来数量级的性能影响,但可以提高开发效率。

 

         参考网址:

            http://elf8848.iteye.com/blog/698217

            http://www.iteye.com/topic/646240?page=2

            http://wenku.baidu.com/view/148d7e34eefdc8d376ee32ac.html

 

            二、架构

           虽然三者都是基于MVC思想的架构框架,但是springMVC是REST架构思想的实现。

          struts1和springMVC的入口都是servlet,而struts2的入口是filter。

          

          三、springMVC与struts2比较:

         1、spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入,struts2实际上是通过setter getter方法与request打交道的,struts2中,一个Action对象对应一个request上下文。   

         2. 参数传递struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。  

         3. 设计思想上,struts更加符合oop(面向对象编程)的编程思想, spring就比较谨慎,在servlet上扩展。  

         4. intercepter的实现机制,struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式。这样导致struts的配置文件量还是比spring mvc大,虽然struts的配置能继承,所以我觉得论使用上来讲,spring mvc使用更加简洁,开发效率Spring MVC确实比struts2高。spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应

          所以说从架构本身上spring3 mvc就容易实现restful url。struts2是类级别的拦截,一个类对应一个request上下文实现restful url要费劲因为struts2 action的一个方法可以对应一个url而其类属性却被所有方法共享这也就无法用注解或其他方式标识其所属方法了。spring3 mvc的方法之间基本上独立的独享request response数据请求数据通过参数获取处理结果通过ModelMap交回给框架方法之间不共享变量而struts2搞的就比较乱虽然方法之间也是独立的但其所有Action变量是共享的这不会影响程序运行却给我们编码读程序时带来麻烦。  

          5. 另外spring3 mvc的验证也是一个亮点,支持JSR303处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。  

 

            四、三者比较

            注:主要是struts1和struts2的比较,由于个人对于springMVC使用的并不多,所以对于其中的一些特性 不敢武断给出结论,因此下表中空出许多,若以后继续研究则会回来补齐,也更希望读者给予指点帮助。谢谢!

           

特性 Struts 1 Struts 2 springMVC
Action类 Struts 1 要求Action 类要扩展自一个抽象基类。Struts 1 的一个共有的问题是面向抽象类编程而不是面向接口编程。 Struts 2 的Action 类实现了一个Action 接口,连同其他接口一起麳实现可选择和自定义的服务。Struts 2 提供一个名叫ActionSupport 的基类麳实现一般使用的接口。虽然,Action 接口不是必须的。任何使用execute 方法的POJO 对象可以被当作Struts 2的Action 对象麳使用。 Controller,不需要继承父类或实现接口,核心控制器是servlet。
线程模型 Struts 1 Action 类是单例类,因为只有一个示例麳控制所有的请求。单例类策略造成了一定的限制幷且给开发带来了额外的烦恼。Action 资源必须是线程安全或者同步的。 Struts 2 Action 对象为每一个请求都实例化对象,所以没有线程安全的问题。(实践中,servlet 容器产生许多丢弃的对象对于每一个请求,多于一个的对象并不影响垃圾收集)
Servlet依赖 Struts 1 的Action 类依赖于servlet API 以为HttpServletRequest和HttpServletResponse 作为参数传给execute 方法当Action 被调用时。 Struts 2 的Action 不和容器有关。Servlet 上下文被表现为简单的Maps ,允许Action被独立的测试。Struts 2 的Action 可以访问最初的请求和相应,如果需要的话。然而,其他的架构元素减少或者排除直接访问HttpServletRequest 或者HttpServletResponse 的需要。
易测性 测试Struts 1 的主要障碍是execute 方法暴露了Servlet API 。第三方的扩展,Struts 测试用例,提供Struts 1 的集合对象。 Struts 2 的Action 可以通过实例化Action 麳测试,设置属性,然后调用方法。依赖注入的支持也是测试变得更简单。
接受输入 Struts 1 使用ActionForm 对象麳捕获输入。象Action 一样,所有的ActionForm 必须扩展基类。因为其他的JavaBean 不能作为ActionForm 使用,开发者经常创建多余的类麳捕获输入。DynaBeans 可以被用来作为替代ActionForm 的类麳创建。但是开发者可以重新描述已经存在的JavaBean 。 Struts 2 Action 属性作为输入属性,排除第二个输入对象的需要。输入属性可能有丰富的对象类型这些类型有他们自己的属性。Action 的属性可以通过标签库麳访问。Struts 2 也支持ActionForm 形式。丰富的对象类型,包含业务或者域对象,可以被当作输入或者输出对象麳使用。模型驱动特性简化标签对POJO 输入对象的引用。 既可以属性作为输入属性,也可以作为参数输入属性。
表达式语言 Struts 1 整和JSTL ,所以它使用JSTL 的表达式语言。表达式语言有基本的图形对象移动,但是相对很弱的集合和被索引的属性支持。 Struts 2 使用JSTL ,但是框架也支持更强大和更灵活的表达式,叫做“对象图形符号语言”(OGNL )。 整合JSTL
将值绑定要视图上 Struts 1 使用标准JSP 机制来绑定对象到页面上下文。 Struts 2 使用“ ValueStack ”技术为了标签库可以不用链接你的视图到对象的表现类型麳访问值。ValueStack 策略允许重用视图。
类型转换 Struts 1 的ActionForm 属性经常都是String 的。Struts 1 使用Commons-Beanutils 麳类型转换。转换每一个类,幷不是为每一个实例配置。 Struts 2 使用OGNL 麳类型转换。框架包含转换器麳为基本的和共同的对象类型和原始类型。
验证 Struts 1 支持手动验证凭借ActionForm 的validate 方法,或者通过扩展的公用验证器。类可以有不同的验证上下文麳未相同的类,但是不能不能包括验证子对象。 Struts 2 支持手动验证凭借validate 方法和XWork 验证框架。Xwork 验证框架支持一连串的验证子属性使用的验证为了属性类的类型和严正上下文而定义。 支持JSR303验证
Action执行的控制 Struts 1 支持独立的请求处理器对于每一个模型,但是所有在模型中的Action必须共享同一个生命周期。 Struts 2 支持在每一个Action 基础上凭借拦截栈创建不同的生命周期。自定义栈可以被创建幷且使用不同的所需 的Action 。 spring mvc是基于方法的设计,在spring3 mvc中,一个方法对应一个request上下文
分享到:
评论

相关推荐

    springmvc-struts

    这些库的组合使用,可以构建一个功能强大的Java Web应用,通过SpringMVC处理请求,Struts(尤其是Struts2)提供额外的MVC功能,MyBatis作为数据访问层处理数据库操作,而JUnit则帮助进行单元测试,确保整个系统的...

    MVC.rar_SpringMVC Struts_java MVC_mvc_spring-aspects-3.2.2_spri

    标题"MVC.rar_SpringMVC_Struts_java_MVC_mvc_spring-aspects-3.2.2_sprin"指的是一个包含多个MVC框架相关的示例项目,主要涉及SpringMVC、Struts以及Java MVC模式。这个压缩包可能是用于教学或演示如何在实际开发中...

    struts1原理,struts2原理,spring mvc原理,struts1和struts2,struts和spring mvc

    总结来说,Struts1、Struts2和Spring MVC各有优劣,选择哪个框架主要取决于项目需求、团队熟悉程度以及对框架特性的偏好。在现代Java Web开发中,Spring MVC因其灵活性和强大的功能,成为更受欢迎的选择。

    SpringMVC与struts2比较

    SpringMVC与struts2比较及技术特点

    springmvc所需jar包.zip

    Spring MVC属于Spring...使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等等。

    韩顺平 Java工程师课程-SpringMVC-v2.pdf

    1. 易用性:SpringMVC 比 Struts2 更易于使用和学习。 2. 高效率:SpringMVC 的性能高于 Struts2。 3. 低耦合设计:SpringMVC 采用低耦合的组件设计方式,具有更好扩展和灵活性。 4. 支持 REST 风格的 URL 请求:...

    吴天雄--SpringMVC笔记.doc

    3. **SpringMVC 与 Struts2 的比较** - 入口不同:SpringMVC 由 Servlet 控制,Struts2 通过 Filter 实现。 - 设计模式:SpringMVC 基于方法设计,而 Struts2 基于类。 - 性能:SpringMVC 因为基于方法设计,可能...

    SpringMVC精品资源--基于maven的多框架和多视图融合技术(Struts1、Struts2、Spring、.zip

    3. **Struts1**:Struts1是早期的MVC框架,它引入了Action类来处理用户请求,并通过配置文件定义Action与视图的映射。虽然现在已经逐渐被SpringMVC和Struts2取代,但理解其工作原理有助于理解MVC模式的历史发展。 4...

    SpringMVC与struts的区别

    SpringMVC是一款优秀的MVC框架,由于其发布3.0版本后,现在有越来越多的团队选择了Spring3 MVC作为MVC的框架。SpringMVC结构简单,灵活性较高,性能也很优秀。下面我们将详细讲解SpringMVC的架构组件和流程。 ...

    Java Web框架例子合集(spring,springmvc,mybatis,struts2,hibernate)

    本合集包含了一些最流行的框架实例:Spring、SpringMVC、MyBatis、Struts2以及Hibernate。以下是对这些框架的详细介绍: 1. **Spring**: Spring 是一个全面的后端开发框架,它提供了依赖注入(DI)和面向切面编程...

    Struts和Spring两种MVC框架究竟有什么不同呢?

    1. **设计模式**:Struts基于Model-2的MVC模式,强调控制器(Action)作为用户请求的入口,通过ActionForm将数据传递到模型(Business Logic)。 2. **配置文件**:Struts依赖XML配置文件(struts-config.xml)来...

    lib-for-SpringMVC-lite

    Spring MVC属于SpringFrameWork...使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts2(一般老项目使用)等。

    maven+(springmvc,mybatis,struts2,hibernate)两两整合

    Struts2是基于MVC设计模式的Action驱动的Web框架,它简化了企业级Java Web应用的开发。整合Struts2与MyBatis或Hibernate时,Struts2的动作类(Action)接收请求并调用Service层,Service层再通过MyBatis或Hibernate...

    Springmvc框架笔记

    #### 六、SpringMVC与Struts2的区别 1. **配置复杂度**: - SpringMVC:配置相对简单,依赖于Spring框架。 - Struts2:配置较复杂,有自己的配置文件和拦截器栈。 2. **扩展性**: - SpringMVC:可以轻松地集成...

    全新mvc的升级 完全仿struts2

    **Struts2框架解析** Struts2是Java Web开发中一个流行的MVC框架,它是Struts1的进化版,提供了许多改进和新特性。Struts2的主要优势包括: 1. **灵活的配置**: Struts2允许开发者使用XML或注解进行配置,提供更...

    spring-webmvc-5.2.6.RELEASE.jar

    spring-webmvc.jar 各个版本,免费下载 spring-webmvc-RELEASE.jar 各个版本,免费下载 如果不能免费下载,关注我,评论区联系我索要!

    struts2,spring4,spring mvc,hibernate4,mybatis的三大框架(三套)

    Struts2、Spring4、Spring MVC、Hibernate4和MyBatis是Java开发中常见的四大框架,它们各自在Web应用开发中扮演着不同的角色。这里,我们将深入探讨这五大框架的核心功能、相互关系以及如何在实际项目中应用。 ...

    springmvc和strut2实现上传下载示例

    在Java Web开发中,Spring MVC和Struts2都是流行的MVC框架,用于构建高效、可维护的Web应用程序。本文将详细讲解如何利用这两个框架实现图片的上传与下载功能。 首先,我们来了解一下Spring MVC和Struts2的基础知识...

    springMVC+struts+hibernate

    Spring MVC、Struts和Hibernate是Java Web开发中的三个重要框架,它们各自负责应用程序的不同层面,协同工作以构建高效的企业级应用。Spring MVC是Spring框架的一部分,主要处理HTTP请求和响应,提供模型-视图-控制...

Global site tag (gtag.js) - Google Analytics