`
lvjun106
  • 浏览: 436219 次
  • 性别: Icon_minigender_1
  • 来自: 芜湖
社区版块
存档分类
最新评论

SpringMVC与Struts2的对比

 
阅读更多

[转:http://blog.csdn.net/gstormspire/article/details/8239182]

 

下面这些东西基本都是我从网上粘贴过来的,没有那么多耐心和时间一个字一个字的敲了,但是基本能表明我选择SpringMVC的思路和原因。

把这张图放在这里,我是想说SpringMVC和Struts2真的是不一样的,虽然在都有着核心分发器等相同的功能组件(这些由MVC模式本身决定的)。

 

为什么SpringMVC会赢得最后的胜利呢?谈几点我自己的看法:

 

第一、MVC框架的出现是为了将URL从HTTP的世界中映射到JAVA世界中,这是MVC框架的核心功能。而在URL这一点SpringMVC无疑更加优雅。

 

第二、从设计实现角度来说,我觉得SpringMVC更加清晰。即使我们去对比Struts2的原理图和SpringMVC的类图,它依然很让人困惑,远没有SpringMVC更加直观:

 

 

            

SpringMVC设计思路:将整个处理流程规范化,并把每一个处理步骤分派到不同的组件中进行处理。

这个方案实际上涉及到两个方面:

处理流程规范化 —— 将处理流程划分为若干个步骤(任务),并使用一条明确的逻辑主线将所有的步骤串联起来

处理流程组件化 —— 将处理流程中的每一个步骤(任务)都定义为接口,并为每个接口赋予不同的实现模式

处理流程规范化是目的,对于处理过程的步骤划分和流程定义则是手段。因而处理流程规范化的首要内容就是考虑一个通用的Servlet响应程序大致应该包含的逻辑步骤:

步骤1—— 对Http请求进行初步处理,查找与之对应的Controller处理类(方法)   ——HandlerMapping

步骤2—— 调用相应的Controller处理类(方法)完成业务逻辑                    ——HandlerAdapter

步骤3—— 对Controller处理类(方法)调用时可能发生的异常进行处理            ——HandlerExceptionResolver

步骤4—— 根据Controller处理类(方法)的调用结果,进行Http响应处理       ——ViewResolver

 

 

正是这基于组件、接口的设计,支持了SpringMVC的另一个特性:行为的可扩展性。

 

第三、设计原则更加明朗。

    【Open for extension /closed for modification】

这条重要的设计原则被写在了Spring官方的reference中SpringMVC章节的起始段: A key design principle in SpringWeb MVC and in Spring in general is the “Open for extension, closed for modification” principle.

并且重点很好地体现在SpringMVC的实现当中,可以扩展,但却不能改变。我曾经扩展过Spring的IOC、AOP功能,这一点SpringMVC应该和Spring一脉相承。

 

第四、组件化的设计方案和特定的设计原则让SpringMVC形散神聚。

  •  —— SpringMVC总是沿着一条固定的逻辑主线运行
  •  —— SpringMVC却拥有多种不同的行为模式

SpringMVC是一个基于组件的开发框架,组件的不同实现体系构成了“形”;组件的逻辑串联构成了“神”。因此,“形散神不散”: SpringMVC的逻辑主线始终不变,而行为模式却可以多种多样。

第五、更加贴合Web发展的趋势,这个更加虚了,不再展开说这个 问题了。

 

第六、技术上的放缓导致了程序员对Struts2失去了热情,导致SpringMVC依靠自身的努力和Spring的口碑,逐渐显露了自身的优势和特点。

 

为什么SpringMVC会赢得最后的胜利呢?最后,我们不妨想一想Struts2是怎样流行起来的!

我自己是从Struts1用过来的,后来Struts1的问题很明显了,开源社区出现了很多的MVC框架,最为突出的是Webwork2。

Webwork2探索了一条与传统Servlet模型不同的解决方案,逐渐被大家熟识和理解,不断发展并得到了广大程序员的认可。它以优秀的设计思想和灵活的实现,吸引了大批的Web层开发人员投入它的 怀抱。

Apache社区与Opensymphony宣布未来的Struts项目将与Webwork2项目合并,并联合推出Struts2。

Struts2能够在一个相当长的时间段内占据开发市场主导地位的重要原因在于其技术上的领先优势。而这一技术上的领先优势,突出表现为对Controller的彻底改造:

public class UserController {

    private User user

    public String execute() {

        // 这里加入业务逻辑代码

       return "success";

    }

}

 

从上面的代码中,我们可以看到Webwork2 /Struts2对于Controller最大的改造有两点:

  • 在Controller中彻底杜绝引入HttpServletRequest或者HttpServletResponse这样的原生Servlet对象。
  • 将请求参数和响应数据都从响应方法中剥离到了Controller中的属性变量。

这两大改造被看作是框架的神来之笔。因为通过这一改造,整个Controller类彻底与Web容器解耦,可以方便地进行单元测试。而摆脱了Servlet束缚的Controller,也为整个编程模型赋予了全新的定义。从引入新的编程元素的角度来说,Webwork2 / Struts2无疑也是成功的。因为在传统Servlet模式中的禁地Controller中的属性变量被合理利用了起来作为请求处理过程中的数据部分。这样的改造不仅使得表达式引擎能够得到最大限度的发挥,同时使得整个Controller看起来更像是一个POJO。因而,这种表现形态被笔者冠以的名称 是:POJO实现模式。POJO实现模式是一种具有革命性意义的模式,因为它能够把解耦合这样一个观点发挥到极致。从面向对象的角度来看,POJO模式无疑也是所有程序员所追求的一个目标。这也就是Webwork2 /Struts2那么多年来经久不衰的一个重要原因。

所以,我们看到第一条原因是Struts2依靠技术上的革新赢得了程序员的青睐。但是,这些年来Struts2在技术革新上的作为似乎步子就迈得比较小。我们可以看到,在JDK1.5普及之后,Annotation作为一种新兴的Java语法,逐渐 被大家熟知和应用。这一点上SpringMVC紧跟了时代的潮流,直接用于请求-响应的映射。而Struts2却迟迟无法在单一配置源的问题上形成突破。 当然,这只是技术革新上的一个简单的例子,其他的例子还有很多。

至少给人的感觉是这样的。在这一点上Struts并不是很沾光,因为Spring的口碑和影响力也客观程度上加深了大家对SpirngMVC是技术领导者的印象。

分享到:
评论

相关推荐

    springmvc、struts2区别、mybatis、hibernate区别

    struts2介绍、和springmvc对比,mybatis介绍和hibernate对比

    SpringMVC与hibernate整合12实例

    11. SpringMVC与Struts2对比:分析两种MVC框架的优缺点,理解其工作原理差异。 12. 性能优化:探讨缓存机制,如二级缓存的使用,提高系统性能。 以上实例涵盖了SpringMVC和Hibernate整合的各个方面,对于初学者和...

    简单了解SpringMVC与Struts2的区别

    SpringMVC与Struts2的区别 SpringMVC和Struts2都是流行的Java Web框架,但它们之间存在着许多区别。下面我们将对比SpringMVC和Struts2的主要区别,帮助开发者更好地选择合适的框架。 首先,Struts2是类级别的拦截...

    三歪教你学SpringMVC.docx

    #### 二、SpringMVC与Struts2对比 **2.1 Struts2的不足** - **安全性问题**:存在已知的安全漏洞。 - **性能较低**:处理请求的速度慢于SpringMVC。 - **配置繁琐**:需要大量的XML配置文件。 - **重量级**:相比...

    SpringMVC基础篇笔记.docx基础篇笔记.docx

    #### 十五、SpringMVC与Struts2对比 - **设计理念**:SpringMVC更侧重于解耦和灵活性,而Struts2更侧重于统一的架构和流程控制。 - **性能**:SpringMVC由于其轻量级的特点,在性能上通常优于Struts2。 - **扩展性**...

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

    **Struts2与Spring MVC比较:** 1. **灵活性**:Spring MVC允许更多的自定义,如自定义拦截器、视图解析器,而Struts2的扩展性相对弱些。 2. **依赖注入**:Spring MVC是Spring框架的一部分,天然支持DI,而Struts2...

    八、SpringMVC

    SpringMVC与Struts2运行流程对比 SpringMVC和Struts2都是基于MVC架构的Web应用程序框架,但它们的运行流程有所不同。SpringMVC的运行流程主要包括以下几个步骤: 1. 客户端请求:客户端发送请求到服务器。 2. ...

    Java SpringMVC 学习路线.pdf

    在对比SpringMVC与Struts2时,可以发现两者在设计思想和实现细节上有所区别。SpringMVC作为新起之秀,在市场使用率上已经超过了Struts2。SpringMVC的控制器是基于方法级别的拦截,而Struts2则是基于类级别的拦截。...

    SpringMVC教程及实现原理

    - **性能对比**:由于Struts2每次请求都需要创建新的Action实例,因此其性能通常不如SpringMVC。 - **参数传递**:SpringMVC支持更加灵活的参数传递方式,可以通过注解(如`@RequestParam`、`@PathVariable`等)来...

    springMVC使用文档

    #### SpringMVC 与 Struts2 的比较 - **入口机制**:SpringMVC 使用 Servlet 作为入口,而 Struts2 使用 Filter。 - **设计原则**:SpringMVC 基于方法设计,参数传递通过方法参数;Struts2 基于类设计,参数传递...

    SpringMVC面试专题.pdf

    5. **SpringMVC 与 Struts2 的区别**: - 入口不同:SpringMVC 通过 Servlet,Struts2 通过 Filter。 - 开发方式:SpringMVC 基于方法开发,Struts2 基于类。 - 数据存取:SpringMVC 使用参数解析,Struts2 使用...

    SpringMVC面试专题1

    【SpringMVC面试专题1】 1. **SpringMVC是什么?...以上内容涵盖了SpringMVC的基本概念、优点、工作流程、控制器的单例模式问题、与Struts2的对比,以及请求映射等关键知识点,这些是面试中可能会遇到的问题。

    SpringMVC入门精通

    #### 三、SpringMVC 与 Struts2 的对比 1. **架构差异**: - **SpringMVC**:方法级别的拦截,每个请求映射到一个方法。 - **Struts2**:类级别的拦截,一个类对应一个请求上下文。 - 结果:SpringMVC 更易于...

    struts2学习笔记

    #### 二、Struts2与Struts1的关键区别 1. **实例管理**:Struts1中Action是单例模式,而Struts2采用多实例模式,提高了线程安全性和性能。 2. **Servlet API依赖**:Struts1的Action类与Servlet API紧密耦合,限制...

    SpringMVC controller

    对于SpringMVC与其它MVC框架的对比,例如Struts、WebWork(WebWork2)等,每种框架都有自己的设计理念和优势。Struts是一个成熟的MVC框架,拥有庞大的信息资源和开发社区,适合于实际的Web应用产品研发。WebWork2的...

    SpringMVC.docx

    3. **性能对比**:通常情况下,SpringMVC的性能优于Struts2。SpringMVC基于方法级别的调用,而Struts2基于类级别,这意味着SpringMVC在处理并发请求时更有效率。 4. **设计思想**:Struts2的设计更接近面向对象编程...

    springMVC案例

    - **开发效率**:与性能表现相反,开发效率大致顺序为:Struts2 > SpringMVC > Struts1 > JSP + Servlet。 #### 四、基于Spring 3.2的Annotation方式搭建SpringMVC环境 1. **下载SpringMVC库** - 从官方网址下载...

    Struts2技术笔记(个人总结的,都有代码示例)

    - **框架对比**:在Java Web开发领域,Struts2常被拿来与Webwork和SpringMVC等框架进行比较。虽然它们都采用了MVC设计模式,但Struts2在灵活性和可扩展性方面有着显著的优势。 #### 二、Struts2执行流程详解 ...

    Java_SpringMVC_Tutorial

    SpringMVC 与 Struts2 区别 对比项目 SrpingMVC Struts2 优势 国内市场情况 有大量用户,一般新项目启动都会选用 SpringMVC 有部分老用户,老项目组,由于习惯了,一直在使用。 国内情况,SpringMVC 的使用率已经...

    SpringMVC4教程-超权威--超详细

    #### 十七、SpringMVC对比Struts2 - **设计理念差异**:SpringMVC采用了更现代的设计理念,更加注重组件间的松耦合,而Struts2则沿用了Action-Based的设计模式。 - **性能比较**:SpringMVC由于其简洁的设计和高效...

Global site tag (gtag.js) - Google Analytics