带着问题学 Spring MVC 源码: 一、概述
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!
简单就好,生活可以很德国
Q:什么是 Spring MVC ? ※
Spring MVC 是 Spring Web 的一个重要模块。Spring 支持 Web 应用,Spring MVC 是对 MVC 模式的支持。
Q:MVC 模式? ※
MVC 模式是种经典的软件架构,分 Model 模型、View 视图及 Controller 控制器 三种角色。架构的意图明显区分三种角色的职责,使其不相互依赖。Java 领域最经典的实现 JSP + Servlet + JavaBean,后续也陆续出来了众多优秀框架,SSH 中的 Struts ,还有 SSM 中的 Spring MVC 等。
Q: Spring 还要什么其他模块? Web?IOC 容器?AOP?※
IOC 容器模块、AOP 模块都是。还有数据访问/集成、Web 等模块都是。这里其他不展开讲,其中 Web 模块建立在 IOC 容器之上,要记住。
来自官网的模块图:
Q: Web 模块包含 springmvc 吗? ※
包含。Web 模块包含 spring-web、spring-webmvc、spring-websocket和spring-webmvc-portlet。其中 web-mvc 是我们要学习源码包。
1. spring-web 模块提供基本 Web 集成功能,包括初始化 IOC 容器等工作。
2. spring-webmvc 包含 MVC 模式的实现和 REST Web 服务的实现。该模块基于了 spring-web 模块。
资料来源自:官方文档 MVC 章节,其他模块具体参考官网。
Q: spring-webmvc 模块具体包含什么内容? ※
spring-webmvc 模块里面包:
- org.springframework.web.servlet
提供与应用程序上下文基础结构集成的 Servlet,以及 Spring web MVC 框架的核心接口和类。- org.springframework.web.servlet.mvc
Spring 附带的 Servlet MVC 框架的标准控制器实现。
- org.springframework.web.servlet.mvc.annotation
用于基于注解的 Servlet MVC 控制器的支持包。- org.springframework.web.servlet.mvc.condition
用于根据条件匹配传入请求的公共 MVC 逻辑。- org.springframework.web.servlet.mvc.method
用于处理程序方法处理的基于 Servlet 的基础结构,基于在 org.springframework.web.method 包上。- org.springframework.web.servlet.view
提供标准的 View 和 ViewResolver 实现,包括自定义实现的抽象基类。
- org.springframework.web.servlet.view.freemarker
支持将 FreeMarker 集成为 Spring Web 视图技术的类。- org.springframework.web.servlet.view.json
支持提供基于 JSON 序列化的 View 实现的类。上面列出来核心的包。org.springframework.web.servlet.view 包中, View 视图实现有常见的:JSON 、FreeMarker 等。org.springframework.web.servlet.mvc 包中,Controller 控制层实现包括了注解、程序方法处理等封装。自然,看源码先从 org.springframework.web.servlet 包看其核心的接口和类。
Q: 核心类和接口有哪些? ※
DispatcherServlet 类:调度HTTP请求控制器(或者处理器Handler)。
View 视图层
ModelAndView 类:模型和视图的持有者。
View 接口:MVC WEB 交互。该接口的实现负责呈现视图或者暴露模型。
Controller 控制层
HandlerMapping 接口: 请求从 DispacherServlet 过来,该接口定义请求和处理程序对象之间的映射。
HandlerInterceptor 接口:处理程序的执行链接口。
Q: 又是 MVC 的样子,还有吗? ※
哦。对了还有张图:
所以重要的类还有 ViewResolver、HandleAdapter等。
Q: 谢谢,下篇聊什么?
当然聊重要类的源码实现咯~,下篇见。
如以上文章或链接对你有帮助的话,别忘了在文章结尾处评论哈~ 你也可以点击页面右边“分享”悬浮按钮哦,让更多的人阅读这篇文章。
带着问题学 Spring MVC 源码: 一、概述的更多相关文章
- Spring MVC源码——Servlet WebApplicationContext
上一篇笔记(Spring MVC源码——Root WebApplicationContext)中记录了下 Root WebApplicationContext 的初始化代码.这一篇来看 Servlet ...
- Spring mvc源码分析系列--前言
Spring mvc源码分析系列--前言 前言 距离上次写文章已经过去接近两个月了,Spring mvc系列其实一直都想写,但是却不知道如何下笔,原因有如下几点: 现在项目开发前后端分离的趋势不可阻挡 ...
- Spring MVC源码——Root WebApplicationContext
目录 Spring MVC源码--Root WebApplicationContext 上下文层次结构 Root WebApplicationContext 初始化和销毁 ContextLoaderL ...
- spring mvc源码-》MultipartReques类-》主要是对文件上传进行的处理,在上传文件时,编码格式为enctype="multipart/form-data"格式,以二进制形式提交数据,提交方式为post方式。
spring mvc源码->MultipartReques类-> MultipartReques类主要是对文件上传进行的处理,在上传文件时,编码格式为enctype="multi ...
- 精尽Spring MVC源码分析 - 寻找遗失的 web.xml
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- 精尽Spring MVC源码分析 - 调式环境搭建
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- 精尽Spring MVC源码分析 - 文章导读
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- 精尽Spring MVC源码分析 - WebApplicationContext 容器的初始化
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- 精尽Spring MVC源码分析 - 一个请求的旅行过程
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
随机推荐
- 分分钟用上C#中的委托和事件之窗体篇
上次以鸿门宴的例子写了一篇名为<分分钟用上C#中的委托和事件>的博文,旨在帮助C#初学者迈过委托和事件这道坎,能够用最快的速度掌握如何使用它们.如果觉得意犹未尽,或者仍然不知如何在实际应用 ...
- uv纹理坐标设定与贴图规则
1.什么是UV? 对于三维模型,有两个最重要的坐标系统,一是顶点的位置(X,Y,Z)坐标,另一个就是UV坐标.什么是UV?简单的说,就是贴图影射到模型表面的依据. 完整的说,其实应该是UVW(因为 ...
- webpy使用笔记(二) session/sessionid的使用
webpy使用笔记(二) session的使用 webpy使用系列之session的使用,虽然工作中使用的是django,但是自己并不喜欢那种大而全的东西~什么都给你准备好了,自己好像一个机器人一样赶 ...
- Express 4 更新改变文档
概览 从 Express 3 到Express 4 是一个巨大的变化,这意味着现存的 Express 3 应用在不更新依赖的情况下将不能工作. 这篇文章涵盖一下内容: Express 4 中的变化 一 ...
- 从range和xrange的性能对比到yield关键字(上)
使用xrange 当我们获取某个数量的循环时,我们惯用的手法是for循环和range函数,例如: for i in range(10): print i 这里range(10)生成了一个长度为10 ...
- 关于《精通移动App测试实战:技术、工具和案例》图书勘误信息
首先,对由于我们工作的疏忽向<精通移动App测试实战:技术.工具和案例>读者朋友们表示歉意,同时已将这些问题反馈给了出版社编辑同志,再版时将会统一修正: 其次,勘误信息请参看附件pdf文档 ...
- GO語言基礎教程:數組,切片,map
這節課我們來講解數組,切片和map,或許您是從其他語言轉到GO語言這邊的,那麼在其他語言的影響下您可能會不太適應GO語言的數組,因為GO語言把數組給拆分成了array,slice和map,接下來的時間 ...
- APP顶号逻辑
登录的接口login.do接口上需要记录关键的信息:userId.设备型号(Android|iPhone).登录时间.登录IP.设备唯一标识(UUID) 当在另外一台新设备上登录同一帐号时,将user ...
- 小白学数据分析----->ARPDAU的价值
最近盛大刚刚发布了财报,有人给我打电话问什么是ARPDAU?ARPDAU能够起到什么作用?本文就这个问题给大家解析一下ARPDAU.在讲ARPDAU之前,有两个概念大家应该很清楚,一个是ARPU,另一 ...
- C++多线程开发之actor model
最近想把写过的一个多线程程序整理一下,这个程序主要特点是有一系列的互相之间有依赖关系的task.于是在网上找相关类库 1,一类是简单的线程池了,这也是原本俺的做法.之前使用的是手工调度,代码实现的很蛋 ...


