MVC与三层架构理解

1. JSP的发展

早期只有Servlet,只能使用response输出标签数据,非常麻烦后来。JSP的出现,简化了 Servlet的开发。但是过度的使用JSP,在JSP中写大量的java代码,又前端的页面,造成难以维护,难于分工协作的窘境。
再后来,随着java的web开发的逐步完善,公司的开发需要形成一种规范,来更好的管理和维护代码,借鉴MVC的开发模式,使得程序的设计更加合理性。

JSP(全称JavaServer Pages)是由Sun公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。

JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。

使用JSP做一个小小的项目(一)_jsp项目-CSDN博客

2. MVC思想

MVC(Model View Controller)是软件工程中的一种软件架构模式,它把软件系统分为模型、视图和控制器三个基本部分。用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

MVC每层之间的逻辑关系:

M:Model,模型。 JavaBean

  • 完成具体的业务操作,如:查询数据库,封装对象

V:view视图。JSP、HTML等来进行数据展示

C:Controller控制器。 Servlet

  • 获取View的请求

  • 调用模型将数据交给视图进行展示

控制器Controller 的作用就是将Model 与 View一一对应起来

我们用用户登录这个例子来说明:

View层是index.jsp,Cotroller是/loginServlet,Model是JavaBean对象

用户看到的是JSP展示页面,用户输入数据点击登录按钮时,这是JSP会通过数据共享将请求转发到/loginServlet控制器上

然后控制器再将请求分发到Model上,通过JDBC连接到数据库来查询数据库中是否存在该用户信息。

若存在该用户,则返回信息,让控制器告诉前台页面展示登陆成功的信息;不存在则告诉登陆失败…

View来响应控制器交给它的数据

在这个过程中,控制器其实只是起到了承上启下的作用,它只负责中转(指挥调度),不负责具体的业务操作。

优缺点
【优点】

耦合性低,方便维护,可以利于分工协作

重用性高

【缺点】

使得项目架构变得复杂,对开发人员要求高

3. 三层架构

