【深入浅出Spring原理及实战】「夯实基础系列」360全方位渗透和探究SpringMVC的核心原理和运作机制(总体框架原理篇)

news/2024/7/4 2:58:18

全方位渗透和探究SpringMVC的核心原理和运作机制

  • SpringMVC简介
    • Spring Web MVC是什么
    • Spring Web MVC的工作模式
    • Spring Web MVC能帮我们做什么
    • SpringMVC的底层依赖
  • SpringMVC工作流程
    • SpringMVC中的组件
      • DispatcherServlet前端控制器
        • DispatcherServlet的职责和作用
      • HandlerMapping处理器映射器
      • Handler处理器
      • HandlAdapter处理器适配器
      • HandlerExecuteChain
      • ViewResolver视图解析器
      • DispatcherServlet职责调度
  • 下一篇内容

SpringMVC简介

Spring Web MVC是一种基于Java的轻量级Web框架,它实现了Web MVC设计模式,使用VC架构模式的思想将web层进行职责解耦。这种请求驱动类型的框架使用请求-响应模型,旨在简化Web开发过程。使用Spring Web MVC,我们可以更加高效地开发Web应用程序,而不必为了每个接口编写一个Servlet而感到烦恼。相比于传统的Jsp/Servlet技术体系,Spring Web MVC能够帮助我们有效地简化这一步骤。

Spring Web MVC是什么

Spring Web MVC的核心思想是将应用程序的逻辑分为三个部分:模型(Model)、视图(View)和控制器(Controller)。模型负责处理数据,视图负责渲染数据并呈现给用户,控制器负责处理用户请求并将结果传递给视图进行呈现。这种分离使得应用程序的不同部分可以独立地进行开发和维护,提高了代码的可重用性和可维护性。

Spring Web MVC还提供了许多有用的功能,例如数据绑定、表单验证、文件上传和国际化支持等。这些功能可以帮助我们更加高效地开发Web应用程序,提高开发效率。

总之,Spring Web MVC是一种非常有用的Web框架,它能够帮助我们更加高效地开发Web应用程序,简化开发过程,提高代码的可重用性和可维护性。

Spring Web MVC的工作模式

Spring Web MVC实现了服务到工作者模式,但是还有许多优化的空间。其中,前端控制器是DispatcherServlet,应用控制器可以拆分为处理器映射器(Handler Mapping)和视图解析器(View Resolver)进行处理器和视图的管理。页面控制器/动作/处理器可以通过实现Controller接口(仅包含ModelAndView handleRequest(request, response)方法,也有人称之为Handler)来实现,也可以是任何的POJO类。此外,Spring Web MVC还支持本地化(Locale)解析、主题(Theme)解析以及文件上传等功能。

Spring Web MVC还提供了非常灵活的数据验证、格式化和数据绑定机制,这些功能可以帮助我们更加高效地开发Web应用程序。同时,Spring Web MVC还提供了强大的约定大于配置(惯例优先原则)的契约式编程支持,使得开发人员可以更加便捷地进行开发。

总之,Spring Web MVC是一种非常强大的Web框架,它提供了许多有用的功能,例如处理器映射器、视图解析器、数据验证、格式化和数据绑定机制等,可以帮助我们更加高效地开发Web应用程序。同时,Spring Web MVC还支持约定大于配置的契约式编程,使得开发人员可以更加便捷地进行开发。

Spring Web MVC能帮我们做什么

  • 它能够让我们简单地设计出干净的Web层和薄薄的Web层,同时具备与Spring框架集成的特性,如IoC容器和AOP等。

  • 该框架还提供了强大的约定大于配置的契约式编程支持,能够简单地进行Web层的单元测试。

  • 具有特别灵活的URL到页面控制器的映射,非常容易与其他视图技术集成,如Velocity、FreeMarker等等。

  • 该框架还提供了非常灵活的数据验证、格式化和数据绑定机制,能够使用任何对象进行数据绑定,不必实现特定框架的API。

  • 支持灵活的本地化、主题等解析,提供了一套强大的SP标签库,简化SP开发,支持RESTful风格,并提供更加简单的异常处理和对静态资源的支持。

