什么是MVC三层结构

news2025/1/17 3:12:16

1.MVC(三层结构)

在这里插入图片描述

MVC(Model-View-Controller)是一种常见的软件设计模式,用于将应用程序的逻辑和界面分离成三个不同的组件。每个组件负责特定的任务,从而提高代码的可维护性和可扩展性。
以前的模式。

遇到复杂的业务没有什么是加一层解决不了的

在这里插入图片描述
现在的结构
在这里插入图片描述

servlet--CRUD-->数据库
弊端:程序十分臃肿,不利于维护  
servlet的代码中:处理请求、响应、视图跳转、处理JDBC、处理业务代码、处理逻辑代码

架构:没有什么是加一层解决不了的!
程序猿调用
|
JDBC
|
Mysql Oracle SqlServer ....

1.1. 模型(Model)

  • 模型是应用程序的核心部分,负责处理业务逻辑、数据操作和状态管理。
  • 模型层包含了应用程序的数据模型和相关的业务逻辑,它独立于用户界面和用户输入。
  • 模型可以是一个对象、一个集合、数据库访问对象等,它们封装了数据和与数据相关的操作。

业务处理:业务逻辑(Service)
数据持久层:CRUD

1.2. 视图(View)

  • 视图层负责展示数据给用户,并接收用户的输入。
  • 视图通常是用户界面的一部分,可以是一个网页、一个图表、一个报表等。
  • 视图从模型中获取数据并将其呈现给用户,同时也将用户的输入传递给控制器。

展示数据
提供链接发起 Servlet 请求(a,form,img…)

1.3. 控制器(Controller)

  • 控制器充当模型和视图之间的中介,负责协调它们之间的交互。
  • 控制器接收用户的输入并根据输入调用适当的模型方法进行处理。
  • 控制器还负责更新视图的状态,并将最终的结果返回给用户。

接收用户的请求:(req:请求参数、Session 信息…)

交给业务层处理对应的代码

控制试图的跳转

MVC 的工作流程如下:

登录—>接收用户的登录请求—>处理用户的请求(获取用户登录的参数,username,password)---->交给业务层处理登录业务(判断用户名密码是否正确:事务)—>Dao层查询用户名和密码是否正确–>数据库

  1. 用户与视图进行交互,触发了某个事件(比如点击按钮)。
  2. 视图将事件传递给控制器。
  3. 控制器接收到事件并根据事件的类型选择合适的模型方法进行处理。
  4. 模型完成业务逻辑的处理,并返回处理结果给控制器。
  5. 控制器更新视图的状态和显示结果给用户。

通过使用 MVC 三层结构,开发人员可以将应用程序的不同部分分离开来,使得代码更加清晰、可维护性更高。模型、视图和控制器各自独立,可以单独进行测试和修改,而不会对其他组件产生影响。这种分层结构也促进了团队协作,不同开发人员可以并行开发不同的组件。

2.1MVC特点

Spring MVC 是 Spring Framework 中的一个模块,用于构建基于 Java 的 Web 应用程序。它提供了一种灵活且强大的方式来开发 Web 应用程序,实现 MVC(Model-View-Controller)架构。

以下是关于 Spring MVC 的一些关键特点和优势:

2.1. MVC 架构

  • Spring MVC 遵循经典的 MVC 模式,将应用程序分为模型(Model)、视图(View)和控制器(Controller)三层。
  • 模型负责处理业务逻辑和数据操作,视图负责展示用户界面,控制器负责接收请求、处理业务逻辑和返回响应。

2.2. 灵活性

  • Spring MVC 提供了灵活的配置选项,可以通过 XML 配置文件、注解或 Java 代码进行配置。
  • 开发人员可以根据需要定制请求映射、视图解析、拦截器等功能,实现高度定制化的 Web 应用程序。

2.3. 强大的处理器映射

  • Spring MVC 支持多种类型的请求映射,包括基于 URL 模式、HTTP 方法、参数等的映射方式。
  • 可以轻松地定义请求到处理器方法的映射关系,实现灵活的请求处理逻辑。

2.4. 拦截器

  • Spring MVC 提供了拦截器(Interceptor)机制,可以在请求处理的各个阶段进行拦截和处理,实现统一的处理逻辑。
  • 拦截器可以用于权限验证、日志记录、异常处理等方面,提高代码复用性和可维护性。

2.5. 视图解析

  • Spring MVC 支持多种视图解析器,可以将模型数据渲染到不同类型的视图中,如 JSP、Thymeleaf、Freemarker 等。
  • 开发人员可以根据需求选择合适的视图解析器,灵活地定制视图呈现方式。

