设计模式 之 —— MVC模式

news2024/11/16 18:06:32

目录

什么是MVC模式?

MVC 工作流程:

MVC模式(java示例.部分代码)

1、Model

java

2、View

HTML

CSS

JS

3、Controller

java

运行结果:

适用场景:


什么是MVC模式?

MVC模式提供了灵活的架构,方便开发者分离关注点,把应用程序分为三个大的主要组件:

M(Model)模型,V(View)视图,C(Controller)控制器:

Model:管理数据和业务逻辑。

View:显示模型中的数据,提供用户界面。

Controller:接收用户输入,调用模型和视图进行处理。

MVC 工作流程:

1、用户交互:用户通过视图与应用程序进行交互(如点击按钮、填写表单)。
2、请求处理:视图将用户输入转发给控制器。
3、业务逻辑:控制器处理请求,调用模型完成数据处理。
4、数据更新:模型更新后,控制器将数据传递回视图。
5、视图更新:视图根据模型数据更新界面,向用户展示结果。

MVC模式(java示例.部分代码)

 博主学Spring框架的,所以我直接拿我的Spring MVC部分代码来做示例了     = . =   

这是一个简单的登录功能。

1、Model

java
public class User {

    private Integer id;

    private String  username;

    private String password;

    private String email;

    public User() {
    }

    public User(Integer id, String username, String password, String email) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.email = email;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

2、View

HTML
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登录界面</title>
    <link rel="stylesheet" href="../static/css/login.css">
    <script src="../static/js/jquery.js"></script>
    <script src="../static/js/jquery.cookie.js"></script>
    <script src="../static/js/login.js" defer></script>
</head>

<body>
    <div class="contanier">
        <div class="title">登录</div>
        <input type="text" placeholder="账号" class="account">
        <input type="password" placeholder="密码" class="password">
        <input type="button" value="登录" class="btn">
        <span>没有账号?<a href="register.action">去注册</a> | <a href="forget.action">忘记密码</a></span>
    </div>
</body>

</html>
CSS
* {
    padding: 0;
    margin: 0;
}

body {
    height: 100vh;
    background: linear-gradient(30deg, rgb(47, 64, 85), rgb(93, 129, 172));
    display: flex;
    align-items: center;
    justify-content: center;
}

.contanier {
    height: 350px;
    width: 300px;
    background: #fff;
    border-radius: 15px;
    display: flex;
    flex-direction: column;
    padding: 20px;
}

.title {
    font-size: 40px;
    text-align: center;
    font-family: aaa;
    font-weight: 600;
    color: rgb(170, 170, 221);
    text-shadow: 1px 1px 2px rgb(47, 64, 85);
    margin-bottom: 30px;
}

.account,
.confirm_password,
.password,
.email,
.confirm_password {
    margin: 20px 0;
    border: none;
    border-bottom: 1px solid #000;
    outline: none;
    padding: 5px;
}

.btn,.btn2,.btn3 {
    margin-top: 80px;
    cursor: pointer;
    border: none;
    background: linear-gradient(90deg, rgb(47, 64, 85), rgb(93, 129, 172));
    padding: 5px;
    border-radius: 10px;
    color: #fff;
}

span {
    font-size: 13px;
    margin-top: 10px;
    text-align: center;
}

span a {
    text-decoration: none;
}

.btn:hover,.btn2:hover,.btn3:hover
{
    background: linear-gradient(270deg, rgb(47, 64, 85), rgb(93, 129, 172));
}

@font-face {
    font-family: "aaa";
    src: url("../font/HuXiaoBoSaoBaoTi-2.otf");
}
JS
$(".btn").on("click",function(){
    var account = $(".account").val()
    var password = $(".password").val()

    if(account=="" || password==""){
        alert('账号或密码不能为空!')
        return false;
    }

    $.ajax({
        url:"login.action",
        type:"post",
        data:{
            account,password
        },
        success:function(value){
            if(value>0){
                alert('登陆成功')
                location.href="index"
                $.cookie("account",account)
            }else{
                alert('登录失败')
            }
        }
    })
})

3、Controller

java
@Controller
public class UserController {

    @Autowired
    private UserService userService;

