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

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 这个经典的设计框架。我们在之后的框架学习中,一切的原理都是围绕这个基础展开的,框架仅仅只是为我们提供一个方便的工具,基础还是要打牢的。
在这里插入图片描述


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

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数同学面临毕业设计项目选题时,很多人都会感到无从下手,尤其是对于计算机专业的学生来说,选择一个合适的题目尤为重要。因为毕业设计不仅是我们在大学四年学习的一个总结,更是展示自己能力的重要机会。

因此收集整理了一份《2024年计算机毕业设计项目大全》,初衷也很简单,就是希望能够帮助提高效率,同时减轻大家的负担。
img
img
img

既有Java、Web、PHP、也有C、小程序、Python等项目供你选择,真正体系化!

由于项目比较多,这里只是将部分目录截图出来,每个节点里面都包含素材文档、项目源码、讲解视频

如果你觉得这些内容对你有帮助,可以添加VX:vip1024c (备注项目大全获取)
img

你选择,真正体系化!**

由于项目比较多,这里只是将部分目录截图出来,每个节点里面都包含素材文档、项目源码、讲解视频

如果你觉得这些内容对你有帮助,可以添加VX:vip1024c (备注项目大全获取)
[外链图片转存中…(img-1OJ85JDd-1712528813919)]

  • 29
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值