为什么SpringMVC!!分析web发展历程,为什么MVC框架中SpringMVC脱颖而出以及历久弥新,SpringMVC 和 Struts2 的优劣分析 您所在的位置:网站首页 mvc和struts的关系 为什么SpringMVC!!分析web发展历程,为什么MVC框架中SpringMVC脱颖而出以及历久弥新,SpringMVC 和 Struts2 的优劣分析

为什么SpringMVC!!分析web发展历程,为什么MVC框架中SpringMVC脱颖而出以及历久弥新,SpringMVC 和 Struts2 的优劣分析

2024-07-10 10:58| 来源: 网络整理| 查看: 265

文章目录 前言使用SpringMVC 的理由交互设计模式SpringMVCSpringMVC加载流程 SpringMVC的优点SpringMVC的缺点MVC框架比较SpringMVC 和 Struts2 的优劣分析

前言

开头老规矩放上官方文档地址: https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-servlet

使用SpringMVC 的理由

很多应用程序的问题在于处理业务数据的对象和显示业务数据的视图之间存在紧密耦合,通常,更新业务对象的命令都是从视图本身发起的,使视图对任何业务对象更改都有高度敏感性。而且,当多个视图依赖于同一个业务对象时是没有灵活性的。

SpringMVC是一种基于Java,实现了Web MVC设计模式,请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦。基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,SpringMVC也是要简化我们日常Web开发。

交互设计模式

1.mv模式 视图直接连接数据库或者业务层,业务层直接视图, 直接jsp里面写代码+jdbc直连数据库。

2.传统mvc 在这里插入图片描述 典型代表javabean+servlet+jsp+jdbc。配置web容器的配置文件,特点servlet映射路径,servlet处理后,再由web容器将其变为静态页面。耦合度高,代码冗余量大,各层之间对象都是new出来的,一个项目无数个servlet,xml写到内心焦虑,但凡有一点写错大小写或是空格或者是不小心加了符号,恭喜你,找到怀疑人生。

附上在csdn留存的以前的这种项目的写法,这仅仅是登录功能的小demo。 https://blog.csdn.net/qq_43060759/article/details/84678742

SpringMVC

特点一个servlet,就是我们的前端控制器,可以控制分发路径,以及视图渲染等等一些列强大功能。springmvc就是改进后的mvc典型代表。

在这里插入图片描述

在这里插入图片描述 其为背景为强大的spring,为spring的一部分,或者是子项目。 在这里插入图片描述 依托spring的强大的容器思想,通过spring统一生成对象,spring统一管理,不再是new出来的,耦合度降低,xml只用配置springmvc相关,以及在web项目的配置文件中配置一个servlet,就是图中的前端控制器了。也正是才出现后来的ssh(这指的是替换了sturts2的项目)ssm,这两个架构核心的视图交互都通过前端控制器,而各层持久层和逻辑层都是由spring统一管理,清晰代码量减少,大有大一统的趋势,所以ss到后来基本都没有其他框架可以动摇其地位,也就是在数据库操控这一块Mybatis和Hibernate各领风骚,而它们也都是ORM框架,都由映射思想在内。

可以看看参考以下爽文,我感觉写的非常好: https://blog.csdn.net/litianxiang_kaola/article/details/79169148#comments_13235890

再后来真的spring的xml也写的太累了,注解开发出现,springmvc写的就更简单了,controll不用写xml,也不用手动写实现controller接口,@Controller注解写在类上即代表类实现controller接口和注册成组件,当然要记得记得导AOP包哦!!同时其属性绑定以及路径分派功能,为restful风提供了无线可能,为前后端分离做出了重大贡献。当然与此同时,spring的又一子项目出现了,springboot,但是其视图交互这一块也还是依旧是springmvc霸榜。可见springmvc的强大,以及学习的必要性。

SpringMVC加载流程

(1)首先浏览器发请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;

(2)DispatcherServlet——>HandlerMapping,处理器映射器将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器对象、多个HandlerInterceptor拦截器)对象;

(3)DispatcherServlet——>HandlerAdapter,处理器适配器将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;

(4)HandlerAdapter——>调用处理器相应功能处理方法,并返回一个ModelAndView对象(包含模型数据、逻辑视图名);