    //登录
    @RequestMapping(value="login.action",method= RequestMethod.POST)
    @ResponseBody
    public int login(String account, String password, Model model, HttpSession session) {
        System.out.println("account " +account + ",password "+ password);
        User user = userService.findUser(account,password);
        int result=0;
        if(user != null){
            result++;
            session.setAttribute("User_SESSION",user);
        }
        System.out.println("result " +result);
        return result;
    }

    //向登录页面跳转
    @GetMapping("/login.action")
    public String toLogin() {
        return "login";
    }

}

运行结果:

适用场景:

适用于应用程序的分层开发:开发大型应用程序,需要清晰分离数据、业务逻辑和用户界面时,考虑使用MVC模式。要保证模型、视图、控制器交互清晰。

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

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

相关文章

基于 C# 的文本文件的编码识别

基于 C# 的文本文件的编码识别 前言一、有 BOM 文件头二、无 BOM 文件头三、简体中文汉字编码四、C# 程序对编码的识别1、文件选择按钮代码&#xff1a;2、获取文件编码&#xff0c;有 BOM 的文件识别3、获取文件编码&#xff0c;UTF8 无 BOM 文件的识别4、获取文件编码&#x…

如何有效应对商标撤三挑战?

商标撤三作为商标法中的一项重要制度&#xff0c;时刻考验着企业的商标维护与保护能力。面对这一挑战&#xff0c;企业如何构建一套有效的商标撤三管理体系&#xff0c;以确保自身品牌权益不受侵害&#xff0c;成为了一个亟待解决的问题。 理解商标撤三制度的核心要义 商标撤三…

【MyBatis 源码拆解系列】执行 Mapper 接口的方法时,MyBatis 怎么知道执行的哪个 SQL?

欢迎关注公众号 【11来了】 &#xff0c;持续 MyBatis 源码系列内容&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址&#xff1a;点击查看文章导读&#xff01; 感谢你的关注&#xff…

web前端-CSS字体属性

CSS Fonts(字体)属性用于定义字体系列、大小、粗细、和文字样式(如斜体)。 一、字体 1.字体系列 CSS使用font-family属性定义文本的字体系列 例如&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&l…

vmware-toolbox安装,VMware虚拟机访问win10共享目录

问题&#xff1a;VMware界面无法安装vmware-toolbox&#xff0c;共享目录设置失败 解决方法&#xff1a; VMware设置 共享文件夹 ubuntu24 vm中运行vmware-toolbox-cmd -v 检查版本 vm运行sudo apt install open-vm-tools // vm可能需要重启 vm的 /mnt 目录下如果没有 hgfs…

UE5 C++: 插件编写04 | 增加和删改前缀

准备工作 UObject* Asset UObject* Asset 通常指的是一个指向UObject的指针。UObject是Unreal Engine中的基类&#xff0c;几乎所有的引擎对象都继承自UObject。这个指针可以引用任何派生自UObject的对象&#xff0c;比如蓝图、材质、贴图、音频资源等资产。 如果你看到UObj…

开箱即用的大模型应用跟踪与批量测试方案

背景介绍 最近抽空参加了一个讯飞的 RAG 比赛&#xff0c;耗时两周终于在最后一天冲上了榜首。 整体的框架是基于 RAG 能力有点弱弱的 Dify 实现。在比赛调优的过程中&#xff0c;经常需要批量提交几百个问题至 Dify 获取回答&#xff0c;并需要跟踪多轮调优的效果差异。借助…

Paxos 协议详解:分布式系统一致性的基石

文章目录 1. 分布式系统与一致性问题1.1 分布式系统的定义1.2 一致性问题的起源1.3 CAP 定理及其影响1.4 分布式系统中的失败假设 2. Paxos 协议的背景与介绍2.1 Paxos 协议是什么2.3 Paxos 解决什么问题 3. Paxos 的基本原理3.1 Paxos 角色3.2 Paxos 的多数原则3.3 Paxos 协议…

Python画笔案例-068 绘制漂亮米

1、绘制漂亮米 通过 python 的turtle 库绘制 漂亮米,如下图: 2、实现代码 绘制 漂亮米,以下为实现代码: """漂亮米.py注意亮度为0.5的时候最鲜艳本程序需要coloradd模块支持,安装方法:pip install coloradd程序运行需要很长时间,请耐心等待。可以把窗口最小…

找不到MFC100U.dll,无法继续执行代码,重新安装此程序可解决此问题

概要 最近在研究中移物联的模组ML307R&#xff0c;通过二次开发 的方式对之前开发的物联网--如意控项目进行升级&#xff0c;研究了ML307R模组的开发资料&#xff0c;中移物联的模组二次开发难度确实很高&#xff0c;中移物联ML307R的openCPU开发采用的事C语言开发的&#xff0…

局域网中实现一对一视频聊天(附源码)

一、什么是webRTC WebRTC&#xff08;Web Real-Time Communication&#xff09;是一项支持网页浏览器进行实时语音对话或视频对话的API技术。它允许直接在浏览器中实现点对点&#xff08;Peer-to-Peer&#xff0c;P2P&#xff09;的通信&#xff0c;而无需任何插件或第三方软件…

不可思议的转折,这部韩剧在口碑上实现逆袭

今天&#xff0c;推荐一下韩国版的《纸钞屋》&#xff0c;第一季豆瓣从9.4分滑到6.9分。第二季的回归却让这部剧迎来了“翻身仗”&#xff0c;目前豆瓣已飙升至8.4。 对比第一季&#xff0c;第二季不仅在剧情反转和人物刻画上有了明显的提升&#xff0c;还引入了《黑暗荣耀》中…

浅谈Agent智能体

Agent智能体无疑是24年最为火爆的话题之一&#xff0c;那么什么是Agent智能体&#xff1f;有什么作用&#xff1f;为什么需要Agent智能体&#xff1f; 用下边一张图简单说明一下 每日进步一点点

Python制作进度条,18种方式全网最全!(不全去你家扫厕所!)

想象一下&#xff0c;你的程序在执行复杂任务时&#xff0c;不再是冷冰冰的等待光标&#xff0c;而是伴随着色彩斑斓、动态变化的进度条&#xff0c;不仅让等待变得有趣&#xff0c;更让用户对你的作品刮目相看。从基础的文本进度条到高级的图形界面进度条&#xff0c;从简单的…

小程序兼容问题

【微信小程序】安卓兼容问题&#xff0c;scroll-view上拉导致input输入框上移 引用&#xff1a;https://blog.csdn.net/krico233/article/details/127491690 当一个scroll-view占据全屏高度(100vh)并包含input表单时&#xff0c;输入框聚焦会导致光标上移但输入框本身位置不变…

【C语言】数组(上)

【C语言】数组 1、数组的概念2、一维数组的创建和初始化2.1数组创建2.2数组的初始化2.3数组的类型 3、一维数组的使用3.1数组下标3.2 数组元素打印3.3数组的输入 4、一维数组在内存中的存储5、sizeof计算数组元素个数 1、数组的概念 数组是一组相同类型元素的组合&#xff0c;…

【RabbitMQ】面试题

在本篇文章中&#xff0c;主要是介绍RabbitMQ一些常见的面试题。对于前几篇文章的代码&#xff0c;都已经在码云中给出&#xff0c;链接是mq-test: 学习RabbitMQ的一些简单案例 (gitee.com)&#xff0c;如果存在问题的话欢迎各位提出&#xff0c;望共同进步。 MQ的作用以及应用…

快速上手Make Sense:在线标注数据集的强大工具

链接&#xff1a; Makesense汉化版本 Makesense英文版 随着深度学习在计算机视觉领域的广泛应用&#xff0c;数据集标注成为了一项重要的任务。Make Sense正是一个为图像数据集提供标注功能的在线工具。其易用性和强大的功能使得它在众多标注工具中脱颖而出。本文将为你详细介绍…

找不到msvcr100.dll怎么解决?总结6个有效的解决方法

在使用计算机的过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcr100.dll丢失”。这个问题可能会让我们感到困惑和无助&#xff0c;但是不用担心&#xff0c;本文将为大家介绍六种实用的解决方法&#xff0c;帮助你轻松解决这个问题。 一&#xff…

raylib实现生产者消费者模型增加缓冲提高帧率

原来增加了四叉树导致帧率下降 后来学了生产者消费者模型&#xff0c;尝试追加缓冲池&#xff0c;剥离主函数查找需要更新的数据 帧率上升稳定到60帧 多了10 帧 中间工程主要是探索数据结构体怎么安排 // 参考自 https://zhuanlan.zhihu.com/p/693482704 #include <stdio.…