Spring MVC的执行流程【java技术面试视频#50】
2.5.6 简单讲一下SpringMVC的执行流程?
1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;
2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;
3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)
4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
5. Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;
6. 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;
7. ViewResolver 结合Model和View,来渲染视图
8. 将渲染结果返回给客户端。
面试:
1、用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获(捕获)
2、 DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;(查找handler)
3、 DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller), Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象(执行handler)
4、DispatcherServlet 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver) (选择ViewResolver)
5、通过ViewResolver 结合Model和View,来渲染视图,DispatcherServlet 将渲染结果返回给客户端。(渲染返回)
快速记忆技巧:
核心控制器捕获请求、查找Handler、执行Handler、选择ViewResolver,通过ViewResolver渲染视图并返回
Видео Spring MVC的执行流程【java技术面试视频#50】 канала 做一个善良的人
1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;
2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;
3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)
4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
5. Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;
6. 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;
7. ViewResolver 结合Model和View,来渲染视图
8. 将渲染结果返回给客户端。
面试:
1、用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获(捕获)
2、 DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;(查找handler)
3、 DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller), Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象(执行handler)
4、DispatcherServlet 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver) (选择ViewResolver)
5、通过ViewResolver 结合Model和View,来渲染视图,DispatcherServlet 将渲染结果返回给客户端。(渲染返回)
快速记忆技巧:
核心控制器捕获请求、查找Handler、执行Handler、选择ViewResolver,通过ViewResolver渲染视图并返回
Видео Spring MVC的执行流程【java技术面试视频#50】 канала 做一个善良的人
Показать
Комментарии отсутствуют
Информация о видео
Другие видео канала
![如何看待第一份工作【应届生的程序员之路#2】](https://i.ytimg.com/vi/nxGhr6t_uu4/default.jpg)
![龙卷风](https://i.ytimg.com/vi/hq1P-3Q1VxI/default.jpg)
![简单介绍了一下Ajax【java技术面试视频#37】](https://i.ytimg.com/vi/lbAJ-qfkY-M/default.jpg)
![内置对象和四大作用域和页面传值【java技术面试视频#21】](https://i.ytimg.com/vi/w1EG08obAwQ/default.jpg)
![讲一下java中的集合【java技术面试视频#9】](https://i.ytimg.com/vi/wQtl3N3MfkE/default.jpg)
![http get post请求的区别?【java技术面试视频#16】](https://i.ytimg.com/vi/edJCba_haeo/default.jpg)
![【全明星】发如雪](https://i.ytimg.com/vi/-KnLrWx_mSE/default.jpg)
![Servlet中forward和redirect的区别【java技术面试视频#19】](https://i.ytimg.com/vi/LE9JKVPrqog/default.jpg)
![如何应对技术面试【应届生的程序员之路#1】](https://i.ytimg.com/vi/vhDi3ZlqC4M/default.jpg)
![SpringMVC和Struts2的不同比较重要【java技术面试视频#51】](https://i.ytimg.com/vi/1zmpsv7nVcY/default.jpg)
![Session和Cookie的区别和使用场景【java技术面试视频#22】](https://i.ytimg.com/vi/ctjDrJHEIyM/default.jpg)
![HashMap和HashTable的区别【java技术面试视频#11】](https://i.ytimg.com/vi/EjyEjdLOnkw/default.jpg)
![线程并发库和线程池的作用?【java技术面试视频#14】](https://i.ytimg.com/vi/0dc1MOvIkN0/default.jpg)
![bootstrap的是什么【java技术面试视频#44】](https://i.ytimg.com/vi/t-TEMUJgrmY/default.jpg)
![java面向对象的特征【java技术面试视频#5】](https://i.ytimg.com/vi/JNXyRzxynaw/default.jpg)
![【Rap】舌战群儒的历史真相竟是这样](https://i.ytimg.com/vi/jXxPubJHcx4/default.jpg)
![什么是框架?【java技术面试视频#45】](https://i.ytimg.com/vi/y8Z0h90jwxk/default.jpg)
![搭建一个java的开发环境【java技术面试视频#3】](https://i.ytimg.com/vi/PiuY3f9JeZE/default.jpg)
![面试的整体流程【java技术面试视频#1】](https://i.ytimg.com/vi/I7pf23IiZwU/default.jpg)
![我把魔兽世界给毁了](https://i.ytimg.com/vi/iF1aNRNfU1I/default.jpg)
![简单介绍一下MVC模式?【java技术面试视频#46】](https://i.ytimg.com/vi/1xZO4-PMILA/default.jpg)