MVC发展历程及思想

2023-11-19

两种web应用程序的开发模式:

  1. model 1: JSP + JavaBean
    JSP负责 : ① 页面显示 ②页面跳转 ③调用Javabean处理数据(处理请求)
    JavaBean负责: ①数据封装保存②数据处理逻辑
    适用场景: model 1 方式适合开发业务逻辑不太复杂的web应用程序(因为 业务逻辑复杂,控制代码较多,在JSP中编写控制代码, 十分不便),这种模式下,JavaBean用于封装业务数据,JSP即负责处理用户请求,有显示数据.

为了解决Model 1 中JSP不擅长处理请求的操作,在model 2 中引用了Servlet,专门用于处理请求。

  1. model 2: JSP + JavaBean + Servlet(此模式采用责任分离思想)
    JSP负责: 页面显示
    JavaBean负责: 数据封装 处理
    Servlet负责: 控制整个程序的处理流程,调用JavaBean进行数据处理, 调用JSP完成页面显示. 在model 2 中, 以Servlet为中心(所有的请求都先发送到Servlet)
    适用场景: model 2 方式适合开发复杂的webt应用,在这种模式下,servlet负责处理用户请求(控制器, 连接模型和视图, 对整个业务流程进行控制, 调用JavaBean封装处理数据, 调用JSP显示页面)

补充: 什么是JavaBean?(JavaBean可以被重复使用)
①是一个Java类
②有一个无参构造器
③所有的成员变量都私有化(被private关键词修饰)
④所有的属性都有public修饰的get, set方法被外界访问.

MVC

mvc模式最早应用于C/S架构中,在J2ee中被广泛应用.
责任分离思想:
	M: Model ,数据模型对象(JavaBean)
		数据模型(Model): 负责封装应用的状态,并实现应用的功能. 通常又分为数据模型和业务逻辑模型, 数据模型用来存放业务数据, 比如订单信息, 用户信息等; 而业务逻辑模型包含应用的业务操作, 比如订单的添加或者修改等.
	V: View , 视图界面(JSP,  html, freemark)
		视图展示(View): 界面, 用来将模型的内容展现给用户, 用户可以通过视图来请求模型进行更新. 视图从模型获得要展示的数据, 然后用自己的方式展示给用户, 相当于提供界面来与用户进行人机交互; 用户在界面上操作或者填写完成后, 会点击提交按钮或者是以其他触发事件的方式, 来想控制器发出请求.
	C: Controller, 控制器(Servlet)
		用来控制应用程序的流程和处理视图所发出的请求. 当控制器接收到用户的请求后, 会将用户的数据和模型的更新相映射, 也就是调用模型来实现用户的请求的功能; 然后控制器会选择用于响应的视图, 把模型更新后的数据展示给用户. 
model2 属于MVC的一部分.

引入三层架构

表示层/表现层: 位与最外层(最上层), 最接近用户. 用于显示数据和接收用户输入的数据, 为用户提供一种交互操作的界面.
业务逻辑层: 表示层和数据库访问层(持久层)之间的桥梁. 实现业务逻辑. 业务逻辑包含: 验证, 计算, 业务规则等.
数据库访问层/持久层: 与数据库交互, 主要实现对数据库的增, 删, 改, 查. 将存储在数据库中的数据提交给业务层, 同时将业务层处理的数据保存到数据库中.
在这里插入图片描述

