全栈工程师修炼指南
熊燚(四火)
Oracle首席软件工程师
立即订阅
2286 人已学习
课程目录
已更新 43 讲 / 共 40 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (3讲)
开篇词 | 从成长角度看,为什么你应该成为全栈工程师?
免费
学习路径 | 怎样成为一名优秀的全栈工程师?
导读 | 如何学习这个专栏?
第一章 网络协议和 Web 接口 (6讲)
01 | 网络互联的昨天、今天和明天:HTTP 协议的演化
02 | 为HTTP穿上盔甲:HTTPS
03 | 换个角度解决问题:服务端推送技术
04 | 工整与自由的风格之争:SOAP和REST
05 | 权衡的艺术:漫谈Web API的设计
06 | 特别放送:北美大厂如何招聘全栈工程师?
第二章 欢迎来到 MVC 的世界 (7讲)
07 | 解耦是永恒的主题:MVC框架的发展
08 | MVC架构解析:模型(Model)篇
09 | MVC架构解析:视图(View)篇
10 | MVC架构解析:控制器(Controller)篇
11 | 剑走偏锋:面向切面编程
12 | 唯有套路得人心:谈谈Java EE的那些模式
13 | 特别放送:选择比努力更重要
第三章 从后端到前端 (7讲)
14 | 别有洞天:从后端到前端
15 | 重剑无锋,大巧不工:JavaScript面向对象
16 | 百花齐放,百家争鸣:前端MVC框架
17 | 不一样的体验:交互设计和页面布局
18 | 千言万语不及一幅画:谈谈数据可视化
19 | 打开潘多拉盒子:JavaScript异步编程
20 | 特别放送:全栈团队的角色构成
第四章 数据持久化 (7讲)
21 | 赫赫有名的双刃剑:缓存(上)
22 | 赫赫有名的双刃剑:缓存(下)
23 | 知其然,知其所以然:数据的持久化和一致性
24 | 尺有所短,寸有所长:CAP和数据存储技术选择
25 | 设计数据持久层(上):理论分析
26 | 设计数据持久层(下):案例介绍
27 | 特别放送:聊一聊代码审查
第五章 寻找最佳实践 (6讲)
28 | Ops三部曲之一:配置管理
29 | Ops三部曲之二:集群部署
30 | Ops三部曲之三:测试和发布
31 | 防人之心不可无:网站安全问题窥视
32 | 和搜索引擎的对话:SEO的原理和基础
33 | 特别放送:聊一聊程序员学英语
第六章 专题 (7讲)
34 | 网站性能优化(上)
35 | 网站性能优化(下)
36 | 全栈开发中的算法(上)
37 | 全栈开发中的算法(下)
38 | 分页的那些事儿
39 | XML、JSON、YAML比较
40 | 全栈衍化:让全栈意味着更多
全栈工程师修炼指南
登录|注册

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

四火 2019-09-25
你好,我是四火。
欢迎进入第二章,本章我们将围绕 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/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《全栈工程师修炼指南》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(14)

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

    作者回复: MVP 是 MVC 的变体,功能、层次和应用场景有所区别,下面是我的归纳,供参考。

    简单说,对于 MVC 来说,Controller 层次上完全独立于 View,它可以跨多个视图、可以决定视图路由,更多存放的是控制逻辑,应用较为广泛,但多数在服务端代码中;

    而对于 MVP 来说,Presenter 则其实是和 View 在相似的层次上,协调并把 Model 的数据绑定到指定 View 上去,主要用在纯粹 UI 的实现中。

    2019-09-29
    3
  • tt
    M-VVM就是M-automated-VP么?因为view和viewModel成为了命运共同体。

    或者说VVM是“别人实现了,我直接用”的VP?比如Vue或React

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

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

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

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

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

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

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

    2019-09-30
  • 易儿易
    很奇怪,我输入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
  • Paradise丶朽木
    刚入职时写过一点jsp,后来是freemaker模板引擎,现在是前后端分离~回答下第二个问题,我觉得fremaker那种方式应该是典型的第一种,controller负责接收请求,处理参数,调用service查询数据,封装成ModelAndView,再由freemaker渲染页面返回。

    作者回复: 👍

    2019-09-27
  • Mandalorian
    Vue: MVVM -> model view viewmodel
    React: MVC -> model view controller
    Angular: MVW -> model view whatever
    2019-09-26
  • leslie
    先打卡吧:这块确实是我的弱项,趁着马上到来的长假好好把MVC这块补了、、、
    2019-09-26
  • 靠人品去赢
    之前就曾听人说过JSP是一种特殊的Servlet,现在看说的不完全正确,JSP会转化成一种特殊的servlet返回请求结果。

    作者回复: 嗯,最重要的是理解原理。不严格地讲,这些说法都没问题。

    2019-09-25
  • 桃源小盼
    接口服务里有service,它属于view层还是model层?

    作者回复: 你的描述有一些简单,什么是“接口服务里有service”?

    2019-09-25
收起评论
14
返回
顶部