【Spring】13.SpringMvc

目录

前言

从Servlet到SpringMVC

SpringMVC

SpringMVC的具体执行流程

HandlerMapping


 

前言

Spring官网的MVC模块介绍:

Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes from the name of its source module (spring-webmvc), but it is more commonly known as “Spring MVC”.

Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就已包含在Spring框架中。正式名 称“ Spring Web MVC”来自其源模块的名称(spring-webmvc),但它通常被称为“ Spring MVC”。

从Servlet到SpringMVC

最典型的MVC就是JSP + servlet + javabean的模式。

传统Servlet:

 

弊端:

  • 1.xml下配置servlet的映射非常麻烦 开发效率低
  • 2.必须要继承父类、重写方法 侵入性强
  • 3.如果想在一个Servlet中处理同一业务模块的的功能分发给不同方法进行处理非常麻烦
  • 4.参数解析麻烦:单个参数(转换类型)--->pojo对象 Json文本--->pojo对象
  • 5.数据响应麻烦:pojo对象--->json ... Content-type
  • 6.跳转页面麻烦, 对path的控制、 如果使用其他模板也很麻烦 、设置编码麻烦...等等...

所以SpringMVC 就是在Servlet的基础上进行了封装,帮我把这些麻烦事都给我们做了。

Web框架的升级是一个不断偷懒的过程 从最开始的Servlet到现在的SpringMVC、SpringBoot等等

SpringMVC


基于xml的实现方式:

1.给Servlet容器配置一个DispatcherServlet(web.xml )

2.添加SpringMVC的配置信息

继承类/实现接口 方式:

  1. 1  implements HttpRequestHandler

  2. 2  implements Controller

不同的HandlerMapping

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
 <props>
 <prop key="httpRequest">simpleController</prop>
 </props>
</property>  

<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

注解方式:

配置控制器@Controller和处理方法的映射@RequstMapping 即可

其实SpringMVC请求原理很简单:说白了就是用一个DispatcherServlet 封装了一个Servlet的调度 中心, 由调度中心帮我们调用我们的处理方法: 在这个过程中调度中心委托给各个组件执行具体工作 ,比如帮我们映射方法请求、帮我解析参数、 调用处理方法、响应数据和页面 等

SpringMVC的具体执行流程

Spring MVC 是围绕前端控制器模式设计的,其中:中央 Servlet DispatcherServlet 为 请求处理流程提供统一调度,实际工作则交给可配置组件执行。这个模型是灵活的且开 放的,我们可以通过自己去定制这些组件从而进行定制自己的工作流。

 

DispatcherServlet: 前端调度器 , 负责将请求拦截下来分发到各控制器方法中

HandlerMapping: 负责根据请求的URL和配置@RequestMapping映射去匹配, 匹配到 会返回Handler(具体控制器的方法)
HandlerAdaper: 负责调用Handler-具体的方法- 返回视图的名字 Handler将它封装到 ModelAndView(封装视图名,request域的数据)

ViewReslover: 根据ModelAndView里面的视图名地址去找到具体的jsp封装在View对象中 View:进行视图渲染(将jsp转换成html内容 --这是Servlet容器的事情了) 最终response 到的客户端

1. 用户发送请求至前端控制器DispatcherServlet

2. DispatcherServlet收到请求调用处理器映射器HandlerMapping。
                a. 处理器映射器根据请求url找到具体的处理器,生成处理器 执行链HandlerExecutionChain(包括处理器对象和处理器拦截器)一并返回给DispatcherServlet。
3. DispatcherServlet根据处理器Handler获取处理器适配器 HandlerAdapter,执行HandlerAdapter处理一系列的操作,如:参数封 装,数据格式转换,数据验证等操作
4. 执行处理器Handler(Controller,也叫页面控制器)。

         a. Handler执行完成返回ModelAndView

          b. HandlerAdapter将Handler执行结果ModelAndView返回到DispatcherServlet
5. DispatcherServlet将ModelAndView传给ViewReslover视图解析器

                a. ViewReslover解析后返回具体View
6. DispatcherServlet对View进行渲染视图(即将模型数据model填充至视 图中)。
7. DispatcherServlet响应用户。

整个调用过程其实都在doDispatch中体现了:
1. 用户发送请求至前端控制器DispatcherServlet

           由于它是个Servlet会先进入service方法—— >doGet/doPost——>processRequestdoService—— >doDispatch ↓

这个doDispatch非常重要--体现了整个请求流程

 

详细过程我们课程中分析....

HandlerMapping

在整个过程中,涉及到非常多的组件,每个组件解析各个环节,其中 HandlerMapping最为重要它是用来映射请求的,我们就着重介绍下 HandlerMapping的解析过程和请求映射过程:

附上流程图:

https://www.processon.com/view/link/615ea79e1efad4070b2d6707

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值