SpringMVC的底层依赖

接下来,利用Maven创建一个web工程(SpringMVC项目),在pom.xml文件中,添加spring-webmvc的依赖:
在这里插入图片描述
添加了spring-webmvc依赖之后,其他的spring-web、spring-aop、spring-context等等就全部都加入进来了。

SpringMVC工作流程

大多数面试时,关于SpringMVC的问题,超过99%都是这个问题。

所有请求都将自动拦截下来,拦截下来后,请求交给DispatcherServlet去处理,在加载DispatcherServlet时进行处理操作。

SpringMVC中的组件

在这里插入图片描述

DispatcherServlet前端控制器

org.springframework.web.servlet.DispatcherServlet

DispatcherServlet的职责和作用

DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring loC容器无缝集成,从而可以获得Spring的所有好处。

HandlerMapping处理器映射器

在SpringMVC中,HandlerMapping负责根据用户的请求找到对应的Handler,也就是处理器(通常是我们所说的Controller)。SpringMVC提供了多种映射器来实现不同的映射方式,例如配置文件方式、实现接口方式、注解方式等。在实际开发中,注解方式是我们最常用的方式。

Handler处理器

在SpringMVC中,Handler是前端控制器DispatcherServlet的后端控制器,它负责对具体的用户请求进行处理。由于Handler需要涉及具体的业务请求,因此通常需要程序员根据业务需求进行开发。在这里,所谓的Handler其实就是我们通常所说的Controller。

HandlAdapter处理器适配器

在SpringMVC中,通过HandlerAdapter来执行处理器,这是适配器模式的一种应用。通过扩展适配器,我们可以对更多类型的处理器进行执行。这种设计模式可以帮助我们提高代码的可扩展性和灵活性。

HandlerExecuteChain

HandlerExecuteChain是SpringMVC框架中的一个重要组件,它的主要作用是管理处理请求的HandlerInterceptor拦截器和处理器Handler的执行顺序,并在执行过程中传递请求和响应对象。HandlerExecuteChain通常由DispatcherServlet负责创建和管理。

在处理请求的过程中,DispatcherServlet会首先将请求传递给HandlerInterceptor拦截器链进行处理。HandlerInterceptor拦截器可以对请求进行预处理、后处理和完成处理,从而实现诸如权限校验、日志记录、缓存等功能。在HandlerInterceptor拦截器链执行完毕后,DispatcherServlet会将请求传递给对应的Handler处理器进行处理。

在Handler处理器执行过程中,HandlerExecuteChain会负责管理HandlerInterceptor拦截器和Handler处理器的执行顺序,并在执行过程中传递请求和响应对象。HandlerInterceptor拦截器可以在Handler处理器执行前后进行处理,从而实现更加细粒度的请求处理。同时,HandlerExecuteChain还可以在Handler处理器执行完成后进行后处理,例如资源释放等操作。

总之,HandlerExecuteChain的作用是协调HandlerInterceptor拦截器和Handler处理器的执行顺序,并在执行过程中传递请求和响应对象,从而实现更加灵活、高效的请求处理。

ViewResolver视图解析器

在SpringMVC中,ViewResolver负责将处理结果生成View视图。首先,ViewResolver会根据逻辑视图名解析成物理视图名,也就是具体的页面地址。接着,ViewResolver会生成View视图对象,并对其进行渲染,将处理结果通过页面展示给用户。

SpringMVC框架提供了很多View视图类型,包括jstlView、freemarkerView、pdfView等。通常情况下,为了将模型数据通过页面展示给用户,需要使用页面标签或页面模板技术,程序员需要根据业务需求开发具体的页面。

