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

springweb和springwebmvc的关系(spring 和 spring mvc)前面我们学习了 Spring 最核心的 IoC 与 AOP 模块 读书笔记 Spring 技术内幕 一 IoC 容器的实现 读书笔记 Spring 技术内幕 二 AOP 的实现 接下来继续学习 MVC 其同样也是经典 我们依旧按照 从浅到深 的方式来学习 先从程序员的视角看看其简化了哪些工作 帮我们做了什么 再到具体的设计与实现 01 MVC 概述 在之前 IoC 的笔记中

大家好,我是讯享网,很高兴认识大家。



前面我们学习了 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环境

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

          文章推荐:

            小讯
            上一篇 2025-05-08 13:54
            下一篇 2025-05-23 08:52

            相关推荐

            版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
            如需转载请保留出处:https://51itzy.com/kjqy/208049.html