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

相关文章
|
1天前
|
前端开发 Java 数据库连接
Spring框架初识
Spring 是一个分层的轻量级开源框架,核心功能包括控制反转(IOC)和面向切面编程(AOP)。主要模块有核心容器、Spring 上下文、AOP、DAO、ORM、Web 模块和 MVC 框架。它通过 IOC 将配置与代码分离,简化开发;AOP 提供了声明性事务管理等增强功能。
33 21
Spring框架初识
|
16天前
|
XML Java Maven
Spring 手动实现Spring底层机制
Spring 第六节 手动实现Spring底层机制 万字详解!
65 31
|
19天前
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
110 29
|
8天前
|
XML Java 开发者
通过springboot框架创建对象(一)
在Spring Boot中,对象创建依赖于Spring框架的核心特性——控制反转(IoC)和依赖注入(DI)。IoC将对象的创建和管理交由Spring应用上下文负责,开发者只需定义依赖关系。DI通过构造函数、setter方法或字段注入实现依赖对象的传递。Spring Boot的自动配置机制基于类路径和配置文件,自动为应用程序配置Spring容器,简化开发过程。Bean的生命周期包括定义扫描、实例化、依赖注入、初始化和销毁回调,均由Spring容器管理。这些特性提高了开发效率并简化了代码维护。
|
1月前
|
开发框架 运维 监控
Spring Boot中的日志框架选择
在Spring Boot开发中,日志管理至关重要。常见的日志框架有Logback、Log4j2、Java Util Logging和Slf4j。选择合适的日志框架需考虑性能、灵活性、社区支持及集成配置。本文以Logback为例,演示了如何记录不同级别的日志消息,并强调合理配置日志框架对提升系统可靠性和开发效率的重要性。
|
Java Spring
spring框架之AOP模块(面向切面),附带通知类型---超详细介绍
spring框架之AOP模块(面向切面),附带通知类型---超详细介绍
155 0
|
缓存 监控 Java
Spring框架之AOP(面向切面编程)
Spring框架之AOP(面向切面编程)
70 0
|
7月前
|
分布式计算 Java MaxCompute
详解 Java 限流接口实现问题之在Spring框架中使用AOP来实现基于注解的限流问题如何解决
详解 Java 限流接口实现问题之在Spring框架中使用AOP来实现基于注解的限流问题如何解决
113 0
|
8月前
|
设计模式 SQL Java
Spring框架第四章(AOP概念及相关术语)
Spring框架第四章(AOP概念及相关术语)
|
9月前
|
安全 Java 开发者
在Spring框架中,IoC和AOP是如何实现的?
【4月更文挑战第30天】在Spring框架中,IoC和AOP是如何实现的?
116 0