struts2和springMVC框架的比较

来源:互联网 发布:js常用正则表达式 编辑:程序博客网 时间:2024/06/07 09:41

   struts2和SpringMVC同是mvc框架,它们有什么不同?首先看一张图:



        它们都用核心分发器等相同的组件,但是它们还是不一样的。

第一、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的另一个特性:行为的可扩展性。


机制上

        springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,参数的传递是直接注入到方法中的,是该方法独有的。

        struts2是类级别的拦截, 一个类对应一个request上下文, struts是在接受参数的时候,可以用属性来接受参数, 这就说明参数是让多个方法共享的,这也就无法用注解或其他方式标识其所属方法了

配置

我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置

spring3 mvc可以认为已经100%零配置了(除了配置springmvc-servlet.xml外)

性能

   spring会稍微比struts快。spring mvc 基于方法的设计,而sturts基于类每次发一次请求都会实例一个 action ,每个action都会被注入属性spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。

设计思想上

struts 更加符合oop的编程思想, spring就比较谨慎,在servlet上扩展


总之,我个人认为SpringMVC更加灵活简便,基于方法,struts2基于类,前者粒度更细,后者配置文件量比较大,反正各有千秋吧,适合的就最好。




0 0
原创粉丝点击