MVC 模式/Servlet/JSP 编译原理剖析:Servlet 组件到底属于 MVC 模式的哪一层?

文章目录

  • 前言
  • 一、回忆什么是 MVC 模式?
    • 1.1、Model、View、Controller 组件介绍
    • 1.2、明确 View 与 Controller 组件区别
  • 二、什么是 Servlet?
    • 2.1、Servlet 的组件定义
    • 2.2、Servlet 组件处于 Controller 层?
  • 三、老师说 Servlet 是 View 层的!
  • 四、什么是 JSP?
    • 4.1、Servlet 是 JSP 的变式
  • 五、Servlet 的角色根据应用场景定义
    • 5.1、开发中的 MVC 设计框架
    • 5.1、完整 MVC 设计框架中不同组件的角色
    • 5.2、老师说 Servlet 是 View 层的!!
    • 5.3、纯 JSP 项目中 Servlet 的角色
  • 总结


前言

今天课下,偶然听到有几个同学在讨论这么一个问题:Servlet 到底属于 MVC 模式的哪一层?谈到这个问题就考察你对于 MVC 模式的熟悉程度了。本篇我们就分别从 MVC 模式、Servlet 和 JSP 的原理来探讨一下,Servlet 到底属于哪一层?

在这里插入图片描述


一、回忆什么是 MVC 模式?

首先我们先回忆一下这个经典的软件设计框架——MVC 模式。

这里请注意软件设计模式与软件设计框架的区别:软件设计模式是指那经典的 23 个设计模式:创建型、行为型、结构型;软件设计框架就是 MVC、SSH、SSM 等。

MVC(Model VIew Controller),是模型、视图、控制器的缩写,是一种经典的软件设计框架,同时提供了对 HTML、CSS、JavaScript 的支持。

1.1、Model、View、Controller 组件介绍

经典的 MVC 模式整体组件类型的关系和功能如下图所示,我们分别来介绍组件类型以及关系:

在这里插入图片描述

  1. Model(模型)是应用程序中用于处理数据逻辑的部分,即业务模型。用来表示应用程序的核心,比如:数据库记录字段,负责在数据库中存取数据。
  2. View(视图)是应用程序中处理数据显示的部分,即用户界面,通常视图是依赖模型的数据来创建的,模型发生改变视图必须同步更新。
  3. Controller(控制器)是应用程序中处理用户交互的部分。负责从视图中读取数据,控制用户的输入,并向模型发送数据。

1.2、明确 View 与 Controller 组件区别

现在从 MVC 模式的介绍我们可以明确 View 和 Controller 的区别:View 负责数据显示,Controller 负责数据和用户的交互。

二、什么是 Servlet?

介绍完 MVC 模式,那么什么是 Servlet 呢?Servlet 又是怎么样的一个组件呢?它扮演怎么一个角色呢?

2.1、Servlet 的组件定义

Servlet 是用 Java 语言编写的服务器端程序,是由服务器端调用执行,按照 Servlet 自身规范编写的 Java 类。Servlet 可以处理客户端传来的 HTTP 请求,并返回响应。

2.2、Servlet 组件处于 Controller 层?

说得通俗点,Servlet 就是一个 Java 类,里面定义了接收用户请求,调用业务类,发送响应视图的方法。现在你是不是觉得 Servlet 好像是属于 Controller 层的?

三、老师说 Servlet 是 View 层的!

Q:这个时候可能有人反问?为什么我们老师说过说 Servlet 是 View 层的?你这说的不对!
或者说:为什么我们老师说过说 JSP 是 Controller 层的?你这说的不对!

A:别急嘛,我们接着往下走,再来剖析一下 JSP 的原理。这俩问题我们放在最后面作为总结。

四、什么是 JSP?

要分析 Servlet 的角色,我们就不得不说一下 JSP,什么是 JSP?关于 JSP 的基础定义大家早已耳熟能详,我就不再赘述。

