spirngmvc处理请求流程总结:DispatcherServlet_晏无心_新浪博客

本文主要是介绍spirngmvc处理请求流程总结:DispatcherServlet_晏无心_新浪博客,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

springmvc的请求入口是DispatcherServlet(需要在web.xml里进行配置)。

一、DispatcherServlet初始化
1.DispatcherServlet提供了两个构造方法:
spirngmvc处理请求流程总结:DispatcherServlet

spirngmvc处理请求流程总结:DispatcherServlet
无参构造方法用于Servlet 2.5或更早的环境;
带参构造方法在Servlet 3.0及以后的环境中会用到。

2.DispatcherServlet在初始化时对springmvc.xml里配置的HandlerMapping、HandlerAdapter、ViewResolver等进行了实例化,并添加到list里(如果没有配置,则读取默认配置):
spirngmvc处理请求流程总结:DispatcherServlet
HandlerMapping、HandlerAdapter、ViewResolver的实例化和初始化步骤基本一致(以HandlerMapping为例):
a. 根据this.detectAllHandlerMappings标识判断是实例化所有配置的HandlerMapping,还是只实例化beanName为"handlerMapping"的bean;
b. HandlerMapping实例化后,添加到List中,并对list进行排序(根据HandlerMapping的order属性值);
c. 如果springmvc.xml里没有配置任何HandlerMapping,则从实例化默认配置的HandlerMapping。
spirngmvc处理请求流程总结:DispatcherServlet

spirngmvc处理请求流程总结:DispatcherServlet

spirngmvc处理请求流程总结:DispatcherServlet
默认的配置写在DispatcherServlet.properties文件里:
spirngmvc处理请求流程总结:DispatcherServlet
spirngmvc处理请求流程总结:DispatcherServlet
这样,DispatcherServlet就完成了初始化。采用的方式是在初始化时将HandlerMapping、HandlerAdapter、ViewResolver等加载到内存里,处理请求时,直接从内存里获取所需的bean。

二、DispatcherServlet处理请求
1.判断是否有文件数据,如果有,将request转换为multipartRequest:
spirngmvc处理请求流程总结:DispatcherServlet
2.通过HandlerMapping将请求映射到handler:
spirngmvc处理请求流程总结:DispatcherServlet

spirngmvc处理请求流程总结:DispatcherServlet
3.找到匹配handler的HandlerAdapter,将handler交给HandlerAdapter调用处理:
spirngmvc处理请求流程总结:DispatcherServlet

spirngmvc处理请求流程总结:DispatcherServlet
4.由HandlerAdapter来调用handler,处理请求,并返回ModelAndView对象:
spirngmvc处理请求流程总结:DispatcherServlet
5.由ViewResolver处理返回的ModelAndView对象,找到对应处理的View:
spirngmvc处理请求流程总结:DispatcherServlet
6.View对象对Model数据进行渲染,生成页面或者跳转等,将响应返回:
spirngmvc处理请求流程总结:DispatcherServlet

这样,DispatcherServlet处理一个请求的流程就走完了。

这里总结的是基本的流程,这些步骤之前还有很多小步骤,具体详细的实现,后续会一一分析。

这篇关于spirngmvc处理请求流程总结:DispatcherServlet_晏无心_新浪博客的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125912

相关文章

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

C# Task Cancellation使用总结

《C#TaskCancellation使用总结》本文主要介绍了在使用CancellationTokenSource取消任务时的行为,以及如何使用Task的ContinueWith方法来处理任务的延... 目录C# Task Cancellation总结1、调用cancellationTokenSource.

SpringBoot中Get请求和POST请求接收参数示例详解

《SpringBoot中Get请求和POST请求接收参数示例详解》文章详细介绍了SpringBoot中Get请求和POST请求的参数接收方式,包括方法形参接收参数、实体类接收参数、HttpServle... 目录1、Get请求1.1 方法形参接收参数 这种方式一般适用参数比较少的情况,并且前后端参数名称必须

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

Python中处理NaN值的技巧分享

《Python中处理NaN值的技巧分享》在数据科学和数据分析领域,NaN(NotaNumber)是一个常见的概念,它表示一个缺失或未定义的数值,在Python中,尤其是在使用pandas库处理数据时,... 目录NaN 值的来源和影响使用 pandas 的 isna()和 isnull()函数直接比较 Na