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. PyTorch 中的乘法:mul()、multiply()、matmul()、mm()、mv()、dot()

    torch.mul() 函数功能:逐个对 input 和 other 中对应的元素相乘. 本操作支持广播,因此 input 和 other 均可以是张量或者数字. 举例如下: >>> ...

  2. Delegate 委托细说

    目录 委托的申明 委托的赋值 委托实例方法的使用C#Invoke\BeginInvoke\Endinoke  系统自带的委托Action.Action<T>.Func<T>.P ...

  3. 【C#】String| StringBuilder 字符

    原文链接:https://www.cnblogs.com/huameitang/p/10528646.html 字符串是用于表示文本的字符的有序集合. String对象是对象的有序集合 System. ...

  4. tput用法详解-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年2月28日 tput 命令将通过 terminfo 数据库对终端会话进行初始化和操作. 主要功能为:移动更改光标.更改文本属性颜色.清除屏幕特定区域. ...

  5. c++ cgi执行shell命令l发送qq邮件mailx

    #include <cstdlib> //随机数 #include <iostream> #include <cstdio> //popen函数调用的需要 #inc ...

  6. 判断访问类型是pc端还是移动端

    /**      * 判断访问类型是电脑还是手机      */     $(function(){         var mobile_flag = isMobile(); // true为PC端 ...

  7. openpyxl模块的读写使用及mongodb概念

    今日内容概要 openpyxl模块 MongoDB数据库 今日内容详细 openpyxl模块 # 下载 pip3 install openpyxl # 使用 '''openpyxl内部读写也是分离的 ...

  8. C# 反编译工具之dnSpy

    下载地址:https://github.com/0xd4d/dnSpy/releases无需安装,和 ILSPY同门,感觉比ILSPY还强大 直接把dll拖拽到程序集资源管理器里面就可以啦

  9. @Async的用法和示例

    @Async 注解的用法和示例 目录 @Async 注解的用法和示例 背景 异步调用 @Async介绍 在Spring中启用@Async 示例一:基本使用方式 示例二:在同一个类中调用异步方法 示例三 ...

  10. 微信小程序获取当前的时间戳

    js文件中进行计算var timestamp = Date.parse(new Date()); timestamp = timestamp / 1000; console.log(timestamp ...