一文读懂SpringMVC的工作原理

前言

MVC是经典的软件架构设计模式,几乎在各个领域各种开发语言中,均采纳了这个思想。此刻博主突然想到了Thinking in xxx系列设计书籍。换句话说,就是“各人自扫门前雪”“术业有专攻”。当职责分配得当后,剩下的就是发挥各“人”之所长了。

而SpringMVC继承了这一优良传统,沿袭了其中的核心思想。所以今天博主就来谈谈它是如何做到的,为什么可以引领风骚十几年。

在这里插入图片描述

Q:SpringMVC是如何工作的

Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。

其中,处理器是你的应用中注解了@Controller@RequestMapping的类和方法,Spring为处理器方法提供了极其多样灵活的配置。Spring 3.0以后提供了@Controller注解机制、@PathVariable注解以及一些其他的特性,你可以使用它们来进行RESTful web站点和应用的开发。

“对扩展开放”是Spring MVC框架一个重要的设计原则,而对于Spring的整个完整框架来说,其设计原则是“对扩展开放,对修改闭合”。这也是经典的开闭原则的实践之一。

1. SpringMVC交互图

在这里插入图片描述
Spring MVC框架,与其他很多web的MVC框架一样:请求驱动
所有设计都围绕着一个中央Servlet来展开,它负责把所有请求分发到控制器,同时提供其他web应用开发所需要的功能。

2. DispatcherServlet(前端控制器)工作流

下图展示了SpringMVC的DispatcherServlet处理请求的工作流,按序查看:

在这里插入图片描述

2.1 发送请求Request

DispatcherServlet是springMVC的重要部分,位于中心。提供整个框架访问点,起到交换的作用,而且与Spring IoC容器集成。在实际开发中,只需要在web.xml中进行配置,其他组件由框架提供,配置示例如下:

在这里插入图片描述

2.2 处理映射HandlerMapping

HandlerMapping负责根据用户请求request找到Handler(即处理器)。SpringMVC提供了实现了不同映射方式的多种映射器,例如:配置文件方式,实现接口方式,注解方式等。以下是在spring.xml中,使用自动扫描的形式:

在这里插入图片描述

2.3 处理适配HandlerAdapter

我们的controller类必须继承Controller(base class)或者添加注解@Controller,前端控制器才会根据controller类对应的类型调用相应的HandlerAdapter,处理客户端的request。

2.4 定义控制类controller

该controller返回一个ModelAndView:
在这里插入图片描述

2.5 视图解析View resolver

View Resolver负责将处理结果生成View视图。其过程大致是先根据逻辑视图名解析成物理视图名(即具体的页面URL),再生成View视图对象,最后对View进行渲染,将处理结果通过页面展示给用户。大致配置如下:
在这里插入图片描述

2.6 视图View

编写JSP、excel、pdf等可向客户呈现的内容或页面,展示数据。

结语

博主通过一文对SpringMVC架构尝试解读,按运行时序解剖SpringMVC的每个关键步骤是“做什么的”“如何做的”。相信你能够从中get到它的核心运行逻辑,并基于此搭建可靠的开发框架。


在这里插入图片描述

评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值