4.1、Servlet 是 JSP 的变式

  1. JSP 将 Java 代码和特定变动的内容嵌入到静态页面中,实现以静态页面为模板,动态生成其他部分。
  2. JSP 文件在运行的时候编译器会将内嵌的 Java 代码编译成 Java 写的 Servlet 代码,JSP 指令通过 JSP 的编译器来控制如何生成 Servlet,然后 Java 代码编译为 .class 结尾的中间字节码文件最后转化为二进制的机器码。
  3. 我们通过 JSP 的内置指令来取代 Java 中(即 Servlet)中使用out.write();的输出,节约大量的代码又能实现页面交互。

更详细的 JSP 编译原理部分建议大家看我之前的博文——JSP 编译原理:JSP 是 Servlet?如何用 Eclipse 查看 JSP 编译生成的 Servlet 源文件?

由此我们得出下一个结论:JSP 就是 Servlet,反过来也可以说 Servlet 就是 JSP。你又要有问题了?

Q:你这给我搞糊涂了,Servlet 到底是什么角色?

五、Servlet 的角色根据应用场景定义

我们在项目开发中,完整的一个 MVC 设计框架可能会包含很多组件或者同时结合其他的组件,我们分别从不同的需求场景来一一介绍。

5.1、开发中的 MVC 设计框架

项目中经常使用的 MVC 模式组件结构以及其功能如下图所示:

在这里插入图片描述
上图在我们经典的 MVC 结构中进一步进行了细分:

  • View 层负责数据的显示。包括我们看得到的使用 JSP 和 HTML 实现的界面。
  • Cotroller 层负责控制数据和用户的交互。包括我们上面提到的 Servlet。
  • Model 层负责对数据逻辑的处理。包括实体类 POJO(封装对象数据)、业务层 Service(处理数据逻辑信息)、持久层 Dao(进行数据的 CRUD)等组件。

注意:在开发中一定要遵循开发规范、框架规范,通过 Servlet 来实现交互,通过业务层 Service 进行逻辑处理,通过持久层 Dao 来执行数据查询。不要把每个组件的顺序和功能搞混,否则使用框架也就没有意义了。

5.1、完整 MVC 设计框架中不同组件的角色

在如上图所示的完整的 MVC 设计框架中,严格来说,Servlet 是属于Controller 层的,负责和用户的交互,而我们常见的业务层 Service、持久层 Dao、实体类 JavaBean 都是属于Model层的

5.2、老师说 Servlet 是 View 层的!!

A:好了我们来回答这个问题。
现在你需要返回去看一下上面 4.1 的内容了——JSP 的本质就是 Servlet,就是 Java 类,Servlet 也就是 JSP,说 Servlet 处于 View 层也没大错。但是严格来说 JSP 的主要功能是实现数据信息的显示,很少的一部分功能用于实现数据信息的交互处理,所以我们通常按照代码规范将 Serlet 作为 Java 代码归为 Controller 层。明白?

5.3、纯 JSP 项目中 Servlet 的角色

如果你看的是纯 JSP 的教程,可能会直接使用 JSP 硬连数据库,而不添加其他的组件,那么这个时候就可以说:Servlet 是属于 View 层组件。因为仅仅就是使用 JSP 就可以实现简单的增删改查,也没有建立 Java 类文件。


总结

本文带领大家回顾了经典的 MVC 软件设计框架,辨析了 JSP 与 Servlet 的组件定位,明确 Servlet 在 MVC 中是处于 Controller 层,在非严格 MVC 模式中也可处于 View 层。通过对于组件角色的定位,更深一步了解和掌握 Servlet 与 JSP 的原理,掌握 MVC 这个经典的设计框架。我们在之后的框架学习中,一切的原理都是围绕这个基础展开的,框架仅仅只是为我们提供一个方便的工具,基础还是要打牢的。

在这里插入图片描述


我是白鹿,一个不懈奋斗的程序猿。望本文能对你有所裨益,欢迎大家的一键三连!若有其他问题、建议或者补充可以留言在文章下方,感谢大家的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统原理:进程 PV 操作如何计算?全网最全三种前驱图计算类型总结

