一、DispathcherServlet结构分析

1)、所有请求过来DispatcherServlet收到请求,

2)、调用doDispatch()方法进行处理

1)、getHandler():根据当前请求地址找到能处理这个请求的目标处理器类(处理器)

根据当前请求在HandlerMapping中找到这个请求的映射信息,获取到目标处理器类

2)、getHandlerAdapter():根据当前处理器类获取到能执行这个处理器方法的适配器;

根据当前处理器类,找到当前类的HandlerAdapter(适配器)

3)、使用刚才获取到的适配器(AnnotationMethodHandlerAdapter )执行目标方法handler;

4)、目标方法执行后会返回一个ModelAndView对象

5)、根据ModelAndView的信息转发到具体的页面,并可以在请求域中取出ModelAndView中的模型数据

二、HandlerMapping保存请求映射信息

1)、getHandler()会返回目标处理器类的执行链

mappedHandler=getHandle(processedRequest)返回mappedHandler对象即处理器执行链(包含handler目标处理器类,包含interceptor拦截器)

2)、getHandler()细节:怎么根据当前请求就能找到哪个类能来处理?

HandlerMapping:处理器映射:他里面保存了每一个处理器能处理哪些请求的映射信息

handlerMap:

ioc容器启动创建Controller对象的时候扫描每个处理器都能处理什么请求,保存在HandlerMapping的handlerMap属性中;

下一次请求过来,就来看哪个HandlerMapping中有这个请求映射信息就行了;

三、HandlerAdapter处理目标方法

根据目标处理器类的执行链,找到handler,进一步找到与handler对相应的HandlerAdapter

HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());

AnnotationMethodHandlerAdapter:能解析注解方法的适配器;

处理器类中只要有标了注解的这些方法就能用;

【串线篇】SpringMvc源码分析的更多相关文章

  1. 7、SpringMVC源码分析(2):分析HandlerAdapter.handle方法,了解handler方法的调用细节以及@ModelAttribute注解

    从上一篇 SpringMVC源码分析(1) 中我们了解到在DispatcherServlet.doDispatch方法中会通过 mv = ha.handle(processedRequest, res ...

  2. springmvc源码分析系列-请求处理流程

    接上一篇-springmvc源码分析开头片 上一节主要说了一下springmvc与struts2的作为MVC中的C(controller)控制层的一些区别及两者在作为控制层方面的一些优缺点.今天就结合 ...

  3. springmvc 源码分析(一)-- DisparcherServlet的创建和注册到tomcat

    一. servlet 3.0 的使用 1.1 环境搭建: servlet跟spring没有任何关系,我创建一个servlet可以不依赖spring,现在搭建一个纯的servlet项目,并实现简单的类似 ...

  4. springMVC源码分析--ViewNameMethodReturnValueHandler返回值处理器(三)

    之前两篇博客springMVC源码分析--HandlerMethodReturnValueHandler返回值解析器(一)和springMVC源码分析--HandlerMethodReturnValu ...

  5. springMVC源码分析--HandlerMethodReturnValueHandlerComposite返回值解析器集合(二)

    在上一篇博客springMVC源码分析--HandlerMethodReturnValueHandler返回值解析器(一)我们介绍了返回值解析器HandlerMethodReturnValueHand ...

  6. springMVC源码分析--RequestParamMethodArgumentResolver参数解析器(三)

    之前两篇博客springMVC源码分析--HandlerMethodArgumentResolver参数解析器(一)和springMVC源码解析--HandlerMethodArgumentResol ...

  7. springMVC源码分析--访问请求执行ServletInvocableHandlerMethod和InvocableHandlerMethod

    在之前一篇博客中springMVC源码分析--RequestMappingHandlerAdapter(五)我们已经简单的介绍到具体请求访问的执行某个Controller中的方法是在RequestMa ...

  8. springMVC源码分析--RequestMappingHandlerAdapter(五)

    上一篇博客springMVC源码分析--HandlerAdapter(一)中我们主要介绍了一下HandlerAdapter接口相关的内容,实现类及其在DispatcherServlet中执行的顺序,接 ...

  9. springMVC源码分析--HttpRequestHandlerAdapter(四)

    上一篇博客springMVC源码分析--HandlerAdapter(一)中我们主要介绍了一下HandlerAdapter接口相关的内容,实现类及其在DispatcherServlet中执行的顺序,接 ...

  10. springMVC源码分析--SimpleControllerHandlerAdapter(三)

    上一篇博客springMVC源码分析--HandlerAdapter(一)中我们主要介绍了一下HandlerAdapter接口相关的内容,实现类及其在DispatcherServlet中执行的顺序,接 ...

随机推荐

  1. python基础知识1

    1.何为json? json 是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据.简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言. 易于人阅读和编写,同时也易于机 ...

  2. boost propertyTree

    Boost PropertyTree provides a tree structure to store key/value pairs. Tree structures means that a ...

  3. 重磅干货免费下载!阿里云RDS团队论文被数据库顶会SIGMOD 2018收录

    ACM SIGMOD数据管理国际会议是由美国计算机协会(ACM) 数据管理专业委员会(SIGMOD)发起.在数据库领域具有最高学术地位的国际性学术会议. SIGMOD和另外两大数据库会议VLDB.IC ...

  4. Invalid bound statement (not found)错误

    都对着,为什么会报这个错呢,mapper也拿到了,为什么查询时出错呢,最后看target里编译的文件发现少了mapping,xml没编译过去. 我的目录结构:dao层都编译过去了,但mapper.xm ...

  5. flutter动态列表

    在前面一篇总结flutter里面的列表组件ListView的时候,一直都是使用的静态数据,但是在实际的运用过程中,数据都是从后台获取的动态数据,不能再像前面那样写静态数据了,下面模拟一下如果使用动态数 ...

  6. VS2010MFC编程入门

    一.MFC编程入门教程之目录 第1部分:MFC编程入门教程之目录 1.MFC编程入门之前言  鸡啄米的C++编程入门系列给大家讲了C++的编程入门知识,大家对C++语言在语法和设计思想上应该有了一定的 ...

  7. LOJ 6435 「PKUSC2018」星际穿越——DP+倍增 / 思路+主席树

    题目:https://loj.ac/problem/6435 题解:https://www.cnblogs.com/HocRiser/p/9166459.html 自己要怎样才能想到怎么做呢…… dp ...

  8. 27 October in ss

    Contest A. chrono 计算某年的干支纪年法年份. Too easy. 然而我忘记 C++ 取模运算是向0取整.然而数据太水,还是有 90 分. B. clock 计算某时刻时针和分针的夹 ...

  9. 父元素a标签的href默认行为以及子元素绑定的click事件的响应之间存在影响

    原文地址 背景 开发过程中遇到问题,简单写个demo 运行环境为Chrome 68 描述一下这个问题,当a标签内部存在嵌套时, 父元素a标签的href默认行为以及子元素绑定的click事件的响应之间存 ...

  10. 106、TensorFlow变量 (二) reshape

    import tensorflow as tf rank_three_tensor = tf.ones([3, 4, 5]) # 创建一个[3,4,5]大小的张量,3行4列,每个位置上有五个元素 ma ...