从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • JavaSE

  • JavaSenior

  • JavaEE

  • JavaWeb

    • 服务器软件

    • 环境管理和配置管理-科普篇
    • Servlet 入门

      • 什么是 Servlet
      • Servlet 入门案例
      • Servlet 生命周期
      • Servlet 中的注解
      • Tomcat 集成 IDEA
      • Servlet 体系结构
      • HTTP 协议基础
      • 深入 request 和 response 对象
      • request 对象基本使用
      • request 其他功能
      • Servlet 实现登录功能
      • HTTP 协议基础-响应
      • Response 对象基本使用
      • response 对象之重定向
      • response 输出字符到浏览器
      • response 输出字节数据
      • 验证码案例
      • ServletContext
      • 文件下载案例
      • Cookie 笔记
      • Cookie 的更多细节
      • Cookie 实践:记住上次访问时间
      • JSP 入门
      • JSP 的内置对象和案例
      • IDEA 与 JavaWeb 的小技巧
      • Session 笔记
      • 验证码案例
      • JSP 深入学习
      • MVC 开发模式
        • JSP 的演变历史
        • MVC
        • 三层架构
      • EL 表达式和 JSTL 标签
      • JSTL 标签库
      • 案例:列表的增删改查
      • Filter 学习
      • Filter 案例
      • Listener 学习
      • Java 中的 Ajax
      • Java 中的 JSON
  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java
  • JavaWeb
  • Servlet 入门
2023-04-17
目录

MVC 开发模式

# 115.MVC 开发模式

本节是一节理论知识,随着后续的实践深入理解。

# JSP 的演变历史

我们先说下 MVC 出现之前的,JSP 演变历史:

  1. 早期只有 Servlet,只能使用 response 输出标签数据,非常麻烦
  2. 后来有 JSP,简化了 Servlet 的开发,如果过度使用 JSP(因为 JSP 不用重启,即能写 Java 又能写 HTML),在 JSP 中即写大量的 Java 代码,又写 HTML 代码,可读性差,造成难于维护,难于分工协作。还记得笔者遇到一个项目里,一个 JSP 有几千行的故事吗 (っ °Д °;)っ
  3. 再后来,Java 的 web 开发,借鉴 mvc 开发模式,将代码有序的组织起来,而不是过度使用 JSP,使得程序的设计更加合理性
  4. MVC 是一种开发思路,架构模式。而不是设计模式,设计模式通常是解决一些细小的问题。

# MVC

MVC 将程序分为 3 个模块,也就是 M,V 和 C:

  • M:Model,模型。通常是 JavaBean,完成具体的业务操作,如:查询数据库,封装对象
  • V:View,视图。通常是 JSP,只负责展示数据,不写 Java 代码,怎么展示数据?替换 Java 代码的两个技术:EL 表达式和 JSTL 标签
  • C:Controller,控制器,通常是 Servlet。获取用户的输入 → 调用模型 → 将数据交给视图进行展示 ‍ 有了 MVC 后,项目是这样运行的:
  1. 浏览器发送一个 HTTP 请求,首先会到控制器 Servlet
  2. 控制权 Servlet 获取客户端的数据,然后分发请求给具体的模型来处理数据,例如查询数据库,封装对象
  3. 模型执行具体的业务逻辑,然后返回数据给控制器
  4. 控制器将数据交给视图 JSP,JSP 转换为具体的 HTML 后返回给浏览器

示意图:

MVC 模式的优点:

  1. 各司其职,耦合性低,方便维护,可以利于分工协作
  2. 重用性高 ‍ MVC 模式的缺点:使得项目架构变得复杂了一点,对开发人员要求高

# 三层架构

架构层面的概念,它将一个项目分为 3 个层次:

  1. 界面层(表示层):用户看的界面。用户可以通过界面上的组件和服务器进行交互,然后界面层将数据交给业务逻辑层。
  2. 业务逻辑层:处理业务逻辑的,是重中之重,需要用到操作数据库的地方则调用数据访问层
  3. 数据访问层:操作数据,存储文件等 ‍ 示意图:

‍

一个请求是这样被处理的:请求发到服务器,服务器处理请求,看情况是否需要操作数据库,处理完请求后返回给浏览器;按照分层来分析:

  1. 一个请求首先是发给 Servlet
  2. Servlet 去调用业务逻辑层的功能
  3. 业务逻辑层则调用数据访问层
  4. 数据访问层返回数据给业务逻辑层
  5. 业务逻辑层处理完数据,返回结果给界面层 ‍ 虽然我们也可以直接在 Servlet 层里就直接操作数据库,业务逻辑层有什么用?且听我慢慢道来:
  • 数据访问层只定义了最基本的 CRUD 操作,例如查询一条数据(find 方法),更新一条数据(update 方法)
  • 业务逻辑层可以组合 DAO 层的一些操作,形成一些常用的功能,例如先查询后更新,假设命名为功能 A;然后还有一个功能 B 是先查询后删除;
  • 这样做可以使得 DAO 层的功能非常简单,利于维护和复用 ‍ 一般来说,我们会将不同层的代码分成不同的包来存储,例如数据访问层在 dao 包下,业务逻辑层在 service 包性爱,界面层在 web 包下。

后续我们会学习 SSM 三大框架,SpringMVC 用来开发界面层,Spring 框架开发业务层,Mybatis 开发数据层

上次更新: 2025/6/3 09:31:54
JSP 深入学习
EL 表达式和 JSTL 标签

← JSP 深入学习 EL 表达式和 JSTL 标签→

最近更新
01
学点统计学:轻松识破一本正经的胡说八道
06-05
02
2025 年 5 月记
05-31
03
《贫穷的本质》很棒,但可能不适合你
05-27
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式