Java那些事IT修真院_JAVA

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

2017-10-14  本文已影响194人  Bernkastel

大家好,我是IT修真院成都分院第7期的JAVA学员龚剑飞,一枚正直纯洁善良的java程序员。

今天给大家分享一下,修真院官网Java任务2,深度思考中的知识点————Spring MVC和Struts的区别是什么,为什么更倾向于使用Spring MVC??

一、背景介绍

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经典设计模式中的一个经典产品

二、知识剖析

先来看看SpringMVC的执行流程

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

2、DispatcherServlet的任务是将请求发送给Spring MVC控制器(controller)。DispatcherServlet以会查

2、作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。

3、作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。

4、Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。

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。

三、常见问题

为什么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依旧坚挺



今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

技能树.IT修真院“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~我的邀请码:13869506,或者你可以直接点击此链接:http://www.jnshu.com/login/1/13869506

作者:gjf

PPT连接: PPT


浅谈SpringMVC与Struts2的对比_腾讯视频
上一篇下一篇

猜你喜欢

热点阅读