Spring Mvc 源代码之我见 一
spring mvc 是一个web框架,包括controller、model、view 三大块。其中,核心在于model这个模块,用于处理请求的request。
和之前的博客一样,关键的代码,我会标注红色。
入口:DispatcherServlet 。这个类是spring mvc 中的类,如果不是spring mvc的框架,需要添加依赖,才能找到这个类。
先看下doc,看下spring mvc能做什么:
用于HTTP请求处理程序/控制器的中央dispatcher,例如用于web UI控制器或基于HTTP的远程服务导出器。向已注册的处理程序分派处理web请求,提供方便的映射和异常处理工具。这个servlet非常灵活:它可以与任何工作流一起使用,并安装适当的适配器类。它提供了以下功能,使其区别于其他请求驱动的web MVC框架:
1、它基于javabean配置机制
2、可以使用任何的HandlerMapping(匹配器)处理web请求,默认使用的是 org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping(基于bean的名字) 和 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping(基于注解)
3、可以使用任意的 Adapter(适配器),默认使用的适配器是 org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter 和 org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter。对于spring来说,则是 org.springframework.web.HttpRequestHandler 和 org.springframework.web.servlet.mvc.Controller。默认的注解适配器是:org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter。这个会在IOC初始化的时候被注册。
4、dispatcher的异常解析策略可以通过{@link HandlerExceptionResolver}指定,例如将某些异常映射到错误页面。默认的异常处理器是:org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver 、org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver、org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver。可以通过 application context来覆写这个这个异常处理器。
5、视图解析策略可以通过ViewResolver实现指定,将符号视图名称解析为视图对象。默认的视图处理器是:org.springframework.web.servlet.view.InternalResourceViewResolver。ViewResolver(通过类型被测试)可以作为bean添加到application context 中,用来覆盖默认的ViewResolver。如果用户没有提供View或View name,那么配置的 RequestToViewNameTranslator 将把当前请求转换为View name。对应的bean的名称是:viewNameTranslator。处理这个功能的默认的处理器是:org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
6、dispatcher 的解决流文件(文件、视频、音频)的策略是由 org.springframework.web.multipart.MultipartResolver 的实现决定。实现包括了Apache的通用文件上传和Servlet3。典型选择是:org.springframework.web.multipart.commons.CommonsMultipartResolver。这个beanname是:multipartResolver。默认的bean name是none。
7、注意:@RequestMapping 注解只有在dispatcher中存在对应的 HandlerMapping(类型级别的注解) 和 HandlerAdapter 才会生效。如果想使用自定义的@RequestMapping,那么需要确保自定义了对应的HandlderMapping和HandlerAdapter
8、一个Web application 可以自定义人一个DispatcherServlet。每一个servlet 会运行在独立的命名空间中,加载自己的application context、mappings、handlers。只有根application context 被 org.springframework.web.context.ContextLoaderListener 加载,并且被共享(如果有的话)。
9、从spring 3.1.1 开始, DispatcherServle 可以被注入到web application 中
Spring Mvc 源代码之我见 一的更多相关文章
- Spring Mvc 源代码之我见 二
上一篇简单介绍了spring mvc 的一些基本内容 和DispatcherServlet 的doc.这一篇将会继续写我对Spring Mvc 源代码的理解.直接上代码: /** * This imp ...
- springbank 开发日志 阅读spring mvc的源代码真是受益良多
决定模仿spring mvc的dispatcher->handlerMapping(return executorChain)->handler.execute 这样的流程之后,就开始看s ...
- 看透Spring MVC:源代码分析与实践 (Web开发技术丛书)
第一篇 网站基础知识 第1章 网站架构及其演变过程2 1.1 软件的三大类型2 1.2 基础的结构并不简单3 1.3 架构演变的起点5 1.4 海量数据的解决方案5 1.4.1 缓存和页面静态化5 1 ...
- 【转】Spring MVC中Session的正确用法之我见
Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...
- Spring MVC中Session的正确用法之我见
Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...
- 深入分析Spring 与 Spring MVC容器
1 Spring MVC WEB配置 Spring Framework本身没有Web功能,Spring MVC使用WebApplicationContext类扩展ApplicationContext, ...
- spring mvc DispatcherServlet详解之前传---FrameworkServlet
做项目时碰到Controller不能使用aop进行拦截,从网上搜索得知:使用spring mvc 启动了两个context:applicationContext 和WebapplicationCont ...
- Spring MVC学习笔记——SiteMesh的使用(转)
转自 SiteMesh的使用 SiteMesh的介绍就不多说了,主要是用来统一页面风格,减少重复编码的. 它定义了一个过滤器,然后把页面都加上统一的头部和底部. 需要先在WEB-INF/lib下引入s ...
- [Java] Maven 建立 Spring MVC 工程
GIT: https://github.com/yangyxd/Maven.SpringMVC.Web 1. 建立 WebApp 工程 下一步: 下一步: 选择 maven-archetype-web ...
随机推荐
- HP 电脑 - Windows 10 如何设置虚拟内存
HP 电脑 - Windows 10 如何设置虚拟内存(新) 适用于安装 Windows 10 系统的 HP 电脑 Windows 中运用了虚拟内存技术,即分出一部分硬盘空间来充当内存使用.当内存 ...
- k-NN——算法实现
k-NN 没有特别的训练过程,给定训练集,标签,k,计算待预测特征到训练集的所有距离,选取前k个距离最小的训练集,k个中标签最多的为预测标签 约会类型分类.手写数字识别分类 计算输入数据到每一个训练数 ...
- ShapeNet: An Information-Rich 3D Model Repository 阅读笔记
ShapeNet: An Information-Rich 3D Model Repository 注:本论文只是讲述数据库建立方法 摘要 ShapeNet是一个有丰富注释的大型形状存储库,由对象的3 ...
- IntelliJ:JUnit单元测试
0.参考 在Intellij IDEA中添加JUnit单元测试 - 唐啊唐囧囧 - 博客园 1.引言 JUnit是Java中很出名的一个单元测试,关于JUnit的具体介绍,可以看之前写的编写JUnit ...
- Vue 源码解读(12)—— patch
前言 前面我们说到,当组件更新时,实例化渲染 watcher 时传递的 updateComponent 方法会被执行: const updateComponent = () => { // 执行 ...
- 4.功能三:实现URL地址栏控制(15分) (1)获取到当前访问的控制器和方法(5分) (2)对当前访问的控制器和方法进行判断,有权限继续访问(5分) (3)无权限给出提示(5分)
<?php namespace app\admin\controller; use think\Controller; use think\Request; class Base extends ...
- Java有了synchronized,为什么还要提供Lock
摘要:在Java中提供了synchronized关键字来保证只有一个线程能够访问同步代码块.既然已经提供了synchronized关键字,那为何在Java的SDK包中,还会提供Lock接口呢? 本文分 ...
- mysql更改my.ini配置文件以后mysql服务无法启动
最近在调试mysql时,更改了mysql的端口以后发现,mysql怎么改都启动不了,从其它机器重新复制一个my.ini文件就可以启动,这是由于一般用记事本打开配置文件同时更改的ini的格式,我们需要重 ...
- Applied-Social-Network-Analysis-in-Python 相关笔记4
模型数据越多,Average系数就越小. perferential attachment model 有比较小的平均路径长度,但有着小的cc. rewire:重新连接 如果仅看这个共同的邻居数的话,数 ...
- svn服务支持网页显示并增加在线预览功能,支持视频在线播放
1.svn服务器支持网页显示 VisualSVN Server是一个非常不错的SVN Server程序,方便,直观,用户管理也异常方便.不过,它本身并没有提供在线修改密码的功能.由于在实际使用过程中, ...