【Java EE】初识Spring Web MVC

文章目录

  • 🌴什么是Spring Web MVC?
    • 🌸什么是Servlet呢?
  • 🌲MVC 定义
    • 🌸再理解Spring MVC
  • 🌳如何学习Spring MVC呢?
  • ⭕总结

🌴什么是Spring Web MVC?

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在Spring框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为)Spring MVC).

🌸什么是Servlet呢?

Servlet是⼀种实现动态⻚⾯的技术.准确来讲Servlet是⼀套Java Web 开发的规范,或者说是⼀套Java Web 开发的技术标准.

只有规范并不能做任何事情,必须要有⼈去实现它.所谓实现Servlet规范,就是真正编写代码去实现Servlet规范提到的各种功能,包括类、⽅法、属性等.

Servlet规范是开放的,除了Sun公司,其它公司也可以实现Servlet规范,⽬前常⻅的实现了Servlet规范的产品包括Tomcat、Weblogic、Jetty、Jboss、WebSphere等,它们都被称为)Servlet容器".

Servlet容器⽤来管理程序员编写的Servlet类

从上述定义我们可以得出⼀个信息:Spring Web MVC是⼀个Web框架,简称Spring MVC

当我们理解了什么是Spring Web MVC,就不得不理解一下MVC。

🌲MVC 定义

MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分。如下图所示
在这里插入图片描述

  • View(视图):指在应⽤程序中专⻔⽤来与浏览器进⾏交互,展⽰数据的资源.

  • Model(模型):是应⽤程序的主体部分,⽤来处理程序中数据逻辑的部分.

  • Controller(控制器) :可以理解为⼀个分发器,⽤来决定对于视图发来的请求,需要⽤哪⼀个模型来处理,以及处理完后需要跳回到哪⼀个视图。即⽤来连接视图和模型

这个过程我们可以想象成去饭店吃饭

客⼾进店之后,服务员来接待客⼾点餐,客⼾点完餐之后,把客⼾菜单交给前厅,前厅根据客⼾菜单给后厨下达命令.后厨负责做饭,做完之后,再根据菜单告诉服务员,这是X号餐桌客⼈的饭.

在这个过程中

服务员就是View(视图):负责接待客⼾,帮助客⼾点餐,以及给顾客端饭
前厅就是Controller(控制器):根据⽤⼾的点餐情况,来选择给哪个后厨下达命令.
后厨就是Model(模型):根据前厅的要求来完成客⼾的⽤餐需求

🌸再理解Spring MVC

当我们知道知道了MVC后,就能更好的理解Spring MVC了。

Spring MVC 其实就是对MVC思想的具体实现.除此之外,Spring MVC还是⼀个Web框架
.
总结来说,Spring MVC是⼀个实现了MVC模式的Web框架.

那我们需要怎么样创建Spring MVC项目呢?其实博主在SpringBoot的创建与简单使用已经演示过了,就是在添加依赖的时候。如下图所示:
在这里插入图片描述
这时候可能有些人就懵了,前⾯创建的不是SpringBoot项⽬吗?怎么⼜变成了SpringMVC项⽬?他们之间到底有着什么样的关系?

SpringBoot是2014年发布的,Spring是2004年发布的,在2014年发布之前,就不能⽤Spring实现MVC架构吗?答案显然不是这样的.

Spring Boot只是实现Spring MVC的其中⼀种⽅式⽽已.

Spring Boot 可以添加很多依赖,借助这些依赖实现不同的能.Spring Boot 通过添加Spring WebMVC框架, 来实现web功能

⽐如:厨房可以⽤来做饭,但真实实现做饭功能的是⽕以及各种做饭相关的⻝材和⼯具.
厨房就好⽐是SpringBoot,厨房可以装柜⼦,实现收纳功能,装燃⽓灶等,实现做饭功能.做饭这个事,就是MVC,在⼏千年前,有⽕有⻝材就可以实现做饭.

我们需要记住的是Spring MVC是一种思想,这种思想可以有很多方式来实现,而SpringBoot就是其中的一种。

不过Spring在实现MVC时,也结合⾃⾝项⽬的特点,做了⼀些改变,相对⽽⾔,下⾯这个图或许更加合适⼀些
在这里插入图片描述

🌳如何学习Spring MVC呢?

既然是 Web 框架, 那么当⽤⼾在浏览器中输⼊了 url 之后,我们的Spring MVC项⽬就可以感知到⽤⼾的请求,并给予响应.

