Sping MVC是一个web开发框架,用于处理Http请求,那首先要做的第一件事情就是要为每个url找到对应的java类及方法。至于寻找的方式就有很多了,简单的做法,可以用一个Map保存所有url和“java类及方法”之间的映射;复杂一点的,使用注解来定义方法和url的关系……所以,自然而然的,我们可以抽象出一个接口来表示这个寻找动作,不同的人可以按照自己的需求订制这种寻找过程。
  那么这个接口应该如何设计呢,很容易想到的是,这个接口有一个方法,入参是HttpServletRequest,出参是java类和方法。那么问题的关键就落到了这个出参上面。关于出参的定义,最主要的是解决下面几个问题:

  • 返回的出参必须具有执行请求的能力,简单说就是能够解析入参,执行java方法,返回结果。要实现这个就比较复杂了,因为参数的解析方式多种多样,每个java类的会有很多方法,每个方法的出入参也千差万别。所以SpingMVC在设计的时候,将这个复杂的逻辑交给了HandleAdaptor,HandleMapping只需要返回需要执行的类就行了。
  • 以前,我们定义拦截器可以实现Filter接口,然后在web.xml配置需要拦截的path就行,但是这样的拦截器没法交给SpingMVC管理,为了实现统一的管理,SpringMVC实现自定义了拦截器接口。定义拦截器接口、实现拦截器都很简单,麻烦的时候,拦截器什么时候应该调用,应该拦截哪些请求。最好的办法是每次处理请求时,返回java类的时候,一并返回这次请求的拦截器。

基于上面的几点,于是乎就有了 HandleMapping接口。

public interface HandlerMapping {/*** 获取请求对应的处理类和拦截器*/HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;
}/*** 返回结果:包括具体的Handler,拦截器*/
public class HandlerExecutionChain {// 具体的Handler,不等同于Controller哟。因为HandlerMapping的实现方式有很多,最早的版本,其实handler就是实现了Controller接口的对象,后来的注解版本,其实已经是HandleMethod对象了。不管怎么样,这个handler就是一个可执行请求的对象。private final Object handler;// 拦截器数组,下面还有一个拦截器列表,为什么会有两个,待续……private HandlerInterceptor[] interceptors;private List<HandlerInterceptor> interceptorList;private int interceptorIndex = -1;// ………………此处省略一批方法
}

HandleMapping类图

SpringMVC自带的HandleMapping实现有3种。

  1. SimpleUrlHandlerMapping
  2. BeanNameUrlHandlerMapping
  3. RequestMappingHandlerMapping

Spring MVC分析篇——HandleMapping相关推荐

  1. Spring MVC使用篇(八)—— 处理器(Handler)方法的返回值

    文章目录 1.演示项目环境搭建 1.1 演示项目工程结构 1.2 演示项目依赖的基础jar包 1.3 配置web.xml 1.4 配置Spring MVC核心配置文件 2.返回ModelAndView ...

  2. 年终总结spring mvc 代码篇结合之前写的

    这个例子比较简单 实现的是spring mvc+jdbctemplate.下面有空会加入hibernate的实现.后续会加入quartz持久化的实现.lucene的简单用法等. web.xml < ...

  3. 《Spring揭秘》读书笔记 3:Spring MVC

    22 迈向Spring MVC的旅程 [参考]Java Web开发历程. 1) Servlet独行天下的时代. 一个Servlet对应处理一个Web请求.Servlet什么都做. 2) 繁盛一时的JS ...

  4. Spring MVC源码分析(一) 说明

    为什么会有这一个系列的文章 现在正值大学的第一个暑假,这个暑假我准备开始进入框架的学习,首先我选择的是Spring MVC框架,这是自己学的第一个框架,我在学习的过程中不断告诉自己,这一次不是单纯的学 ...

  5. 精尽Spring MVC源码分析 - 一个请求的旅行过程

    我们先来了解一个请求是如何被 Spring MVC 处理的,由于整个流程涉及到的代码非常多,所以本文的重点在于解析整体的流程,主要讲解 DispatcherServlet 这个核心类,弄懂了这个流程后 ...

  6. 看透 Spring MVC 源代码分析与实践 —— 俯视 Spring MVC

    Spring MVC Spring MVC 之初体验 环境搭建 在 IDEA 中新建一个 web 项目,用 Maven 管理项目的话,在 pom.xml 中加入 Spring MVC 和 Servle ...

  7. Spring MVC 源码分析

    根据上面分析的Spring MVC 工作机制,从三个部分来分析Spring MVC 的源代码. 其一,ApplicationContext 初始化时用Map 保存所有url 和Controller 类 ...

  8. Spring MVC 解读——@Autowired、@Controller、@Service从原理层面来分析

    Spring MVC 解读--@Autowired 一.@Autowired 作为一个Spring开发者对@Autowired注解必定是非常了解了, 顾名思义自动装配,应该是Spring会自动将我们标 ...

  9. Spring MVC 常用注解之 Controller 篇

    Shopping Without Vision 的 project 终于告一段落,teamwork 非常给力,中间也遇到很多困难,还好都一起克服了.这是做的第二个 Spring MVC  项目了,对这 ...

最新文章

  1. GEB:南土所梁玉婷组-大陆尺度下稻田土壤微生物β多样性的纬度分布特征
  2. import configparser config.read(config_path) 报错 UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x
  3. Fail2ban初识
  4. 2条电信宽带 并线_理想更新“货车并线预警”遭用户吐槽 李想:目前功能偏保守 仍在优化...
  5. numpy练习100道题
  6. 【 CodeForces - 799A 】Carrot Cakes(模拟,细节,有坑)
  7. python同时注释多行代码_python怎么同时对多行代码进行注释
  8. 嫌多(线程/进程)太慢? 嫌Scrapy太麻烦?没事,异步高调走起!——瓜子二手车
  9. 2019 年,C# 还值得学习吗?
  10. 开机后系统时间被恶意修改
  11. 66岁比尔盖茨离婚!27年前与下属恋爱修成正果,现在“无法共同成长”,分割8000亿财产...
  12. 为Android模拟器配置代理
  13. 服务器进销财务管理系统,进销存财务管理系统
  14. Java 阴阳历转换
  15. java贪吃蛇碰撞判定分析_java贪吃蛇碰撞检测
  16. 正则表达式在线生成网站推荐
  17. Paddle 印刷电路板(PCB)瑕疵检测
  18. 四VCO单声道/多声道合成器:KORG Polysix for mac
  19. 栈的初始化,入栈和出栈
  20. 量子计算机的运用原理,量子计算机的工作原理和运用?

热门文章

  1. Metrics-Server总结
  2. 移动开发的碎片化时代
  3. js获取元素的属性值和获取元素内容
  4. 【MySQL】数据库介绍以及MySQL数据库
  5. 越狱Season 1-Episode 11: And Then There Were 7-M
  6. android 触摸时震动,android触屏震动以及震动强度批改
  7. 三顾茅庐,四面阿里,28k*15offer,分享我的大厂面经
  8. 安慰奶牛 C++ kruskal
  9. vue-router使用history模式配置说明
  10. 有没有好用的文档翻译工具推荐?