Spring MVC 请求处理流程概览
SpringMVC工作流程
图一:请求流程概述
图二:请求在每个组件的处理
解释Spring工作流程
1.用户向服务器发送请求,请求被spring前端控制Servelt DispatcherServelt捕获
2.DispatcherServelt解析URL得到URI(资源标识符),根据URI找到对应的要处理的Handler和相关对象(包括handler和对应的拦截器),最后以handlerExecutionChain对象的形式返回
3.DispatcherServelt根据的得到的Handler,选择合适的HandlerAdapter(如果成功找到HandlerAdapter后,将开始执行拦截器的preHandler方法)
4.提取Request中的模型数据,填充handler入参,开始执行Handler(controller),在填充参数入handler时,会帮你进行HttpMessageConveter(将请求消息转换成一个对象,将对象转换成指定的响应信息)数据验证,数据格式化,数据转换
5.handler执行完毕,返回一个ModelAndView对象给dispatcherServelt
6.dispatcherServelt根据返回的ModelAndView对象,找到一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServelt
7.ViewResolver结合Model和View来进行渲染视图
8.将渲染结果返回给前端
问:Spring为什么要结合HandlerMapping和HandlerAdapter来处理Handler?
答:符合面向对象的单一职责,代码结构清晰,可复用性高,HandlerAdapter可被用于处理各种Handler
1.dispatcherServelt接到请求,先查找合适的处理程序来处理请求,DispatcherServelt通过一个或者多个处理程序映射,将每个请求映射到处理程序中,处理程序映射配置在web应用程序的上下文中,是实现了HandlerMapping接口的bean,他负责为请求返回一个适当的处理程序(也就是controller)。处理程序映射通常根据请求的url将请求映射到处理程序
2.一旦dispatcherServelt找到合适的controller,就会调用这个controller来处理请求
3.控制器处理完请求之后,会把model和view返回给DispatcherServelt,model包含了控制器要传递给视图进行显示的属性,如果返回的是view名称,他会被解析成视图对象进行展示,绑定模型和视图的基本类就是MOdelAndView
4.当DispatcherServelt接收到模型和视图名称时,他会将逻辑视图名称解析成视图对象在进行呈现,DispatcherServelt从一个或者多个视图解析器中解析视图,视图解析器配置在web应用程序上下文中,是实现了ViewResolver接口的bean,他的任务是根据逻辑视图名称返回视图对象
5.当DispatcherServelt将视图名称解析成视图对象,他就会呈现视图对象,并传递控制器返回的模型,视图的任务是将模型属性展示给用户
问:DispatcherServelt接到请求后如何映射到controller?
在Spring MVC中,web请求被web应用程序上下文中声明的一个或者多个处理程序映射bean(实现了了HandlerMapping接口的)映射到controller,spring提供了几种HandlerMapping的实现:
1.BeanNameUrlHandlerMapping:根据controller bean名称中指定的url模式将请求映射到处理程序中
2.ControllerClassNameHandlerMapping:按控制器类名称映射请求
3.SimpleUrlHandlerMapping:用定制的映射定义来映射请求
Spring MVC 请求处理流程概览的更多相关文章
- Spring MVC请求处理流程
从web.xml中 servlet的配置开始, 根据servlet拦截的url-parttern,来进行请求转发 Spring MVC工作流程图 图一 图二 Spring工作流程描述 ...
- Spring mvc请求处理流程详解(一)之视图解析
本文链接:https://blog.csdn.net/lchpersonal521/article/details/53112728 前言 Spring mvc框架相信很多人都很熟悉了,关于这方面 ...
- ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程
好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人>: --> 开篇:上一篇 ...
- spring mvc处理流程概述
大部分Java应用都是Web应用,展现层是Web应用不可忽略的重要环节.Spring为展现层提供了一个优秀的Web框架-Spring MVC.和众多其他Web框架一样,它基于MVC设计理念,此外,它采 ...
- ASP.Net MVC请求处理流程
ASP.Net MVC请求处理流程 好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人& ...
- Spring MVC 编程流程步骤
Spring MVC 编程流程步骤 1. 建立Maven工程 2. 添加Spring MVC依赖 <dependencies> <dependency> <groupId ...
- asp.net mvc 请求处理流程,记录一下。
asp.net mvc 请求处理流程,记录一下.
- 一文读懂Spring MVC执行流程
说到Spring MVC执行流程,网上有很多这方面的文章介绍,但是都不太详细,作为一个初学者去读会有许多不理解的地方,今天这篇文章记录一下我学习Spring MVC的心得体会 话不多说,先上图: ...
- Java——一文读懂Spring MVC执行流程
说到Spring MVC执行流程,网上有很多这方面的文章介绍,但是都不太详细,作为一个初学者去读会有许多不理解的地方,今天这篇文章记录一下我学习Spring MVC的心得体会 话不多说,先上图: Sp ...
随机推荐
- get_category_recommend_goods的正确使用
get_category_recommend_goods($type = '', $cats = '', $brand = 0, $min =0, $max = 0, $ext='') 位于lib_ ...
- ORA-00918: 未明确定义列
ORA-00918: 未明确定义列 出现问题原因及解决办法. --正常写,结果带上表名的字段在处理后表头名称相同,在进行下一次嵌套时就会出现问题 select au.userxm,au01.user ...
- 在SrollView中嵌套GridView或ListView(转)
原文链接:http://blog.csdn.net/gaojinshan/article/details/17055511 我想在同一个界面中,使用两个GridView,两个GridView一起上下滚 ...
- 在my.ini文件中配置mysql统一字符集
测试的mysql版本为:5.7.14 查看mysql字符集命令: show variables like 'character_set_%'; 以下是在my.ini文件中配置mysql统一字符集参数: ...
- stick footer布局
需求: 将footer固定到底部.文章内容不足满屏时 footer在底部,超过满屏时footer在内容末尾. 方法一: <div id="wrap"> <div ...
- ios 获取当前设备信息、内存
//在[UIDevice currentDevice]中的属性 @property(nonatomic,readonly,strong) NSString *name; // e.g. "M ...
- 在mysql 5.6的环境下修改生产环境的表结构(在线ddl) ----工具pt-osc
随着需求的变化越来越快,在线修改表结构变得越来越需要. 在mysql5.6以前,mysql的修改表结构操作会锁表,这样就会造成开发人员或者DBA修改表结构必须要等到凌晨流量谷值或者停服修改.这样必定会 ...
- 第九章 Criteria查询及注解
第九章 Criteria查询及注解9.1 使用Criteria查询数据 9.1.1 条件查询 Criteria查询步骤: 1)使用session接口的cr ...
- IEnumerable<T>和IQueryable<T>
建议29.区别LINQ查询中的IEnumerable<T>和IQueryable<T> LINQ查询方法一共提供了两类扩展方法,在System.Linq命名空间下,有两个静态类 ...
- Go - 第一个 go 程序 -- helloworld
创建程序目录 接着上一节的内容,在我们的workspace (D:\Gopher) 里面创建子目录 hello,他的绝对路径为:D:\Gopher\src\github.com\tuo\hello 创 ...