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 源代码之我见 一的更多相关文章

  1. Spring Mvc 源代码之我见 二

    上一篇简单介绍了spring mvc 的一些基本内容 和DispatcherServlet 的doc.这一篇将会继续写我对Spring Mvc 源代码的理解.直接上代码: /** * This imp ...

  2. springbank 开发日志 阅读spring mvc的源代码真是受益良多

    决定模仿spring mvc的dispatcher->handlerMapping(return executorChain)->handler.execute 这样的流程之后,就开始看s ...

  3. 看透Spring MVC:源代码分析与实践 (Web开发技术丛书)

    第一篇 网站基础知识 第1章 网站架构及其演变过程2 1.1 软件的三大类型2 1.2 基础的结构并不简单3 1.3 架构演变的起点5 1.4 海量数据的解决方案5 1.4.1 缓存和页面静态化5 1 ...

  4. 【转】Spring MVC中Session的正确用法之我见

    Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...

  5. Spring MVC中Session的正确用法之我见

    Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...

  6. 深入分析Spring 与 Spring MVC容器

    1 Spring MVC WEB配置 Spring Framework本身没有Web功能,Spring MVC使用WebApplicationContext类扩展ApplicationContext, ...

  7. spring mvc DispatcherServlet详解之前传---FrameworkServlet

    做项目时碰到Controller不能使用aop进行拦截,从网上搜索得知:使用spring mvc 启动了两个context:applicationContext 和WebapplicationCont ...

  8. Spring MVC学习笔记——SiteMesh的使用(转)

    转自 SiteMesh的使用 SiteMesh的介绍就不多说了,主要是用来统一页面风格,减少重复编码的. 它定义了一个过滤器,然后把页面都加上统一的头部和底部. 需要先在WEB-INF/lib下引入s ...

  9. [Java] Maven 建立 Spring MVC 工程

    GIT: https://github.com/yangyxd/Maven.SpringMVC.Web 1. 建立 WebApp 工程 下一步: 下一步: 选择 maven-archetype-web ...

随机推荐

  1. Spring Cloud Sleuth 和 Zipkin 进行分布式跟踪使用指南

    分布式跟踪允许您跟踪分布式系统中的请求.本文通过了解如何使用 Spring Cloud Sleuth 和 Zipkin 来做到这一点. 对于一个做所有事情的大型应用程序(我们通常将其称为单体应用程序) ...

  2. 【C# .Net GC】自动内存管理

    原文:https://docs.microsoft.com/zh-cn/dotnet/standard/automatic-memory-management 自动内存管理是公共语言运行时在托管执行过 ...

  3. Thread、ThreadPool 和 Task

    对 C# 开发者来说,不可不理解清楚 Thread.ThreadPool 和 Task 这三个概念.这也是面试频率很高的话题,在 StackOverflow 可以找到有很多不错的回答,我总结整理了一下 ...

  4. 怎么查看已安装的office的序列号?ospp.vbs是什么文件

    office2007查看方法:点击开始菜单→控制面板→系统和安全→系统把它往下拉.就可以看到你的序列号.也就是激活码和密匙了office2010查看方法:下载使用Product Key Finder. ...

  5. Oracle之集合运算

    交集 INTERSECT :取两个查询结果集的共有部分 SELECT DEPTNO FROM EMP INTERSECT SELECT DEPTNO FROM DEPT;   补集 MINUS :用第 ...

  6. C语言中一些知识点

    1.学编程:找代码,读代码,改代码,写代码:少看书.但少看不是不看,看一本书要限制在一天内.任务是通读书中主要的概念,明白大致是干什么用的,形成一个大概的框架:然后一周内干掉书中全部代码,代码不理解再 ...

  7. 前端好用API之getBoundingClientRect

    前情 在前端开发需求中,经常需要获取元素的尺寸位置相关的属性,以往的做法是调用不同api获取相关属性的. getBoundingClientRect介绍 getBoundingClientRect() ...

  8. petite-vue-源码剖析-v-for重新渲染工作原理

    在<petite-vue源码剖析-v-if和v-for的工作原理>我们了解到v-for在静态视图中的工作原理,而这里我们将深入了解在更新渲染时v-for是如何运作的. 逐行解析 // 文件 ...

  9. 矩池云上安装caffe gpu教程

    选用CUDA10.0镜像 添加nvidia-cuda和修改apt源 curl -fsSL https://mirrors.aliyun.com/nvidia-cuda/ubuntu1804/x86_6 ...

  10. 如何使用 PuTTY 远程连接矩池云主机

    PuTTY 是一款开源的连接软件,用来远程连接服务器,支持 SSH.Telnet.Serial 等协议. 矩池云的主机支持 SSH 登录,以下为使用 PuTTY 连接矩池云 GPU 的使用教程. 如您 ...