三层之间的关系:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC发展历程及思想 的相关文章

  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 创建一个 JSON 对象以在 Spring Boot 测试中发布

    我想编写基本测试来使用 JSON 负载在 users URL 上执行 POST 请求来创建用户 我找不到如何将新对象转换为 JSON 到目前为止有这么多 这显然是错误的 但解释了目的 Test public void createUser
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • js几种生成随机颜色方法

  • Windows Vista的安装和配置

    声明 此文章为个人读书笔记 仅记些重要的内容备忘 无盗版之意 更多相关内容请查看 indows Vista使用详解 严禁转载 第二章 Windows Vista的安装和配置 全新安装Windows Vista 从Windows XP升级为W
  • Text-to-image Diffusion Model文本到图像扩散模型综述

    Text to image Diffusion Model文本到图像扩散模型综述 论文地址 https arxiv org pdf 2303 07909 pdf 1 Introduction Text to image模型发展如下图所示 开
  • 判断字符串是否为数字

    不迷迷糊糊 直接整代码 判断字符串是否是数字 判断是否为数字 是 返回true param str return public static boolean isNumeric final String str null or empty
  • vue实现鼠标划入划出判断是否显示内容

    如图所示我想实现当鼠标划入时右上角的设置图标显示 鼠标移出设置图标在隐藏 可以通过vue的 mouseenter和 mouseleave事件来实现
  • Redis事务

    7 Redis事务 7 1 背景 假如你给你朋友转账 此时你的账户会减少1bw 你朋友的账户会多1bw 此时如果你转账失败 但是你朋友的账户也多了1bw 此时这对于银行来说 这就是事故 说明你的程序存在很大漏洞 不能保证数据的原子性 此时就
  • 通俗讲解c++ future/shared_future

    目录 future介绍 std future对象只有在有效的 valid 情况下才有用 useful 查询future对象是否有效 future的拷贝构造函数是被禁用的 对future的处理 四种方式 获取future的状态 future
  • Qt 提升窗口部件 没有效果

    1 新建一个控件的子类 然后再控件上右键点击提升 没有效果 原因1 查看提升的控件的类型是否正确 原因2 查看提升的子类的路径是否正确 如果C 文件跟 pro文件在同一级目录下 直接写头文件 如果在子目录下要写子目录 前面要加 原因3 如果
  • Qt笔记28:QJsonObject和QByteArray的相互转换

    brief 字节数组转Json param byteArray return QJsonObject getJsonFromByteArray const QByteArray byteArray QJsonParseError jsonP
  • 2023年我国网络安全人才市场状况

    网络安全人才市场状况 本章以智联招聘多年来形成的丰富的招聘 求职信息大数据为基础 结合了奇安信集团 在网络安全领域多年来的专业研究经验 相关研究成果具有很强的代表性 对涉及安全人才 的全平台招聘需求与求职简历进行分析 注 本章中的需求指数采
  • Android Studio虚拟机启动后没有开机问题解决

    这里使用的是Android Studio 3 2版本 在Win 10系统上运行 其他环境可能会有所不同 目录 一 新增虚拟机 二 有报错提示时的可能解决办法 三 无报错提示时的可能解决办法 一 新增虚拟机 1 打开AVD Manager A
  • datax导入hive动态分区

    配置hive支持动态分区
  • pandas数据提取

    pandas是一个python数据分析库 提供了多种方法提取数据 一种常用的方法是使用索引和列标签 例如 import pandas as pddf pd read csv data csv 获取特定行 row df loc 0 获取特定列
  • vuepc端实现数据加载_【项目实战经验】vuecli3,实现PC端分辨率适配

    vue cli3 根据屏幕大小适配样式 最近做了一个大屏 考虑到要在不同的显示器上 显示同一套代码 所以我就想到了 阿里的 lib flexible 干货非常多 千万不要错过细节哦 废话不说 直接干 1 安装需要响应的包 npm i lib
  • 【AI实战】大语言模型(LLM)有多强?还需要做传统NLP任务吗(分词、词性标注、NER、情感分类、知识图谱、多伦对话管理等)

    AI实战 大语言模型 LLM 有多强 还需要做传统NLP任务吗 分词 词性标注 NER 情感分类 多伦对话管理等 大语言模型 大语言模型有多强 分词 词性标注 NER 情感分类 多伦对话管理 知识图谱 总结 大语言模型 大语言模型 LLM
  • IDEA 配置aliyunmaven 仓库地址无法下载依赖jar 包

    由于Mavn 默认公共仓库地址是国外的导致下载jar 包比较慢 所以推荐使用aliyun maven 仓库镜像 编辑setting xml 文件 在mirrors节点下 新增如下内容 我按照百度检索的结果 在maven 的setting x
  • 接口测试八(压缩解压)

    转自 http www 360doc com content 16 0128 15 30056680 531241550 shtml 一 什么是HTTP压缩 HTTP压缩采用通用的压缩算法如gzip等压缩HTML JavaScript或CS
  • Vue项目创建

    1 创建项目 在终端中输入命令 vue create 项目名称用以创建项目 在命令输入前会有命名提示符 提示当前所在目录是哪里 输入命令之后 等待片刻 会出现选择vue版本 选择vue2项目 2 配置路由 配置路由 需要下载依赖库 要通过c
  • 常见脚本命令

    1 taskkill是Windows命令行里终止指定程序 进程 的命令 f 表示强制终止 im 表示指定的进程名称 例如 explor exe 2 start C Program Files erwin Data Modeler r9 er
  • MVC发展历程及思想

    两种web应用程序的开发模式 model 1 JSP JavaBean JSP负责 页面显示 页面跳转 调用Javabean处理数据 处理请求 JavaBean负责 数据封装保存 数据处理逻辑 适用场景 model 1 方式适合开发业务逻辑