Spring MVC和Struts的区别是什么,为什么更倾向于使用Spring MVC?

java分享会

分享人:龚剑飞

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

先介绍下背景

MVC是什么?

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

Spring MVC是什么?

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

Struts是什么?

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

2.知识剖析

先来看看SpringMVC的执行流程

1、请求旅程的第一站是Spring的DispatcherServlet。

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

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

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

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

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

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。

3.常见问题

为什么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。

4.解决方案

如何取舍?

1. 优先选择SpringMVC

2. 出去工作后,如果公司老项目必须用Struts2,到时候学

5.编码实战

6.扩展思考

最后谈一谈未来趋势

感觉Struts江河日下,SpringMVC依旧坚挺

7.参考文献

https://www.quora.com/Is-Struts-2-dead

8.更多讨论

鸣谢

感谢观看,如有出错,恳请指正

BY : 龚剑飞