文章目录前言一、PV 操作定义1.1、P 操作定义1.2、V 操作定义二、串联进程(单线前驱图)2.1、什么是单线前驱图?2.2、如何计算单线前驱图的 PV?2.2.1、计算前驱节点 PV2.2.2、计算中间节点 PV2.2.3、计算尾节点 PV三、并联进程&…

Spring 容器:三种方式解决 Resource leak: ‘applicationContext‘ is never closed 问题

文章目录前言一、Spring 容器警告产生的场景二、Spring 容器未关闭后果分析2.1、肉眼可见的警告2.2、导致的内存泄漏2.2.1、什么是内存泄漏?2.2.2、如何判断内存泄漏?2.2.3、Java 中的 GC(垃圾回收)2.2.4、Java 中会导致内存泄漏的…

SRA 案例:关于华为开发者联盟基础服务文档内容的改进建议(华为开发者联盟文档深度体验官)

文章目录前言一、文档中心的外链跳转问题1.1、问题描述1.2、造成的问题1.3、改进建议二、图片失真和无法放大查看问题2.1、问题描述2.2、造成的问题2.3、改进建议三、个别 SDK 词汇缺少必要的说明3.1、问题描述3.2、造成的问题3.3、改进建议四、邮箱信息的优化4.1、问题描述4.2…

腾讯位置服务:有何优势?如何使用平台创建应用和服务调用的 Key?

文章目录前言一、腾讯位置服务的优势1.1、提供丰富的地图产品1.2、提供行业解决方案1.3、提供其他生态维度的支持1.4、海量的数据基础1.5、丰富的开发文档二、初识腾讯位置服务2.1、用户的注册与登录(附专属邀请码)2.2、开发者信息的完善三、创建服务平台…

毕业生当头一棒?忆本科四年,高校毕业生与就业单位基本要求差多少?工作还是考研?

文章目录前言一、大学本科前两年的生活1.1、庸庸碌碌、中规中矩1.2、收获了爱情二、大三的改变2.1、学会自律2.2、学会自我总结2.3、眼光要具有前瞻性三、毕业答辩3.1、个人设计答辩3.2、团队设计答辩四、南京之行4.1、铭记历史,感恩先辈4.2、加强自我认知与提升五、…

Gitee 答疑:为什么从 Gitee 平台 Pull 代码到 STS/Eclipse 后文件乱码?逐步排查

文章目录前言一、产生乱码场景1.1、错误描述1.2、解决思路二、解决方式2.1、检查 Git 平台上的源码2.2、Git 的运行原理2.3、修改 IDE 的文本编码格式2.4、重新打开目的文件问题解决2.5、仍存在问题看这里(重新拉区合并)总结前言 我们从 Gitee 平台 Pull…

flash 异常修复:QQ 的 flash 图标显示异常?QQ 秀、表情加载异常?一招解决

文章目录前言一、产生错误场景1.1、flash 图标显示异常1.2、解决思路二、安装合适版本的 Flash Player2.1、选择合适版本的 Flash Player2.2、安装 Flash Player三、重启 QQ 客户端四、flash 动画加载异常4.1、动画加载异常原因分析4.2、下载安装 flash 修复工具4.3、使用 Flas…

电脑广告多?Windows 自带恶意软件删除工具还不会使用?有必要安装杀毒软件吗?

文章目录前言一、启动恶意软件删除工具二、扫描类型的选择三、启动软件扫描四、恶意软件删除工具的说明五、对于恶意软件处理的建议总结前言 可能有些小伙伴发现,哎?为什么我的电脑弹窗广告这么多?难不成小视频看多了?电脑中毒了&…

《软件项目管理(第二版)》第 8 章——项目团队与干系人 重点部分总结

文章目录 前言一、简答题二、论述题总结前言 学习了项目的开发与发布之后,我们就可以单独对一个项目进行开发了,但是在企业中开发中,除了编码之外,还需要项目管理、团队协作开发等,这就是软件项目管理板块要学习的内容。本文是对《软件项目管理(第二版)》第 8 章——项目…

《软件项目管理(第二版)》第 7 章——项目风险管理 重点部分总结