三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层[表示层](User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。

区分层次的目的即为了“高内聚低耦合” 的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。

  • 服务员:负责接待客人和传菜

  • 主厨:后厨的头头,后处里主厨说了算。可以理解为架构师,负责后厨和服务员的对接

  • 小厨:每个小厨有自己特定的工作,各司其职

三层架构每层之间的逻辑关系:

三层优缺点
【优点】

开发人员可以只关注整个结构中的其中某一层

可维护性高,可扩展性高

可以降低层与层之间的依赖

有利于标准化

利于各层逻辑的复用

【缺点】

降低了系统的性能。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成

有时会导致级联的修改,这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码

增加了开发成本

4. MVC与三层架构的区别

其实,无论是MVC还是三层架构,都是一种规范,都是奔着"高内聚,低耦合"的思想来设计的。三层中的UI和Servlet来分别对应MVC中的View和Controller,业务逻辑层是来组合数据访问层的原子性功能的。

在三层中,业务逻辑层和数据访问层要遵循面型接口编程的。这种接口定义和具体实现逻辑的分开,非常有利于后续扩展和维护!

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

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

相关文章

读书笔记-《价值》-张磊-高瓴资本-1-在长期主义之路上,与伟大格局观者同行,做时间的朋友。

《价值》一书于2020年9月问世,我有幸在2021年阅读了这部作品,从中获益匪浅。然而,令人遗憾的是,书中强调的长期主义与张磊所青睐的教育、医疗等行业的调整,以及高瓴资本随后的战略调整,似乎存在一种微妙的矛…

01 登录注册

文章目录 userMapper.javaUser.javaDButilLoginServlet.javaRegisterServlet.javaTestServlet.javamybatis-config.xmlfailure.htmlsuccess.htmlregist.htmlpom.xml userMapper.java package com.xd.web.mapper;import com.xd.web.pojo.User; import org.apache.ibatis.annotat…

Excel制作甘特图

使用Excel表格制作甘特图,可根据任务开始时间和结束时间自动计算工时,并自动用指定颜色填充横道图。 1.新建Excel文档,先设置项目基本信息,包括表格名称,这里设置为“**项目甘特图”;然后添加任务序号列&a…

Spark安全日志分析与事件调查:实战指南

摘要: 在当今数字化时代,安全日志分析和事件调查变得至关重要。本博客将介绍如何使用Spark进行安全日志分析和事件调查,展示了项目经验、详细的技术细节和提供了代码示例。通过深入理解和准备,您将能够展示您在Spark上的专业知识&…

【软件工程导论】——面向对象与UML(学习笔记)

📖 前言:面向对象是以问题空间中出现的物体为中心进行模型化的一种技术。建立模型是软件工程中最常使用的技术之一。无论软件分析或软件设计,都需要建立模型。UML 就是OO 软件工程使用的统一建模语言。它是一种图形化的语言,主要用…

13、Lua table(表)

Lua table Lua table(表)table(表)的构造Table 操作Table 连接插入和移除Table 排序Table 最大值 Lua table(表) table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数字、字典等。 Luatable 使用关联型数组,你可以用任意类型的…

3D DRAM在2025年来袭

4月1日消息,据半导体工程报道,在行业大会Memcon 2024上,三星电子宣布其计划成为首家在2025年后步入3D DRAM内存时代的行业领军者。随着DRAM内存行业在本十年后期将线宽压缩至低于10纳米,现有的设计解决方案在如此精细的尺度上难以…

音视频技术应用方向概述

文章目录 应用方向概述具体的应用落地1.音视频压缩存储和管理2.编解码和格式转换3.数据容灾备份和恢复4.视频加密解密5.分类标签及检索6.用户权限和访问控制7.视频在线播放和多端兼容8.视频质量监测和优化9.信息安全防护及监测10.视频数据智能化扩展和赋能在现在的软件开发过程…

HarmonyOS 应用开发之Actor并发模型对比内存共享并发模型

内存共享并发模型指多线程同时执行复数任务,这些线程依赖同一内存并且都有权限访问,线程访问内存前需要抢占并锁定内存的使用权,没有抢占到内存的线程需要等待其他线程释放使用权再执行。 Actor并发模型每一个线程都是一个独立Actor&#xf…

Cisco交换机安全配置

Cisco交换机安全配置 前提 我们以下命令一般都要先进入Config模式 S1> enable S1# conf t S1(config)#端口安全保护 禁用未使用的端口 以关闭fa0/1到fa0/24的端口为例 S1(config)# interface range fa0/1-24 S1(config-if-range)# shutdown缓解MAC地址表攻击 防止CAM…

sql注入---Union注入

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 学习目标 了解union注入过程中用到的关键数据库,数据表,数据列sql查询中group_concat的作用使用union注入拿到靶机中数据库里的所有用户名和密码 一. 获得数据库表名和列…

酷开系统 | 酷开科技打造全流程全自动化运营链路

近日,QuestMobile发布的《2023年全景生态流量半年报告》数据显示,随着营销场景边界的拓展,越来越多的品牌方开始将阵地由移动端转移到大屏端。OTT及智能硬件营销占中国互联网营销市场规模比例已经从2020年的3.8%升至2022年的7.6%。随着人口红…

【JavaWeb】Day30.SpringBootWeb请求响应——响应

响应 HTTL协议的交互方式:请求响应模式(有请求就有响应)那么Controller程序,除了接收请求外,还可以进行响应。 1.ResponseBody 在我们前面所编写的controller方法中,都已经设置了响应数据。 controller方…

【C语言进阶】- 内存函数

内存函数 1.1 内存函数的使用1.2 memcpy函数的使用1.3 memcpy函数的模拟实现2.1 memmove函数的使用2.2 memmove函数的模拟实现2.3 memcmp函数的使用2.4 memset函数的使用 1.1 内存函数的使用 内存函数就是对内存中的数据进行操作的函数 1.2 memcpy函数的使用 void* memcpy ( …

Docker容器与Serverless的融合:探索《2023腾讯云容器和函数计算技术实践精选集》中的云原生创新案例

Docker容器与Serverless的融合:探索《2023腾讯云容器和函数计算技术实践精选集》中的云原生创新案例 文章目录 Docker容器与Serverless的融合:探索《2023腾讯云容器和函数计算技术实践精选集》中的云原生创新案例一、引言二、《2023腾讯云容器和函数计算…

Java中的取余与取模运算:概念、区别与实例详解

Java中的取余与取模运算:概念、区别与实例详解 引言一、取余运算(Remainder Operation)二、取模运算(True Modulo Operation)三、区别比较四、实战应用 引言 在Java编程中,当我们提到“取余”和“取模”运算…

产品经理功法修炼(1)之自我管理

点击下载《产品经理功法修炼(1)之自我管理》 1. 前言 产品经理的能力修炼并非局限于某一技能的速成,而是需要全面参与到产品的整个生命周期中,通过不断的实践来逐步提升自己的各项能力。尽管在企业的日常运作中,我们不可能身兼数职去扮演每一个角色,但作为产品的核心负…

【DevOps工具篇】LDAP服务器(slapd)的冗余和扩展功能

【DevOps工具篇】LDAP服务器(slapd)的冗余和扩展功能 目录 【DevOps工具篇】LDAP服务器(slapd)的冗余和扩展功能负载均衡配置和冗余配置同步复制多主复制配置HA集群配置后端和覆盖层syncprov覆盖和syncrepl覆盖relay覆盖meta后端推荐超级课程: Docker快速入门到精通Kubern…

QT(19)-QCamera

QT(19)-QCamera 1 公有类型1.1 帧速率1.2 捕获模式1.3 错误类型1.4 摄像头锁定状态改变的原因1.5 摄像头锁定的整体状态1.6 摄像头可以应用锁定的类型1.7 QCamera::Position1.8 QCamera::State1.9 QCamera::Status 2 公有函数2.1 构造函数:2.2 析构函数:2.3 成员函数…

交通标志识别项目 | 基于Tensorflow+SSD实现道路交通标志识别

项目应用场景 面向智能驾驶或自动驾驶场景道路道路交通标志的识别,在交通标志识别的基础上为下一步的智能决策提供前提 项目效果: 项目细节 > 具体参见项目 README.md (1) 安装依赖 Python3.5、TensorFlow v0.12.0、Pickle、OpenCV-Python、Matplotl…