全栈工程师修炼指南
熊燚(四火)
Oracle 首席软件工程师
32206 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 46 讲
全栈回顾 (1讲)
加餐 (1讲)
全栈工程师修炼指南
15
15
1.0x
00:00/00:00
登录|注册

07 | 解耦是永恒的主题:MVC框架的发展

MVVM
MVP
第二种
第一种
JavaBean
Tomcat
JSP
Servlet
扩展阅读
MVC的变体
MVC的一般化
JSP Model 2
JSP Model 1
深入理解
动手验证
概念介绍
总结思考
MVC 的演进
JSP 和 Servlet
解耦是永恒的主题:MVC框架的发展

该思维导图由 AI 生成,仅供参考

你好,我是四火。
欢迎进入第二章,本章我们将围绕 MVC 这个老而弥坚的架构模式展开方方面面的介绍,对于基于 Web 的全栈工程师来说,它是我们知识森林中心最茂密的一片区域,请继续打起精神,积极学习和思考。
无论是在 Web 全栈还是整个软件工程领域,有很多东西在本质上是相通的。比如我们在前一章提到的“权衡”(trade-off),我们后面还会反复提到。MVC 作为贯穿本章的主题,今天我们就通过它来引出另一个关键词——解耦。

JSP 和 Servlet

在我们谈 MVC 之前,先来讲一对好朋友,JSP 和 Servlet。说它们是好朋友,是因为它们经常一起出现,而事实上,它们还有更为紧密的联系。

1. 概念介绍

