Spring MVC分析篇——HandleMapping
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种。
- SimpleUrlHandlerMapping
- BeanNameUrlHandlerMapping
- RequestMappingHandlerMapping
Spring MVC分析篇——HandleMapping相关推荐
- Spring MVC使用篇(八)—— 处理器(Handler)方法的返回值
文章目录 1.演示项目环境搭建 1.1 演示项目工程结构 1.2 演示项目依赖的基础jar包 1.3 配置web.xml 1.4 配置Spring MVC核心配置文件 2.返回ModelAndView ...
- 年终总结spring mvc 代码篇结合之前写的
这个例子比较简单 实现的是spring mvc+jdbctemplate.下面有空会加入hibernate的实现.后续会加入quartz持久化的实现.lucene的简单用法等. web.xml < ...
- 《Spring揭秘》读书笔记 3:Spring MVC
22 迈向Spring MVC的旅程 [参考]Java Web开发历程. 1) Servlet独行天下的时代. 一个Servlet对应处理一个Web请求.Servlet什么都做. 2) 繁盛一时的JS ...
- Spring MVC源码分析(一) 说明
为什么会有这一个系列的文章 现在正值大学的第一个暑假,这个暑假我准备开始进入框架的学习,首先我选择的是Spring MVC框架,这是自己学的第一个框架,我在学习的过程中不断告诉自己,这一次不是单纯的学 ...
- 精尽Spring MVC源码分析 - 一个请求的旅行过程
我们先来了解一个请求是如何被 Spring MVC 处理的,由于整个流程涉及到的代码非常多,所以本文的重点在于解析整体的流程,主要讲解 DispatcherServlet 这个核心类,弄懂了这个流程后 ...
- 看透 Spring MVC 源代码分析与实践 —— 俯视 Spring MVC
Spring MVC Spring MVC 之初体验 环境搭建 在 IDEA 中新建一个 web 项目,用 Maven 管理项目的话,在 pom.xml 中加入 Spring MVC 和 Servle ...
- Spring MVC 源码分析
根据上面分析的Spring MVC 工作机制,从三个部分来分析Spring MVC 的源代码. 其一,ApplicationContext 初始化时用Map 保存所有url 和Controller 类 ...
- Spring MVC 解读——@Autowired、@Controller、@Service从原理层面来分析
Spring MVC 解读--@Autowired 一.@Autowired 作为一个Spring开发者对@Autowired注解必定是非常了解了, 顾名思义自动装配,应该是Spring会自动将我们标 ...
- Spring MVC 常用注解之 Controller 篇
Shopping Without Vision 的 project 终于告一段落,teamwork 非常给力,中间也遇到很多困难,还好都一起克服了.这是做的第二个 Spring MVC 项目了,对这 ...
最新文章
- GEB:南土所梁玉婷组-大陆尺度下稻田土壤微生物β多样性的纬度分布特征
- import configparser config.read(config_path) 报错 UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x
- Fail2ban初识
- 2条电信宽带 并线_理想更新“货车并线预警”遭用户吐槽 李想:目前功能偏保守 仍在优化...
- numpy练习100道题
- 【 CodeForces - 799A 】Carrot Cakes(模拟,细节,有坑)
- python同时注释多行代码_python怎么同时对多行代码进行注释
- 嫌多(线程/进程)太慢? 嫌Scrapy太麻烦?没事,异步高调走起!——瓜子二手车
- 2019 年,C# 还值得学习吗?
- 开机后系统时间被恶意修改
- 66岁比尔盖茨离婚!27年前与下属恋爱修成正果,现在“无法共同成长”,分割8000亿财产...
- 为Android模拟器配置代理
- 服务器进销财务管理系统,进销存财务管理系统
- Java 阴阳历转换
- java贪吃蛇碰撞判定分析_java贪吃蛇碰撞检测
- 正则表达式在线生成网站推荐
- Paddle 印刷电路板(PCB)瑕疵检测
- 四VCO单声道/多声道合成器:KORG Polysix for mac
- 栈的初始化,入栈和出栈
- 量子计算机的运用原理,量子计算机的工作原理和运用?