分别从 MVC 模式、Servlet、JSP 编译原理带你剖析 Servlet 组件到底属于 MVC 模式的哪一层?


前言

今天课下,偶然听到有几个同学在讨论这么一个问题: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 请求,并返回响应。

扫描二维码关注公众号,回复: 12823243 查看本文章

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 编译原理部分建议大家看我之前的博文——使用 Eclipse 查看 JSP 编译生成 Servlet 的流程并进行 JSP 编译原理剖析

由此我们得出下一个结论: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 这个经典的设计框架。我们在之后的框架学习中,一切的原理都是围绕这个基础展开的,框架仅仅只是为我们提供一个方便的工具,基础还是要打牢的。

在这里插入图片描述


感谢大家的支持,我是白鹿,一个不懈奋斗的程序猿。希望本贴能帮助到大家,欢迎大家的一键三连!如果还有什么问题、建议或者补充可以留言在帖子下方,给予更多人帮助!
更多资讯微信搜索公众号【WDeerCode代码圈

猜你喜欢

转载自blog.csdn.net/qq_22695001/article/details/109364528