如果你有使用 Java 作为主要语言开发网站的经历,那么你一定听过别人谈论 JSP 和 Servlet。其中,Servlet 指的是服务端的一种 Java 写的组件,它可以接收和处理来自浏览器的请求,并生成结果数据,通常它会是 HTML、JSON 等常见格式,写入 HTTP 响应,返回给用户。
至于 JSP,它的全称叫做 Java Server Pages,它允许静态的 HTML 页面插入一些类似于“<% %>”这样的标记(scriptlet),而在这样的标记中,还能以表达式或代码片段的方式,嵌入一些 Java 代码,在 Web 容器响应 HTTP 请求时,这些标记里的 Java 代码会得到执行,这些标记也会被替换成代码实际执行的结果,嵌入页面中一并返回。这样一来,原本静态的页面,就能动态执行代码,并将执行结果写入页面了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了MVC框架的发展历程和技术特点。首先,文章讲解了JSP和Servlet的概念、工作原理和区别,并通过实际操作验证了JSP页面转化为Servlet的过程。随后,文章介绍了MVC模式的演进,包括JSP Model 1、JSP Model 2和MVC的一般化。其中,JSP Model 2将MVC分别通过JavaBean、JSP和Servlet解耦成三层,而MVC的一般化则展示了不同的MVC框架实现方式。此外,文章还介绍了MVC的变体MVP和MVVM,以及它们与MVC的区别和联系。总的来说,本文通过深入解析MVC框架的发展历程和技术特点,为读者提供了全面的理解和认识。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《全栈工程师修炼指南》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(19)

  • 最新
  • 精选
  • Luciano李鑫
    请问MVP和MVC的主要区别体现在什么地方

    作者回复: MVP 是 MVC 的变体,功能、层次和应用场景有所区别,下面是我的归纳,供参考。 简单说,对于 MVC 来说,Controller 层次上完全独立于 View,它可以跨多个视图、可以决定视图路由,更多存放的是控制逻辑,应用较为广泛,但多数在服务端代码中; 而对于 MVP 来说,Presenter 则其实是和 View 在相似的层次上,协调并把 Model 的数据绑定到指定 View 上去,主要用在纯粹 UI 的实现中。

    2019-09-29
    2
    8
  • 易儿易
    老师,我一直有一个疑惑,希望老师能够解答:平时开发用的是第一种MVC,CRUD的代码基本上都是①xxxAction-②(Ixxx接口类-xxxServiceImpl实现类)-③xxxDao这“三层”结构,xxxAction属于Controller,那么(Ixxx接口类-xxxServiceImpl实现类)-xxxDao应该都属于Model层对吗?很多资料包括老师今天讲的都提到Model是由javabean的构成的,是不是我理解的javabean太狭隘了?(Ixxx接口类-xxxServiceImpl实现类)-xxxDao这些都可以称为javabean吗?

    作者回复: 你提到的 ② 和 ③,都属于 Model 层的一部分。我认为bean 简单来说指的就是可重用的封装对象,文中也有解释。从这个角度来说的话,满足这个条件都可以算,所以你说这两个的是算的。

    2019-09-30
    2
  • 不记年
    SpringMVC应该属于第一种,但是我们在编写控制器代码时,并没有显式的调用View,而是生成一个ViewModel.由前置控制器去做剩下的事情~

    作者回复: 👍,补充说明一下,使用 Spring MVC 也是可以应用第二种的

    2019-09-30
    2
  • William Ning
    一直不明白,mvc,mvp,mvvm等变体模式,跟前后端有关系吗,个人的理解是,后端框架多是mvc,「开发语言php」,前端似乎是mvp,mvvm之类的,难道就不存在反过来的,还是实践表明,目前的架构模式是较好的实践结果。望老师看到解答,谢谢。

    作者回复: 模式本身来说,是没有前后端的限制的。不过,在实际使用中,因为解决的问题所在的层次特点,是带有明显的偏向的。

    2019-09-30
    1
  • tt
    M-VVM就是M-automated-VP么?因为view和viewModel成为了命运共同体。 或者说VVM是“别人实现了,我直接用”的VP?比如Vue或React

    作者回复: 第一条大致可以按你说的理解,但是第二条做个说明:VVM 和 MVVM 的区别在于实际的数据源头 M 消失了,因为有时候我们不需要它,比如设计一个可重用的组件。

    2019-09-25
    1
  • 浅浅悠
    有个问题哈,这里的servlet和现在的servlet前端框架是一个东西吗

    作者回复: Servlet 这个词应当就是指同一个概念

    2021-09-22
  • 加利率的钟摆
    老师好,有个问题想请教一下: 第二种MVC,“Controller 调用 Model 的接口发起数据更新操作,接着就直接转向最终的 View 去了;View 会调用 Model 去取得经过 Controller 更新操作以后的最新对象,渲染并返回给用户。” 如何保证View调用的Model已经更新完毕了?

    作者回复: 这个取决于一致性的设计了。如果采用的是强一致性,比如关系数据库,那就可以保证在 View 调用的时候,前面 Controller 调用的更新能够被查询出来。

    2019-10-17
  • pyhhou
    1. 解耦后,JSP 更偏向于声明式编程,也就是描述一个页面上的属性,UI 呈现等等,可以把它看作是加强版的 HTML。servlet 更偏向于命令式编程,用于后台的数据交互,发出指令,接收 request,做的都是逻辑性较强的工作。但回过头来看 JSP 其实也是 servlet,只是为了让编写代码更加直观,易懂,这中间做了个转换 2. 工作中做的项目没有特别强的 MVC 的概念,之前设计的时候只考虑了 “前端” 和 “后端” 这两个概念,前端和后端分离,前端负责接收并响应界面用户的操作,然后通过 RESTful API 的方式和后端进行交互,后端根据请求进行 CRUD,然后响应请求。不是特别清楚 MVC 和一般设计相比的优势有哪些,还是说 MVC 架构下分工比较明确,代码比较容易区分开来?还望老师指点

    作者回复: 不清楚你说的“MVC 和一般设计相比”,这里的“一般设计”指的是什么。

    2019-10-01
    3
  • William Ning
    试了下「同样地,执行 catalina version,你也能看到 Tomcat 重要的环境信息:」提示没有该命令……,其他都正常,浏览器上能访问到的,系统变量配置了「CATALINA_HOME C:\Program Files\Apache Software Foundation\Tomcat 9.0」,也重启过电脑,一样的结果,原因是什么呢。

    作者回复: 在 Windows 下你看看 Tomcat 的 bin 目录下有没有 version.bat,启动则是 startup.bat。

    2019-09-30
    6
  • 易儿易
    很奇怪,我输入catalina run命令后是这个样子的jdk1.8,tomcat9,catalina run 多次重复输入都是一样,不知道是哪里出的问题,只能通过startup.bat启动 Usage: catalina ( commands ... ) commands: debug Start Catalina in a debugger debug -security Debug Catalina with a security manager jpda start Start Catalina under JPDA debugger run Start Catalina in the current window run -security Start in the current window with security manager start Start Catalina in a separate window start -security Start in a separate window with security manager stop Stop Catalina configtest Run a basic syntax check on server.xml version What version of tomcat are you running?

    作者回复: 从你描述来看,能运行 *.bat,是 Windows 系统吧,那就通过 startup.bat 启动吧。

    2019-09-30
收起评论
显示
设置
留言
19
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部