当前位置:网站首页 > R语言数据分析 > 正文

springweb和springwebmvc的关系(spring 和 spring mvc)



前面我们学习了 Spring 最核心的 IoC 与 AOP 模块( 读书笔记-《Spring技术内幕》(一)IoC容器的实现 读书笔记-《Spring技术内幕》(二)AOP的实现),接下来继续学习 MVC,其同样也是经典。

我们依旧按照从浅到深方式来学习,先从程序员的视角看看其简化了哪些工作,帮我们做了什么,再到具体的设计与实现。

01

MVC 概述

在之前 IoC 的笔记中,有这样一张图:

这里依然可以复用,从程序员的视角来看,Spring MVC 带来的最直观的好处是,我们不需要再去写繁琐冗余的 Servlet,而是改写 Controller。

拉长时间线来看,JavaWeb 的技术发展历程大致如下:

总结一下就是,初期使用的技术在业务的发展中逐渐暴露出局限性,于是有了分层思想,按照数据维度分层的 MVC 是最经典的分层模式,Spring MVC 就是 MVC 的实现之一。

除了 MVC,还有按照业务维度分层的 DDD,不过后者用得比较少,其比较适合复杂系统,并且需要所有人员(产品、研发、测试)都有较高水准的业务理解。

02

Spring MVC 概述

了解了 MVC 后,我们可以很快明白 Spring MVC 的重点工作。Model 层的 Bean 初始化,Controller 层的请求处理以及 View 层的视图呈现。具体步骤就是下面三步:

    接下来我们就可以展开步骤,来详细看看其实现了。

    03

    Spring MVC 设计与实现

    1.初始化

    我们以 Tomcat 的 web.xml 文件为例

    可以看到,其定义了一个叫 sample 的 servlet,全限定类名正是 DispatcherServlet,且其将处理所有请求。而后,这里还有一个 Bean 定义的配置文件是 WEB-IN 目录下的 applicationContext.xml。最后,有个监听器 ContextLoaderListener,其将负责完成 IoC 容器在 Web 环境中的启动

    从代码上来看,Web 容器中启动 Spring 应用程序的过程如下:

      在根上下文初始化好后,就可以关注 DispatcherServlet 了。从前面的概述也看得出来,其是 Spring MVC 的核心。DispatcherServlet 的初始化和处理过程大致如下:

      上面时序图中,从右到左依次是继承关系,我们来详细描述下上半边:

        2.处理请求

        前面初始化已完成,接下来就关注上面那张图的下半边,也就是 DispatcherServlet 的 doDispatch() 了。

        注意 HandlerMapping 有很多实现,比如通过 Bean 名称的、通过类名称的,我们以SimpleUrlHandlerMapping 为例,先看下关键的数据结构:

        再看看 doDispatch() 的详细时序图:

        可以看到,doDispatch() 完成了模型、控制器、视图的耦合处理,从根据请求得到对应的 handler,到调用 handler 的拦截器,到调用适配器的 handle(),最后到 ModelAndView 的呈现。

        3.呈现视图

        对于最后的视图呈现,除了当时常见的 JSP 视图,还有 Excel 视图、PDF 视图等等。不过现在都不涉及了,主流的应用都通过前后端分离的方式,将数据的展示交给前端开发处理。

        关于视图呈现,我们以 JSP 视图为例,过程如下:

          原文链接: 读书笔记-《Spring技术内幕》(三)MVC与Web环境

          原创不易,点个关注不迷路哟,谢谢!

          文章推荐:

            到此这篇springweb和springwebmvc的关系(spring 和 spring mvc)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

            版权声明


            相关文章:

          • xavier名字来历(xavier昵称)2026-03-29 17:45:08
          • vears英语怎么读(vear怎么读音)2026-03-29 17:45:08
          • redis-cli连接集群(redis集群连不上)2026-03-29 17:45:08
          • chronyc sources -v ^?如何解决(chronic active)2026-03-29 17:45:08
          • incenter怎么读(inconsistent怎么读)2026-03-29 17:45:08
          • vcore是什么意思(vcry是什么意思)2026-03-29 17:45:08
          • faiis是什么意思中文(faris是什么意思中文)2026-03-29 17:45:08
          • Raise a suilen成员(raise a suilen 百科)2026-03-29 17:45:08
          • bn-fp是什么材质(bfr是什么材质)2026-03-29 17:45:08
          • hprof怎么读(hp-prrsv怎么读)2026-03-29 17:45:08
          • 全屏图片