咱们学习Spring MVC,重点也就是学习如何通过浏览器和⽤⼾程序进⾏交互.

主要分以下三个⽅⾯:

  1. 建⽴连接: 将⽤⼾(浏览器)和Java程序连接起来,也就是访问⼀个地址能够调⽤到我们的Spring程序。
  2. 请求: ⽤⼾请求的时候会带⼀些参数,在程序中要想办法获取到参数,所以请求这块主要是获取参数的功能.
  3. 响应: 执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤⼾,也就是响应.

对于Spring MVC来说,掌握了以上3个功能就可以学好Spring MVC.

⭕总结

感谢大家的阅读,希望得到大家的批评指正,和大家一起进步,与君共勉!

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

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

相关文章

Github 2024-04-05Java开源项目日报Top9

根据Github Trendings的统计,今日(2024-04-05统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目9TypeScript项目1OpenAPI 生成器:基于规范自动生成API工具 创建周期:2155 天开发语言:Java协议类型:Apache License 2.0Star数量:1…

二叉树oj题(1)

1.检查两棵树是否相同 解题思路: 1.两棵树都为空,return true 2.一个为空,一个不为空,return false 3.节点不为空,但值不相同,return false 以上都是特殊情况,如果没有这些情况,就…

NoSQL概述

NoSQL概述 目录 一、为什么用NoSQL 二、什么是NoSQL 三、经典应用分析 四、N o S Q L 数 据 模 型 简 介 五、NoSQL四大分类 六、CAP BASE 一、为什么用NoSQL 1、单机MySQL的美好年代 在90年代,一个网站的访问量一般不大,用单个数据库完全可以轻松应…

理解Go语言中的并发和并行

即使有多年的并发编程经验,有些开发人员也可能无法清楚地理解并发(concurrency)和并行(parallelism)之间的区别。下面我们以一个真实的例子来说明:一家咖啡店。 在这家咖啡店中,一名服务员负责接收订单并使用一台咖啡机进行准备。顾客下订单,然后等待他们的咖啡。 …

99%的人不知道,Oracle resetlogs强制开库需要推进SCN?

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

蓝桥杯 十一届C++A组 字符排序 21分(运行超时)

思路: 1. 此题考查的冒泡排序中的交换次数,其实就是考察当前数与后面的逆序对个数问题。而为了最大利用位数,应当使每一位都不小于后面的字符,否则会造成一次逆序对的浪费(贪心,为了使总位数最少&#xff…

贪心算法|55.跳跃游戏

力扣题目链接 class Solution { public:bool canJump(vector<int>& nums) {int cover 0;if (nums.size() 1) return true; // 只有一个元素&#xff0c;就是能达到for (int i 0; i < cover; i) { // 注意这里是小于等于covercover max(i nums[i], cover);if…

了解IP地址的基本概念和修改步骤

在数字化时代&#xff0c;IP地址作为网络设备的唯一标识&#xff0c;其重要性不言而喻。无论是为了提升网络性能&#xff0c;还是出于隐私保护的需求&#xff0c;修改IP地址都是网络使用者可能遇到的操作。虎观代理将详细介绍如何修改IP地址&#xff0c;并探讨在修改过程中需要…

Codeforces Round 832 (Div. 2) D. Yet Another Problem

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e18, maxm 4e4 5; c…

python_3

文章目录 题目运行结果模式A模式B模式C模式D 题目 mode input("请选择模式:") n int(input("请输入数字:"))if mode "A" or mode "a":# 模式A n:输入的层数 i:当前的层数# 每行数字循环次数 ifor i in range(1, n 1):for j in r…

C++语言学习(二)——⭐缺省参数、函数重载、引用

1.⭐缺省参数 &#xff08;1&#xff09;缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实参则采用该形参的缺省值&#xff0c;否则使用指定的实参。 void Func(int a 0) {cout<<a<<endl; } int…

使用Docker部署SpringBoot项目(避坑+超级详细版本,Linux运维基础72问

使用Docker部署SpringBoot项目&#xff08;避坑超级详细版本&#xff09; 所有文章不设限&#xff0c;我们相遇偶然&#xff0c;相散坦然&#xff0c;互不打扰&#xff0c;各自安好&#xff0c;向阳而生 首先呢&#xff0c;非常感谢我们一起相遇在这个地方&#xff0c;想必此…