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

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

相关文章
|
22天前
|
缓存 Java 开发者
【Spring】原理:Bean的作用域与生命周期
本文将围绕 Spring Bean 的作用域与生命周期展开深度剖析,系统梳理作用域的类型与应用场景、生命周期的关键阶段与扩展点,并结合实际案例揭示其底层实现原理,为开发者提供从理论到实践的完整指导。
|
20天前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
|
2月前
|
Java 关系型数据库 数据库
深度剖析【Spring】事务:万字详解,彻底掌握传播机制与事务原理
在Java开发中,Spring框架通过事务管理机制,帮我们轻松实现了这种“承诺”。它不仅封装了底层复杂的事务控制逻辑(比如手动开启、提交、回滚事务),还提供了灵活的配置方式,让开发者能专注于业务逻辑,而不用纠结于事务细节。
|
3月前
|
JSON 前端开发 Java
Spring MVC 核心组件与请求处理机制详解
本文解析了 Spring MVC 的核心组件及请求流程,核心组件包括 DispatcherServlet(中央调度)、HandlerMapping(URL 匹配处理器)、HandlerAdapter(执行处理器)、Handler(业务方法)、ViewResolver(视图解析),其中仅 Handler 需开发者实现。 详细描述了请求执行的 7 步流程:请求到达 DispatcherServlet 后,经映射器、适配器找到并执行处理器,再通过视图解析器渲染视图(前后端分离下视图解析可省略)。 介绍了拦截器的使用(实现 HandlerInterceptor 接口 + 配置类)及与过滤器的区别
219 0
|
3月前
|
缓存 安全 Java
Spring 框架核心原理与实践解析
本文详解 Spring 框架核心知识,包括 IOC(容器管理对象)与 DI(容器注入依赖),以及通过注解(如 @Service、@Autowired)声明 Bean 和注入依赖的方式。阐述了 Bean 的线程安全(默认单例可能有安全问题,需业务避免共享状态或设为 prototype)、作用域(@Scope 注解,常用 singleton、prototype 等)及完整生命周期(实例化、依赖注入、初始化、销毁等步骤)。 解析了循环依赖的解决机制(三级缓存)、AOP 的概念(公共逻辑抽为切面)、底层动态代理(JDK 与 Cglib 的区别)及项目应用(如日志记录)。介绍了事务的实现(基于 AOP
118 0
|
3月前
|
SQL Java 数据库连接
Spring、SpringMVC 与 MyBatis 核心知识点解析
我梳理的这些内容,涵盖了 Spring、SpringMVC 和 MyBatis 的核心知识点。 在 Spring 中,我了解到 IOC 是控制反转,把对象控制权交容器;DI 是依赖注入,有三种实现方式。Bean 有五种作用域,单例 bean 的线程安全问题及自动装配方式也清晰了。事务基于数据库和 AOP,有失效场景和七种传播行为。AOP 是面向切面编程,动态代理有 JDK 和 CGLIB 两种。 SpringMVC 的 11 步执行流程我烂熟于心,还有那些常用注解的用法。 MyBatis 里,#{} 和 ${} 的区别很关键,获取主键、处理字段与属性名不匹配的方法也掌握了。多表查询、动态
116 0
|
3月前
|
监控 架构师 NoSQL
spring 状态机 的使用 + 原理 + 源码学习 (图解+秒懂+史上最全)
spring 状态机 的使用 + 原理 + 源码学习 (图解+秒懂+史上最全)
|
Java Spring
spring框架之AOP模块(面向切面),附带通知类型---超详细介绍
spring框架之AOP模块(面向切面),附带通知类型---超详细介绍
240 0
|
缓存 监控 Java
Spring框架之AOP(面向切面编程)
Spring框架之AOP(面向切面编程)
139 0
|
XML 设计模式 安全
【Spring框架四】——Spring AOP 注解实现和xml方式实现1
【Spring框架四】——Spring AOP 注解实现和xml方式实现
237 0