发表于: 2017-09-10 20:57:07

1 630


【今日完成】


今天主要是准备小课堂——“Spring MVC和Struts的区别是什么,为什么更倾向于使用Spring MVC?”


1、MVC是什么?
            模型-视图-控制器(MVC)是一个众所周知的以设计界面应用程序为基础的设计模式。它主要通过分离模型、视图及控制器在应用程序中的角色将业务逻辑从界面中解耦。通常,模型负责封装应用程序数据在视图层展示。视图仅仅只是展示这些数据,不包含任何业务逻辑。控制器负责接收来自用户的请求,并调用后台服务(manager或者dao)来处理业务逻辑。处理后,后台业务层可能会返回了一些数据在视图层展示。控制器收集这些数据及准备模型在视图层展示。MVC模式的核心思想是将业务逻辑从界面中分离出来,允许它们单独改变而不会相互影响。

           用我自己的语言来说,MVC就是一种设计模式,让页面渲染与逻辑核心分离开,各司其职,这样好处是不会使工程混乱。

简单原理图如下:



2、Spring MVC是什么?
            Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块


3、Struts是什么?
           Struts 是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用JavaServlet/JSP技术,实现了基于Java EEWeb应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品。

           Struts又分为1与2,两者相差蛮大的。我们这里的Struts一般指Struts2.


两者的流程对比:

先来看看SpringMVC的执行流程
            
                1、请求旅程的第一站是Spring的DispatcherServlet。

                2、DispatcherServlet的任务是将请求发送给Spring MVC控制器(controller)。DispatcherServlet以会查询一个或多个处理器映射(handler mapping) 来确定请求的下一在哪里。

               3、一旦选择了合适的控制器,DispatcherServlet会将请求发送给选中的控制器

               4、控制器在接下来会将请求连同模型和视图名发送回DispatcherServlet 。

               5、DispatcherServlet将会使用视图解析器(view resolver)来将逻辑视图名匹配为一个特定的视图实现,它可能是也可能不是JSP。
            

              6、既然DispatcherServlet已经知道由哪个视图渲染结果,那请求的任务基本上也就完成了。它的最后一站是视图的实现</p>
             

              7、在这里它交付模型数据。请求的任务就完成了。视图将使用模型数据渲染输出


文字有点枯燥,我们来看看图例:



接着再来看看Struts2的执行流程
                   1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求 (客户端提交一个HttpServletRequest请求。)

                   2、请求被提交到一系列的过滤器(Filter)。

                   3、FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(HttpServletRequest)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。

                   4、ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类。
                   5、ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action。但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)。
               
                   6、Action执行完毕后,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result。


依旧图例比文字清楚:



那么重点来了,为什么SpringMVC比Struts好呢?
      
            1、Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文
            2、Struts2需要针对每个request进行封装,把request,session等servlet生命周期的变量封装成一个一个Map
            3、拦截器实现机制上,Struts2有以自己的interceptor机制,SpringMVC用的是独立的AOP方式,这样导致Struts2的配置文件量还是比SpringMVC大。
            4、Spring MVC和Spring是无缝的。蹭了Spring的热度
            5、SpringMVC开发效率和性能高于Struts2。



如何取舍?
            1. 优先选择SpringMVC
            2. 出去工作后,如果公司老项目必须用Struts2,到时候学

感觉Struts江河日下,SpringMVC依旧坚挺,有图为证!

注意蓝色的Struts和黄色的Spring


【今日收获】

完成小课堂


【明日计划】

开启任务七


【任务进度】

才把任务六做完,还没拆任务七的禅道。



返回列表 返回列表
评论

    分享到