Spring MVC 是一个功能强大且灵活的 Web 框架,可以帮助开发人员快速构建可扩展、易维护的 Web 应用程序。它与其他 Spring 模块(如 Spring Core、Spring Data 等)结合使用,形成了完整的企业级应用程序开发解决方案。

3示例

以下是一个简单的使用 MVC 结构的 Java Web 应用程序示例,使用 Spring MVC 框架:

  1. 创建模型(Model)
public class User {
    private String username;
    private String email;

    // 省略 getter 和 setter 方法
}
  1. 创建视图(View)
    在 Web 应用程序中,视图通常是一个 JSP 页面,用于展示数据给用户。例如,创建一个名为 “userInfo.jsp” 的 JSP 页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>User Information</title>
</head>
<body>
    <h1>User Information</h1>
    <p>Username: ${user.username}</p>
    <p>Email: ${user.email}</p>
</body>
</html>
  1. 创建控制器(Controller)
@Controller
public class UserController {

    @RequestMapping("/user")
    public String getUser(Model model) {
        User user = new User();
        user.setUsername("john_doe");
        user.setEmail("john.doe@example.com");

        model.addAttribute("user", user);

        return "userInfo";
    }
}
  1. 配置 Spring MVC
    在 Spring 配置文件中配置 Spring MVC,例如使用 JavaConfig 方式:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.controllers")
public class WebConfig implements WebMvcConfigurer {
    
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}
  1. 部署应用程序
    将应用程序打包成 WAR 文件并部署到 Web 服务器中。
    用Tomcat

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

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

相关文章

kettle 9.4和Pentoho 9.4下载及安装方法简介

kettle 9.4和Pentoho 9.4下载及安装方法简介 下载地址&#xff1a; https://sourceforge.net/projects/pentaho/files/ 下载步骤&#xff1a; #------------- 一、点击选项卡&#xff1a;summary/ 二、点击第一行链接 https://www.hitachivantara.com/en-us/products/pentaho…

姿态旋转的哥氏定理以及速度微分的推导

姿态旋转中涉及到坐标系的转换&#xff0c;在有相对旋转的两个坐标系中观察一个向量的变化&#xff0c;用到了哥氏定理。 例如在i系中观察e系下的运动&#xff0c;则 哥氏定理的公式 wie是e相对于i的角运动 注意符号i在前e在后。 wie是e相对于i的角运动 注意符号i在前e在…

WRF模型教程(ububtu系统)-WPS(WRF Pre-Processing System)概述