DispatcherServlet职责调度

用户的请求首先会到达前端控制器,这个控制器可以看作是MVC模式中的控制器。在SpringMVC中,DispatcherServlet扮演着整个流程控制的中心角色,可以看作是SpringMVC的大脑。

DispatcherServlet会调用其他组件来处理用户的请求,这样一来,组件之间的耦合性就降低,本身主要用于控制流程,职责如下:

在这里插入图片描述

  1. 文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传
    解析:
  2. 通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它
    包括一个处理器、多个HandlerInterceptor拦截器):
  3. 通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器):
  4. 通过ViewResolver解析逻辑视图名到具体视图实现;
  5. 本地化解析:
  6. 渲染具体的视图等:
  7. 如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。

下一篇内容

【深入浅出Spring原理及实战】「夯实基础系列」360全方位渗透和探究SpringMVC的核心原理和运作机制(组件详解原理篇)


http://www.niftyadmin.cn/n/393720.html

相关文章

chatgpt赋能python:Python列表指定元素的取出方法

Python列表指定元素的取出方法 在Python编程中,经常需要取出列表中的指定元素。本文将介绍几种常用的取出列表指定元素的方法。 1. 使用索引 列表中的元素可以通过索引来进行访问和修改,索引从0开始。下面的示例展示了如何使用索引来取出列表中的指…

chatgpt赋能python:Python取消空格:如何优化代码和改善SEO?

Python取消空格:如何优化代码和改善SEO? 如果你是一位有10年python编程经验的工程师,那么你一定深刻体会到代码的质量对软件应用的重要性。而在今天,随着搜索引擎优化(SEO)的发展和对网页排名的更高要…

《商用密码应用与安全性评估》第四章密码应用安全性评估实施要点4.5密码应用安全性评估测评工具

目录 测评工具使用和管理要求 测评工具体系 通用测评工具 专用测评工具 典型测评工具概述 测评工具使用和管理要求 测评过程中使用的专用测评工具应通过国家密码管理局的审批或者经检测认证合格。为确保工具测试结果的准确可信,测评机构应确认使用的专用工具是最…

聊聊Scrum价值观与测试启发

这是鼎叔的第六十二篇原创文章。行业大牛和刚毕业的小白,都可以进来聊聊。 欢迎关注本公众号《敏捷测试转型》,星标收藏,大量原创思考文章陆续推出。 敏捷理论博大精深,相关实践方法论和工具层出不穷,各大公司都有特…

chatgpt赋能python:Python取消关机:让你摆脱关机的烦恼

Python取消关机:让你摆脱关机的烦恼 作为一名有10年Python编程经验的工程师,我深知电脑在工作中的重要性和关机时带来的不便。有的时候你可能会忘记保存数据,或是需要长时间运行的程序正在进行,而突然被迫关机是非常让人头疼…

chatgpt赋能python:Python取值:介绍

Python取值:介绍 Python是一种非常流行的高级编程语言,适用于各种任务,包括数据科学、机器学习、Web开发和自动化。它被广泛使用,因为它易于学习、易于使用、易于阅读和易于维护。Python中的取值对于程序员来说是一个极其有用…

VIM程序编辑器

vim打开文件的三种方式 vim 文件路径 用来 打开指定文件vim 数字 文件路径 用来 打开指定文件并且光标移动到指定行vim 关键词 文件路径 用来 打开指定文件并且关键字高亮显示 三种模式 一:命令模式 用户刚刚启动 vi/vim,便进入了命令模式 此状态下敲…

chatgpt赋能python:Python取某几行-掌握技巧提高效率

Python取某几行-掌握技巧提高效率 Python是一种简单易学、高效编程的语言。它也是一种非常强大的语言,适用于许多不同领域的应用程序。在处理文本文件和数据集时,Python的优势变得尤为突出。在这篇文章中,我们将重点介绍如何使用Python取…