SpringMVC核心处理流程梳理

1、处理流程图展示

当我拿出这张图,阁下又该如何应对呢?执行流程是不是一目了然了。
在这里插入图片描述

2、DispatcherServlet:中央处理器或者中央调度器

在这里插入图片描述

下图官方的解释应该最完善了。
在这里插入图片描述

3、SpringMVC三大核心组件

  • HandlerMapping
    处理器映射器,作用是解析URL,返回执行链以及一些列所需的拦截器(DispatcherServlet源代码1030行的doDispatch(HttpServletRequest request, HttpServletResponse response)方法里面清晰地展示了执行流程,大家有兴趣了可以去看看,就是一个方法套方法的执行链条,最终将请求进行处理,直到返回ModelAndView。)
/*** Process the actual dispatching to the handler.* <p>The handler will be obtained by applying the servlet's HandlerMappings in order.* The HandlerAdapter will be obtained by querying the servlet's installed HandlerAdapters* to find the first that supports the handler class.* <p>All HTTP methods are handled by this method. It's up to HandlerAdapters or handlers* themselves to decide which methods are acceptable.* @param request current HTTP request* @param response current HTTP response* @throws Exception in case of any kind of processing failure*/@SuppressWarnings("deprecation")// 最核心的请求、响应处理方法protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception //封装好的请求实例HttpServletRequest processedRequest = request;// 处理器执行责任链HandlerExecutionChain mappedHandler = null;//是否是多媒体文件请求boolean multipartRequestParsed = false;//WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);try {ModelAndView mv = null;Exception dispatchException = null;try {processedRequest = checkMultipart(request);multipartRequestParsed = (processedRequest != request);// 传递请求,最终初始化处理器映射器mappedHandler = getHandler(processedRequest);if (mappedHandler == null) {noHandlerFound(processedRequest, response);return;}// 根据前面的处理器映射器初始化处理器适配器HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());// 拿到请求方式String method = request.getMethod();//是否是GET请求boolean isGet = HttpMethod.GET.matches(method);if (isGet || HttpMethod.HEAD.matches(method)) {long lastModified = ha.getLastModified(request, mappedHandler.getHandler());if (new ServletWebRequest(request, response).checkNotModified(lastModified) && isGet) {return;}}if (!mappedHandler.applyPreHandle(processedRequest, response)) {return;}// 真正的处理请求,并返回模型和视图mv = ha.handle(processedRequest, response, mappedHandler.getHandler());if (asyncManager.isConcurrentHandlingStarted()) {return;}applyDefaultViewName(processedRequest, mv);mappedHandler.applyPostHandle(processedRequest, response, mv);}catch (Exception ex) {dispatchException = ex;}catch (Throwable err) {// As of 4.3, we're processing Errors thrown from handler methods as well,// making them available for @ExceptionHandler methods and other scenarios.dispatchException = new NestedServletException("Handler dispatch failed", err);}// 封装视图结果processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);}catch (Exception ex) {triggerAfterCompletion(processedRequest, response, mappedHandler, ex);}catch (Throwable err) {triggerAfterCompletion(processedRequest, response, mappedHandler,new NestedServletException("Handler processing failed", err));}finally {if (asyncManager.isConcurrentHandlingStarted()) {// Instead of postHandle and afterCompletionif (mappedHandler != null) {mappedHandler.applyAfterConcurrentHandlingStarted(processedRequest, response);}}else {// Clean up any resources used by a multipart request.if (multipartRequestParsed) {cleanupMultipart(processedRequest);}}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BUUCTF——Reverse——内涵的软件

1、题目 2、工具 Exeinfo PE&#xff1a;查壳工具。IDA&#xff1a;是一款功能强大的反汇编工具&#xff0c;用于分析和逆向工程二进制文件。 3、方法 下载文件&#xff0c;得到一个.exe文件。 打开该文件&#xff0c;尝试输入Y和N。 用Exeinfo PE查询该文件是否加了壳。 可…

基于图搜索的自动驾驶规划算法 - BFS,Dijstra,A*

本文将讲解BFS&#xff0c;Dijstra&#xff0c;A*&#xff0c;动态规划的算法原理&#xff0c;不正之处望读者指正&#xff0c;希望有兴趣的读者能在评论区提出一些这些算法的面试考点&#xff0c;共同学习&#xff0c;一起进步 0 图论基础 图有三种&#xff1a;无向图、有向…

11.Go 列表

列表是一种非连续的存储容器&#xff0c;由多个节点组成&#xff0c;节点通过一些变量记录彼此之间的关系&#xff0c;列表有多种实现方法&#xff0c;如单链表、双链表等。 在Go语言中&#xff0c;列表使用container/list包来实现&#xff0c;内部的实现原理是双链表&#xf…

物理模拟重力 斜抛运动计算 抛物线计算

物理模拟重力 斜抛运动计算 抛物线计算 一、介绍二、原理三、实现如下PhysicsUtil.cs 工具类Missile.cs 四、资源分享 一、介绍 模拟Unity原始重力系统进行重写&#xff0c;可是实现发射到指定目标位置并能继续当前力进行自身的弹力与摩擦继续运动 二、原理 将Unity原始不受控…

​一个人成长最快的方式

一个人成长最快的方式就是&#xff1a;保持阅读&#xff0c;向行业的专家学习&#xff0c;在实践中不断的复盘总结&#xff0c;循环这三点&#xff0c;没有学不好的东西。基于此&#xff0c;推荐一些在产品、设计领域的专家&#xff0c;关注他们&#xff0c;学习他们&#xff0…