(5)ModelAndView对象(Model部分是业务对象返回的模型数据,View部分为逻辑视图名)——> ViewResolver, 视图解析器将把逻辑视图名解析为具体的View;

(6)View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构;

(7)返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

SpringMVC的优点

1、清晰的角色划分: 前端控制器(DispatcherServlet) 请求到处理器映射(HandlerMapping) 处理器适配器(HandlerAdapter) 视图解析器(ViewResolver) 处理器或页面控制器(Controller) 验证器( Validator) 命令对象(Command 请求参数绑定到的对象就叫命令对象) 表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。

2、分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要。

3、由于命令对象就是一个 POJO,无需继承框架特定 API,可以使用命令对象直接作为业务对象。

4、和 Spring 其他框架无缝集成,是其它 Web 框架所不具备的。

5、可适配,通过 HandlerAdapter 可以支持任意的类作为处理器。

6、可定制性,HandlerMapping、ViewResolver 等能够非常简单的定制。

7、功能强大的数据验证、格式化、绑定机制。

8、利用 Spring 提供的 Mock 对象能够非常简单的进行 Web 层单元测试。

9、本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。

10、强大的 JSP 标签库,使 JSP 编写更容易。 ………………还有比如RESTful风格的支持、简单的文件上传、约定大于配置的契约式编程支持、基于注解的零配 置支持等等。

附上SSM中模块和层级的作用,以及交互: 在这里插入图片描述

SpringMVC的缺点

前面介绍过了springmvc是请求驱动类型的轻量级Web框架,是使用请求-响应模型,虽然又响应,可其实写的多了,会发现在响应这一块springmvc编写起来响应起来感觉也确实是一般般,而且是同步的一个请求一个响应,同步,也可以说阻塞,其实在现在对于现在的大趋势,注重用户体验,响应变得非常重要,所以出现了webflux,当然这是在spring5出现的,其比起springmvc强的地方就在于其响应这一块的处理,非阻塞。内存性能各方面都有不错的提升。不过现在很多框架对于这个框架的适配度还一般,并且排查问题相对复杂,对使用者功底要求高,同时其不少注解用法沿用springmvc,虽然实现有所不同,所以springmvc还是难以取代,可以说是仍然正在壮年,或者说正在巅峰。即使是走向了微服务时代,springmvc仍然是佼佼者,不可或缺。 以下附上一个spring5响应式编程的相关入门博客: https://blog.csdn.net/qq_40208605/article/details/80688181

在这里插入图片描述

再附上各大容器在web应用中的作用以及生成时间作用范围的一边爽文: https://www.cnblogs.com/jieerma666/p/10805966.html

MVC框架比较

SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于 Spring FrameWork 的后续产品,已经融合在 Spring Web Flow 里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用 Spring 进行 WEB 开发时,可以选择使用 Spring的 Spring MVC 框架或集成其他 MVC 开发框架,如 Struts1(现在一般不用),Struts2 等。SpringMVC 已经成为目前最主流的 MVC 框架之一,并且随着 Spring3.0 的发布,全面超越 Struts2,成为最优秀的 MVC 框架。它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时它还支持RESTful 编程风格的请求。

SpringMVC 和 Struts2 的优劣分析

共同点:

它们都是表现层框架,都是基于 MVC 模型编写的。 它们的底层都离不开原始 ServletAPI。 它们处理请求的机制都是一个核心控制器。

区别:

Spring MVC 的入口是 Servlet, 而 Struts2 是 FilterSpring MVC 是基于方法设计的,而 Struts2 是基于类, Struts2 每次执行都会创建一个动作类。所以 Spring MVC 会稍微比 Struts2 快些。Spring MVC 使用更加简洁,同时还支持 JSR303, 处理 ajax 的请求更方便(JSR303 是一套 JavaBean 参数校验的标准,它定义了很多常用的校验注解,我们可以直接将这些注解加在我们 JavaBean 的属性上面,就可以在需要校验的时候进行校验了。)Struts2 的 OGNL 表达式使页面的开发效率相比 Spring MVC 更高些,但执行效率并没有比 JSTL 提升,尤其是 struts2 的表单标签,远没有 html 执行效率高

同时 struts2 被曝安全问题频出,所以现在可以说是全面被淘汰了,ssh和ssm中的第一个s都基本转为使用SpringMVC。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有