spring mvc的工作原理及其本质

前言

mvc其实是我们开发web项目的一个通用架构方式,我们把业务数据的处理和业务数据的呈现相分离,这样就把复杂的东西简化了,方便了编程的实现,代码结构也非常的清晰,更有利于后期的维护。

 

什么是MVC?

MVC其实是Model-View-Controller的缩写。View是视图层,负责业务数据的呈现。Model是模型层,是业务数据的信息表示,通常是多个业务实体的组合。Controller是控制层,负责调用业务逻辑生成对应的业务数据,传递业务数据给视图层用于展现,是视图层和模型层的桥梁。

下面spring提供的mvc设计模式图,设计图中的核心是前端控制器。前端控制器负责接收、分发用户的请求给后台的控制器Controller,控制器处理业务逻辑之后返回对应的业务数据,打包返回给前端控制器。前端控制器又把接收的业务数据,发送给合适的视图层模板展示给用户面前。

以上就是spring mvc的大致工作流程。

那么,怎么更好的理解前端控制器的角色呢?举个生活中的栗子,我们去银行办理业务,一进银行大门通常就会有个小姐姐过来,问你需要办理什么业务,然后假如你说你要存一大笔钱,ATM机不好操作,听完小姐姐马上就明白了,她会给你取个号子。说让你等一下叫号的时候到哪个哪个窗口去办理业务。银行每天来办理业务的人很多,所以有很多业务窗口,比如综合业务、信用卡业务、VIP窗口等等,办理不同的业务到不同的业务窗口。

讲到这里,大概知道进门的那个小姐姐就相当于前端控制器,她把办理不同业务的用户安排到不同的窗口,而窗口就相当于控制器。

 

几个重要的概念

DispatcherServlet

spring mvc的前端控制器,是所有请求处理的入口,它将请求分发给对应的controller。应用程序启动的时候,spring容器初始化DispatcherServlet时会收集各种配置信息初始化创建HandlerMapping实例。而DispatcherServlet就是根据HandlerMapping来找到对应的controller的。

HandlerMapping

负责请求(request)/URL和请求处理者handler之间的映射关系(其实一般的spring web项目中Handler就是controller)。每个HandlerMapping实例的核心内容是一组URL pattern跟对应的handler的映射表(<URL pattern,Handler>)。再一个springweb应用中会有不止一个 HandlerMapping 实例,并且这些HandlerMapping可以排序。当一个请求到达时,Spring MVC会根据排好的顺序查找第一个匹配请求URL的HandlerMapping并结合所设置的pre/post Inteceptors构造一个 HandlerExecutionChain 对象用于处理该请求。

HandlerAdapter

Handler适配器,DispatcherServlet不直接跟Handler进行交互,而是通过HandlerAdapter,Handler所有的处理业务的细节,DispatcherServlet一无所知,换句话说它只知道HandlerAdapter不知道Handler。

Controller

控制器,处理请求生成相关业务数据的地方。

HandlerInterceptor

用于handler调用的前/后或者请求处理完成时提供特定的逻辑,相当于过滤器。

对符合某些特征的请求应用一些特定的功能,就可以使用HandlerInterceptor。比如你想要求某些URL被访问时用于必须已经登录,你就可以实现一个检查用户是否已经登录的HandlerInterceptor。

HandlerInterceptor是一个接口,该接口定义了三个方法:

           preHandle() – 真正的 handler 执行之前被调用
           postHandle() – 真正的 handler 执行之后被调用
           afterCompletion() – 整个request被处理完成时调用


这三个方法提供了足够的灵活性用于进行各种预处理和后置处理

HandlerExecutionChain

一个Handler加上一组HandlerInterceptor。

ModelAndView

用来存储处理完后的结果数据。

ViewResolver

视图解析器,把一个逻辑上的视图名称解析为一个真正的视图。

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L小芸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值