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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 【深入浅出Spring原理及实战】「夯实基础系列」360全方位渗透和探究SpringMVC的核心原理和运作机制(总体框架原理篇)

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前端控制器

java

复制代码

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的核心原理和运作机制(组件详解原理篇)

相关文章
|
17天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
1天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
9 2
|
13天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
31 2
|
13天前
|
消息中间件 NoSQL Java
springboot整合常用中间件框架案例
该项目是Spring Boot集成整合案例,涵盖多种中间件的使用示例,每个案例项目使用最小依赖,便于直接应用到自己的项目中。包括MyBatis、Redis、MongoDB、MQ、ES等的整合示例。
61 1
|
21天前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
1天前
|
XML Java 开发者
Spring Boot开箱即用可插拔实现过程演练与原理剖析
【11月更文挑战第20天】Spring Boot是一个基于Spring框架的项目,其设计目的是简化Spring应用的初始搭建以及开发过程。Spring Boot通过提供约定优于配置的理念,减少了大量的XML配置和手动设置,使得开发者能够更专注于业务逻辑的实现。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,为开发者提供一个全面的理解。
8 0
|
Java Spring
Spring原理学习系列之五:IOC原理之Bean加载
其实很多同学都想通过阅读框架的源码以汲取框架设计思想以及编程营养,Spring框架其实就是个很好的框架源码学习对象。我们都知道Bean是Spring框架的最小操作单元,Spring框架通过对于Bean的统一管理实现其IOC以及AOP等核心的框架功能,那么Spring框架是如何把Bean加载到环境中来进行管理的呢?本文将围绕这个话题进行详细的阐述,并配合Spring框架的源码解析。
Spring原理学习系列之五:IOC原理之Bean加载
|
2月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
1月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
161 2
|
6天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
18 2
 SpringBoot入门(7)- 配置热部署devtools工具