springcloud 服务网关Zuul实战(二)路由访问映射规则

上篇文中已经讲完基本的路由配置&#xff0c;但是我们如何对访问的微服务做映射 访问的地址&#xff1a;http://myzuul.com:9527/microservicecloud-dept/dept/get/2 从访问地址可以分析出我们真实的微服务名字&#xff0c;我们为了安全起见将真实的微服务名字隐藏&#xff0…

B端 — 卡片式列表设计

作者&#xff1a;Nick&#xff08;转载已取得作者授权&#xff09;卡片式列表是一种很好的集合信息的方式&#xff0c;它既有好处也有弊端&#xff0c;因此需要根据场景和内容确定展现形式。本文结合了案例与大家分享一下卡片式列表设计的一些思考。一、定义1. 什么是卡片物理世…

springcloud config配置中心概述

Spring Cloud Config简介 Spring Cloud Config 是 Spring Cloud 家族中最早的配置中心&#xff0c;虽然后来又发布了 Consul 可以代替配置中心功能&#xff0c;但是 Config 依然适用于 Spring Cloud 项目&#xff0c;通过简单的配置即可实现功能。 配置文件是我们再熟悉不过的…

【计算机四级(网络工程师)笔记】操作系统运行机制

目录 一、中央处理器&#xff08;CPU&#xff09; 1.1CPU的状态 1.2指令分类 二、寄存器 2.1寄存器分类 2.2程序状态字&#xff08;PSW&#xff09; 三、系统调用 3.1系统调用与一般过程调用的区别 3.2系统调用的分类 四、中断与异常 4.1中断 4.2异常 &#x1f308;嗨&#xff…

springcloud config服务端配置(一)

用自己GitHub账号在GitHub上新建一个microservicecloud-config的新的repository 又上一步我们得到了ssh的git地址 gitgithub.com:470812087/microservicecloud-config.git 本地目录新建&#xff08;F:\JAVA\ideaIU\microservicecloud-config-repository&#xff09;仓库并…

解决git@github.com: Permission denied (publickey). Could not read from remote repository

原因分析 Permission denied (publickey) 没有权限的publickey &#xff0c;出现这错误一般是以下两种原因 客户端与服务端未生成 ssh key客户端与服务端的ssh key不匹配 找到问题的原因了&#xff0c;解决办法也就有了&#xff0c;重新生成一次ssh key &#xff0c;服务端也…

springcloud config服务端配置(二)

接着上一篇把把本地仓库yml文件推送到github之后&#xff0c;下面我们就是实战了&#xff0c;各个微服务如何读取到远程仓库的的yml文件配置 一&#xff0c;新建一个Module模块microservicecloud-config-3344 它即为Cloud配置中心模块 二&#xff0c;pom文件添加依赖 <?xm…

C4996    'fopen': This function or variable may be unsafe

C4996 fopen: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 在工程文件处右击&#xff0c;选择属性->配置属性->C/C->预处理器 加入一个_CR…

使用postman操作ElasticSearch

下载安装好postman之后 添加索引blog1&#xff08;因为ElasticSearch是restful请求所以我们用postman发送http请求给ElasticSearch&#xff09; { "mappings":{ "article":{ "properties":{ "i…

图像处理基本算法-形态学

形态学一般是使用二值图像&#xff0c;进行边界提取&#xff0c;骨架提取&#xff0c;孔洞填充&#xff0c;角点提取&#xff0c;图像重建。基本的算法:膨胀腐蚀&#xff0c;开操作&#xff0c;闭操作&#xff0c;击中击不中变换 几种算法进行组合&#xff0c;就可以实现一些非…

使用kibana客户端工具操作ElasticSearch(增删改查一)

&#xff08;因为ElasticSearch是restful请求所以 get post put delete这四种常见的请求&#xff09; put添加数据 get获取数据 #创建索引库lib 并且对索引库做了分片和备份&#xff08;由于这里是单机的ElasticSearch备份0&#xff09; PUT /lib/ {"settings"…

kibana客户端工具操作ElasticSearch(增删改查二)

#不指定id情况下 ElasticSearch自动生成id PUT /lib/user/ {"first_name":"Douglas","last_name":"Fir","age":23,"about":"I like to build cabinets","interests":["forestry"] …

机器学习笔记(一) : 线性建模——最小二乘法

讨论这个方法之前&#xff0c;先说些题外话。首先&#xff0c;我感觉机器学习是一门值得我们去了解和学习的一门技术&#xff0c;它不仅仅应用于我们的生活&#xff0c;而且不断地在改变着我们的方方面面。虽然很早就已经接触它&#xff0c;并开始学习&#xff0c;但是总体感觉…

ElasticSearch快速入门(一)介绍

Devops运维 ● Node(节点):单个的装有Elasticsearch服务并且提供故障转移和扩展的服务 器。 ●Cluster (集群) :一-个集群就是由一个或多个node组织在一 起&#xff0c;共同工作&#xff0c; 共同分享整个数据具有负载均衡功能的集群。 ● Document (文档) : -一个文档是-一个可…

flash遨游缓存问题

来源&#xff1a;http://leftice.iteye.com/blog/806605 Flash需要和JS交互,但是在ie外壳浏览器下,有时候缓存会导致页面刷新后flash无法工作. 会报出SecurityError. 这是因为Flash并没有完全准备好,就尝试和JS交互导致的问题. 解决的问题方式有几种: 1.在页面上设置不缓存,网上…