一、WPS简介 WRF 预处理系统 (WRF Pre-Processing System&#xff0c;WPS) &#xff0c;集成了基于Fortran和C编写的程序&#xff0c;这些程序主要用于处理输入到real.exe的数据。WPS主要有三个程序和一些辅助程序。 二、各程序介绍 主要的程序为geogrid.exe、ungrib.exe、met…

一篇文章带你了解低保真与高保真原型图区别

在原型设计中&#xff0c;低保真原型和高保真原型的区别主要体现在细节和功能上。那么我们在设计原型的时候是用低保真原型还是高保真原型呢&#xff1f;两者最好的使用场景是什么&#xff1f;对此&#xff0c;即时设计做了相应的分析。让我们来看看&#xff01; 1、低保真原型…

[蓝桥杯]-最大的通过数-CPP-二分查找、前缀和

目录 一、题目描述&#xff1a; 二、整体思路&#xff1a; 三、代码&#xff1a; 一、题目描述&#xff1a; 二、整体思路&#xff1a; 首先要知道不是他们同时选择序号一样的关卡通关&#xff0c;而是两人同时进行两个入口闯关。就是说两条通道存在相同关卡编号的的关卡被通…

3冠达成!原知因制药荣获2024年度JMR消费者评选三大No.1

近日&#xff0c;日本调查机构&#xff08;JMR&#xff09;公布了2024年度公众对品牌形象的调查结果&#xff0c;除了人们熟知的资生堂、CPB、POLA、小林制药、DHC等品牌依然获得不错的口碑外&#xff0c;日本高端健康品牌原知因制药凭借优秀的产品实力及良好的社会口碑&#x…

Python新手必学:输入输出全攻略

初学Python编程时&#xff0c;其中一个最基础、也是最重要的部分就是如何处理输入和输出。无论是简单的用户输入&#xff0c;还是程序输出结果&#xff0c;都很重要。现在&#xff0c;我们将一起学习Python输入输出的各种技巧和方法&#xff0c;让你在编写代码时得心应手。 目…

HTML5:七天学会基础动画网页11

CSS3动画 CSS3过渡的基本用法: CSS3过渡是元素从一种样式逐渐改变为另一种样式的效果。 过渡属性-transition 值与说明 transition-property 必需&#xff0c;指定CSS属性的name&#xff0c;transition效果即哪个属性发生过渡。 transition-duration 必需&#xff0c;t…

YOLOv9改进策略:注意力机制 |通道注意力和空间注意力CBAM | GAM超越CBAM,不计成本提高精度

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a;通道注意力和空间注意力CBAM&#xff0c;全新注意力GAM&#xff1a;超越CBAM&#xff0c;不计成本提高精度 改进结构图如下&#xff1a; YOLOv9魔术师专栏 ☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️…

LeetCode2115. 从给定原材料中找到所有可以做出的菜

拓扑排序 题面 题目链接&#xff1a;2115. 从给定原材料中找到所有可以做出的菜 - 力扣&#xff08;LeetCode&#xff09; 你有 n 道不同菜的信息。给你一个字符串数组 recipes 和一个二维字符串数组 ingredients 。第 i 道菜的名字为 recipes[i] &#xff0c;如果你有它 所有…

openstack(T)启动实例状态为错误,如何解决

---基本服务得是正常的 ---1.在web界面看是什么错误 点击你的实例名称&#xff0c;在概况里面去查看 当时我的error &#xff1a;编码500 消息 No valid host was found. 错误原因 1&#xff1a;资源不足 2&#xff1a;未开启虚拟机cpu虚拟化 解决&#xff1a; 1.资源不…

Element-Plus: Select组件实现滚动分页加载

Element-Plus的select组件并没有自带滚动分页加载的功能&#xff0c;其虽然提供了自定义下拉菜单的底部的方式可以自定义上一页及下一页操作按钮的方式进行分页加载切换&#xff1a; 但如果不想通过点击分页按钮的方式&#xff0c;利用滚动触底进行下一页加载的话&#xff0c;…

Arrays对象数组排序 --java学习笔记

假设有四个学生对象&#xff1a; name:"小明",height:168.8,age:22 name:"小红",height:178.5,age:20 name:"小智",height:160.1,age:21 name:"小白",height:230.6,age:22 现在需要按身高对他们进行排序 对象进行排序&#xff0c;默…

19.ADC模数转换器知识点+AD单通道AD多通道应用程序示例

0. 江协科技/江科大-STM32标准库开发-各章节详细笔记-查阅传送门_江协科技stm32笔记-CSDN博客文章浏览阅读2.9k次&#xff0c;点赞44次&#xff0c;收藏128次。江协科技/江科大-STM32标准库开发-各章节详细笔记-传送门至各个章节笔记。基本上课程讲的每句都详细记录&#xff0c…

修改 MySQL update_time 默认值的坑

由于按规范需要对 update_time 字段需要对它做默认值的设置 现在有一个原始的表是这样的 CREATE TABLE test_up (id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 主键id,update_time datetime default null COMMENT 操作时间,PRIMARY KEY (id) ) ENGINEInnoDB DEF…

xss——pdfxss,mxss,uxss,flashxss

uxss&#xff08;但是需要很低的版本才可以使用&#xff09;&#xff08;但是csdn也会有过滤&#xff09; 浏览器插件漏洞 搜索这个跨站语句&#xff0c;然后用翻译功能&#xff0c;它会触发跨站、 测试的时候可以去不断的测试它的所有功能&#xff0c;看也没有触发跨站 flas…

C语言笔记:控制流

ACM金牌带你零基础直达C语言精通-课程资料 本笔记属于船说系列课程之一&#xff0c;课程链接&#xff1a;ACM金牌带你零基础直达C语言精通 你也可以选择购买『船说系列课程-年度会员』产品『船票』&#xff0c;畅享一年内无限制学习已上线的所有船说系列课程&#xff1a;船票购…

1335:【例2-4】连通块

【算法分析】 设数组vis&#xff0c;vis[i][j]表示(i,j)位置已经访问过。遍历地图中的每个位置&#xff0c;尝试从每个位置开始进行搜索。如果该位置不是0且没有访问过&#xff0c;那么访问该位置&#xff0c;并尝试从其上下左右四个位置开始搜索。在看一个新的位置时&#xff…

网络机顶盒什么牌子好?小编盘点零差评网络机顶盒排行榜

在挑选网络机顶盒的时候我们往往会参考销量和口碑&#xff0c;小编花费一个月时间整理了热门网络机顶盒的用户评价情况&#xff0c;整理了这份口碑最好的网络机顶盒排行榜&#xff0c;跟着我一起看看网络机顶盒什么牌子好吧。 NO.1、泰捷WEBOX WE40S网络机顶盒 在混迹网络机顶…

Linux下的多线程编程:原理、工具及应用(1)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;Flower of Life—陽花 0:34━━━━━━️&#x1f49f;──────── 4:46 &#x1f504; ◀️ ⏸ ▶️ ☰ …