文章目录 前言一、单选题二、填空题三、简答题四、论述题总结前言 学习了项目的开发与发布之后,我们就可以单独对一个项目进行开发了,但是在企业中开发中,除了编码之外,还需要项目管理、团队协作开发等,这就是软件项目管理板块要学习的内容。本文是对《软件项目管理(第二…

《软件项目管理(第二版)》第 6 章——项目质量管理 重点部分总结

文章目录 前言一、单选题二、判断题三、简答题总结前言 学习了项目的开发与发布之后,我们就可以单独对一个项目进行开发了,但是在企业中开发中,除了编码之外,还需要项目管理、团队协作开发等,这就是软件项目管理板块要学习的内容。本文是对《软件项目管理(第二版)》第 6…

《软件项目管理(第二版)》第 5 章——项目进度和成本管理 重点部分总结

文章目录 前言一、填空题二、简答题三、论述题总结前言 学习了项目的开发与发布之后,我们就可以单独对一个项目进行开发了,但是在企业中开发中,除了编码之外,还需要项目管理、团队协作开发等,这就是软件项目管理板块要学习的内容。本文是对《软件项目管理(第二版)》第 5…

《软件项目管理(第二版)》第 1 章——概述 重点部分总结

文章目录 前言一、填空题二、判断题三、简答题总结前言 学习了项目的开发与发布之后,我们就可以单独对一个项目进行开发了,但是在企业中开发中,除了编码之外,还需要项目管理、团队协作开发等,这就是软件项目管理板块要学习的内容。本文是对《软件项目管理(第二版)》第 1…

《软件项目管理(第二版)》第 2 章——项目准备和启动 重点部分总结

文章目录 前言一、单选题二、判断题三、简答题总结前言 学习了项目的开发与发布之后,我们就可以单独对一个项目进行开发了,但是在企业中开发中,除了编码之外,还需要项目管理、团队协作开发等,这就是软件项目管理板块要学习的内容。本文是对《软件项目管理(第二版)》第 2…

《软件项目管理(第二版)》第 3 章——项目计划 重点部分总结

文章目录 前言一、单选题二、填空题三、简答题总结前言 学习了项目的开发与发布之后,我们就可以单独对一个项目进行开发了,但是在企业中开发中,除了编码之外,还需要项目管理、团队协作开发等,这就是软件项目管理板块要学习的内容。本文是对《软件项目管理(第二版)》第 3…

《软件项目管理(第二版)》第 4 章——项目估算 重点部分总结

文章目录 前言一、单选题二、简答题总结前言 学习了项目的开发与发布之后,我们就可以单独对一个项目进行开发了,但是在企业中开发中,除了编码之外,还需要项目管理、团队协作开发等,这就是软件项目管理板块要学习的内容。本文是对《软件项目管理(第二版)》第 4 章——项目…

《软件需求分析(第二版)》第 1 章——软件需求基础知识 重点部分总结

文章目录 前言一、单选题二、填空题三、判断题四、简答题总结前言 软件需求分析就是把软件计划期间建立的软件可行性分析求精和细化,分析各种可能的解法,并且分配给各个软件元素。需求分析是软件定义阶段中的最后一步,是确定系统必须完成哪些工作,也就是对目标系统提出完整…

《软件需求分析(第二版)》第 2 章——客户眼中的需求 重点部分总结

文章目录 前言一、简答题总结前言 软件需求分析就是把软件计划期间建立的软件可行性分析求精和细化,分析各种可能的解法,并且分配给各个软件元素。需求分析是软件定义阶段中的最后一步,是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。本文…

《软件需求分析(第二版)》第 3 章——需求工程的推荐方法 重点部分总结

文章目录 前言一、单选题二、填空题总结前言 软件需求分析就是把软件计划期间建立的软件可行性分析求精和细化,分析各种可能的解法,并且分配给各个软件元素。需求分析是软件定义阶段中的最后一步,是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的…

《软件需求分析(第二版)》第 4 章——需求分析员的职责 重点部分总结

文章目录 前言一、简答题总结前言 软件需求分析就是把软件计划期间建立的软件可行性分析求精和细化,分析各种可能的解法,并且分配给各个软件元素。需求分析是软件定义阶段中的最后一步,是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。本文…