Spring mvc源码分析系列--前言

前言

距离上次写文章已经过去接近两个月了,Spring mvc系列其实一直都想写,但是却不知道如何下笔,原因有如下几点:

  • 现在项目开发前后端分离的趋势不可阻挡。Spring mvc这一套里面部分内容稍显落后了,例如视图部分可以说是耦合前端的逻辑,现在的后端也很少再会去写jsp之类的东西。所以在现在看来,似乎是有一点落后于时代了。现在再去分析Spring mvc的实现,是不是有点吃力不讨好。
  • 项目开发中SpringBoot的广泛使用。SpringBoot提供了很多开箱即用的特性,这大量屏蔽了底层的细节,包括了这里想要分析的Spring mvc。那么在不知道的细节也能用得很好的情况下,再扒开Spring mvc的底裤去分析,是不是还有意义。
  • servlet听起来似乎过于陈旧。然而很遗憾,Spring mvc的实现就是基于servlet,最核心的一个类DispatcherServlet完成了大部分功能。所以现在去分析一个看起来很老旧的东西是不是还有价值。

不写的理由有很多,但是偷懒了两个月之后我还是决定写这部分。既然只是部分内容稍微过时了,那就说明还有在继续发光发热的部分,那我就力求贴近现在的开发使用,取其精华。Spring mvc基于的servlet虽然是个老东西了,但是有些东西是历久弥新的,如果一直没有出现一个东西完全替代它,不就恰恰说明它做得很好么?不过现在webflux开始兴起,servlet走向何方也未可知,至少在现在,它还在发挥着价值,值得一学。

在看Spring mvc这部分之前,需要掌握一些Spring的基础知识,可以去看一下我之前写的Ioc系列--Spring Ioc源码分析系列和Aop系列--老生常谈系列之Aop。其实看不看也无所谓,这部分比较简单,用过Spring开发的看懂基本没问题,有些细节可能不是很清楚的可以细看一下。

思路安排

本系列可能不只限于讲Spring mvc,可能会把周边关联的也讲一讲,例如web服务器Tomcat。

在这里我先灵魂拷问一下:

  • 浏览器的一个请求,是如何精确到达你的web服务器里的业务逻辑里的,其中经历的流程能说个所以然吗?
  • 我们一般用的web服务器是Tomcat,那么Tomcat给我们做了什么?
  • 它跟servlet又是如何关联起来的?
  • Spring mvc又做了什么,提供了什么便利?

这几个问题看起来简单,但是要说清楚,也不容易。可以简单思考下。

那接下来就说说计划的文章安排,可能最终会有出入,先安排如下:

  • Spring mvc与servlet的前世今生

  • web项目的启动流程,以Tomcat为例,Spring mvc为我们提供了什么,开发部署Spring mvc项目与纯servlet的区别

  • Spring mvc源码分析,这个可能会分几篇去写

  • SpringBoot内嵌Tomcat,SpringBoot时代,Spring mvc退居幕后,SpringBoot是如何做到了一键启动

  • 结束篇

总结

这篇文章就当是简单开个头,算是又立了flag。话不多说,准备开始填坑。

Spring mvc又是老话题了,我时常怀疑,总是写别人已经写过的东西,是不是真的有意义。我没有得到答案,也许一条路不会因为前人走过了,后续的人再走就没有意义了。

最大的意义可能就是一直走在路上。

如果有人看到这里,那在这里老话重提。与君共勉,路漫漫其修远兮,吾将上下而求索。

