一次http请求,后台如何抽象Controller使开发只关注业务实现

问题

优秀的框架,开发人员不需要关心技术细节,只需实现框架开放出来的入口,实现业务逻辑。那么,一次http请求,后台是如何抽象Controller入口类呢?

大致抽象步骤

  1. 发送一次 Http 请求,首先要找到服务器并监听的端口的服务
  2. 根据请求路径找到对应的 Controller 入口代码处理业务并返回数据

根据上边的步骤,有个哥们造了一个简易版的轮子,有兴趣可以看一下
https://github.com/feifa168/mytomcat

Tomcat

一般我们会把开发好的项目打包成 WAR 包,然后放进 Tomat 容器里跑,SpringBoot 框架内置了 Tomcat,直接运行 JAR 包就可以跑项目,Tomcat 的作用就是使http服务和具体项目分离开来

下边看看 Tomcat 执行了哪些操作

  1. 当发起一次 Http 请求时,浏览器和相应服务器上的 Tomcat 建立 TCP 连接,
  2. 根据请求去找Servlet容器里的servlet业务入口点并执行返回

其中,Servlet 是 Java 的一个规范,在一般的开发中,它用来连接 Servlet 容器和业务入口

下边我们看看代码的简单实现

public class MyServlet extends HttpServlet {
    protected void service(HttpServletRequest request, HttpServletResponse response){
        PrintWriter pw = response.getWriter();
        pw.println("Hello World");
    }
}

service() 就是我们项目对于一个请求的入口,它是通过 Tomcat 去调用的。开发可以根据自己的需要在里面写代码,不过很快就会发现,该入口很臃肿冗余,例如,写完代码得到数据模型后,需要手动拼写数据和视图的绑定,而这些基本上其它接口都需要的。开发开始关注了很多跟业务无关的技术了,说明有待改进!

SpringMVC

这个时候 SpringMVC 该出场了,顾名思义,它是在 Spring 框架下基于 MVC 模型设计的

  1. C 是 Controller 控制器,是业务入口,负责链接 M 和 V
  2. M 是 Model 数据模型
  3. V 是 View 视图

不过现在前后端分离后,V 已经不用了,Controller 直接返回 Json 数据。前后端分离,对于开发人员又是一次抽象,抽象 View 给前端解决,后台 Java 只关注业务逻辑。这样层次的抽象,使后台开发人员关注核心功能,可解决更复杂的事情

下边看看 SpringMVC 框架的简略版流程图


image.png
  1. 浏览器发起请求,dispatcherServlet 收到进行转发
  2. 通过 HandlerMapping 路由找到 Controller 入口
  3. 执行完业务逻辑并返回 Model 数据模型
  4. ViewResolve 解析渲染数据,最终把数据返回浏览器

总结

到这里,我们看到在 SpringMVC 框架中,开发只需要关注入口 Controller 和业务开发,无需关注其它技术细节

越是优秀的框架,你越是感受不到它的存在,这就是层层抽象的魅力,如果你感觉代码很乱,很冗余,说明你的代码需要抽象了,这也是你成长的机会!


本文是基于自己理解写的,如果有错欢迎留言讨论

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • IOC 控制反转容器控制程序对象之间的关系,而不是传统实现中,有程序代码之间控制,又名依赖注入。All 类的创建,...
    irckwk1阅读 926评论 0 0
  • 对于java中的思考的方向,1必须要看前端的页面,对于前端的页面基本的逻辑,如果能理解最好,不理解也要知道几点。 ...
    神尤鲁道夫阅读 797评论 0 0
  • 一般测试驱动开发项目中,我们会在Maven中建立一个项目文件和一个一一对应的测试项目文件。每写好一个模块,先对其进...
    东东酱酱阅读 12,071评论 3 14
  • 1.Spring背景 1.1.Spring四大原则: 使用POJO进行轻量级和最侵入式开发; 通过依赖注入和基于借...
    嗷大彬彬阅读 769评论 0 2
  • 今晚 月是最美的诗 你穿越渭水之南 一双隐形的翅膀跨过了天涯。 窗外清风徐徐 急促的键盘音,此起彼伏 没有乱章节,...
    唐春元ok阅读 543评论 2 2