Spring mvc源码分析系列--前言的更多相关文章

  1. Spring mvc源码分析系列--Servlet的前世今生

    Spring mvc源码分析系列--Servlet的前世今生 概述 上一篇文章Spring mvc源码分析系列--前言挖了坑,但是由于最近需求繁忙,一直没有时间填坑.今天暂且来填一个小坑,这篇文章我们 ...

  2. Spring Ioc源码分析系列--前言

    Spring Ioc源码分析系列--前言 为什么要写这个系列文章 首先这是我个人很久之前的一个计划,拖了很久没有实施,现在算是填坑了.其次,作为一个Java开发者,Spring是绕不开的课题.在Spr ...

  3. Spring AOP 源码分析系列文章导读

    1. 简介 前一段时间,我学习了 Spring IOC 容器方面的源码,并写了数篇文章对此进行讲解.在写完 Spring IOC 容器源码分析系列文章中的最后一篇后,没敢懈怠,趁热打铁,花了3天时间阅 ...

  4. 精尽Spring MVC源码分析 - 寻找遗失的 web.xml

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  5. 精尽Spring MVC源码分析 - 调式环境搭建

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  6. 精尽Spring MVC源码分析 - 文章导读

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  7. 精尽Spring MVC源码分析 - WebApplicationContext 容器的初始化

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  8. 精尽Spring MVC源码分析 - 一个请求的旅行过程

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  9. 精尽Spring MVC源码分析 - MultipartResolver 组件

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

随机推荐

  1. nginx 部署前端资源的最佳方案

    前言 最近刚来一个运维小伙伴,做线上环境的部署的时候,前端更新资源后,总是需要清缓存才能看到个更新后的结果.客户那边也反馈更新了功能,看不到. 方案 前端小伙伴应该都知道浏览器的缓存策略,协商缓存和强 ...

  2. 分享一款自带工作流引擎的NodeJS全栈框架,接单快手、创业神器

    CabloyJS是什么 CabloyJS是一款自带工作流引擎的Node.js全栈框架, 接单快手.创业神器, 基于koa + egg + vue + framework7 + mysql 在线演示 场 ...

  3. re学习笔记

    re学习笔记 学习链接: https://regexlearn.com/zh-cn/learn \w: 数字字母下划线 \W: 非\w \d \D: !\d \s: space cha \S: !\s ...

  4. 二、shell 脚本条件测试

    目录 一.条件测试 test 格式 文件测试 文件测试常见选项 整数值比较 字符串比较 浮点数的运算 逻辑测试 二.if语句 1单分支 2双分支结构 3多分支结构 三元运算符 三.case 一.条件测 ...

  5. 工具箱之 IKVM.NET 项目新进展

    在各种群里经常讨论的一个事情是.NET 如何调用 Java 的实现,最常见的场景之一就是在加解密方面Java提供的密钥,C#无法解密, C#中byte范围是[0,255],而Java中的byte范围是 ...

  6. 利用IDEA搭建SpringBoot项目,整合mybatis

    一.配置文件.启动项目 生成之后这几个文件可以删掉的 配置application spring.datasource.url=jdbc:mysql://localhost:3306/test?serv ...

  7. 高仿Android网易云音乐OkHttp+Retrofit+RxJava+Glide+MVC+MVVM

    简介 这是一个使用Java(以后还会推出Kotlin版本)语言,从0开发一个Android平台,接近企业级的项目(我的云音乐),包含了基础内容,高级内容,项目封装,项目重构等知识:主要是使用系统功能, ...

  8. 【百度飞桨】手写数字识别模型部署Paddle Inference

    从完成一个简单的『手写数字识别任务』开始,快速了解飞桨框架 API 的使用方法. 模型开发 『手写数字识别』是深度学习里的 Hello World 任务,用于对 0 ~ 9 的十类数字进行分类,即输入 ...

  9. SP8496 NOSQ - No Squares Numbers 题解

    To SP8496 这道题可以用到前缀和思想,先预处理出所有的结果,然后 \(O(1)\) 查询即可. 注意: 是不能被 \(x^2(x≠1)\) 的数整除的数叫做无平方数. \(d\) 可以为 \( ...

  10. 高级数据结构学习笔记 / Data Structure(updating)

    树状数组   查询操作:O(logn) 修改操作:O(logn) #define lowbit(x) (x & -x) int tr[N]; // 树状数组 // 添加c个大小为x的数值 vo ...