【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.rhkb.cn/news/299077.html

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

相关文章

《捕鱼_ue4-5输出带技能的透明通道素材到AE步骤》

《捕鱼_ue4-5输出带技能的透明通道素材到AE步骤》 2022-05-17 11:06 先看下带透明的特效素材效果1、首先在项目设置里搜索alpha,在后期处理标签设置最后一项allow through tonemapper2、在插件管理器中,搜索movie render ,加载movie render q…

图论模板详解

目录 Floyd算法 例题:蓝桥公园 Dijkstra算法 例题:蓝桥王国 SPFA算法 例题:随机数据下的最短路问题 总结 最小生成树MST Prim算法 Kruskal算法 例题:聪明的猴子 Floyd算法 最简单的最短路径算法,使用邻接…

win10上一个详细的Django开发入门例子

1.Django概述 Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。 Django 框架的核心组件有: 用于创建模型的对象关系映射; 为最终用户设计较好的管理界面&#xff1b…

数学矩阵GCD和lCM(详解)

矩阵乘法 知阵乘法是《线性代数》中的基础内容,但在考察数学的算法题中也会出现。 本节我们学习基础的矩阵乘法规则。 每个矩阵会有一个行数和一个列数,只有当相乘的两个矩阵的左矩阵的列数等于右矩阵的行数 时,才能相乘,否则不允…

Rust---复合数据类型之枚举、数组

目录 枚举的使用Option 枚举数组的使用输出结果 枚举(Enum):表示一个类型可以有多个不同的取值。枚举类型可以包含不同的变体(variants),每个变体可以有不同的数据类型。 枚举的使用 enum Direction {Up,…

LeetCode-131. 分割回文串【字符串 动态规划 回溯】

LeetCode-131. 分割回文串【字符串 动态规划 回溯】 题目描述:解题思路一:回溯, 回溯三部曲解题思路二:0解题思路三:0 题目描述: 给你一个字符串 s,请你将 s 分割成一些子串,使每个…

八股面试速成—Java语法部分

暑期实习面试在即,这几天八股和算法轮扁我>_ 八股部分打算先找学习视屏跟着画下思维导图,然后看详细的面试知识点,最后刷题 其中导图包含的是常考的题,按照思维导图形式整理,会在复盘后更新 细节研究侧重补全&a…

牛客NC181 单词拆分(一)【中等 动态规划,前缀树 Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/c0d32c1ce5744472a01b2351a2c2767f 思路 前缀树动态规划参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规…

Docker、Kubernetes之间的区别

比较容器化工具:了解 Docker、Kubernetes 在应用程序部署和管理方面的差异。 基本概述 Docker 是一个流行的容器化平台,允许开发人员在容器中创建、部署和运行应用程序。 Docker 提供了一组工具和 API,使开发人员能够构建和管理容器化应用程…

C++输出格式控制

setprecision(n)可控制输出流显示浮点数的数字个数。C默认的流输出数值有效位是6,所以不管数据是多少,都只输出六位。如果setprecision(n)与setiosflags(ios::fixed)或者setiosflags(ios_base::fixed)合用,可以控制小数点右边的数字个数。set…

数据结构面试题报错调试方法记录

栈和队列报错调试 1.用栈实现队列 232. 用栈实现队列 - 力扣(LeetCode) 此题解题思路如下: 先将数据放在pushst栈里面,popst栈为空再把pushst栈里面的数据放进popst栈里面去,不为空则不执行。不为空时候直接拿取栈…

机器学习模型——关联规则

目录 关联规则 - 基本概念 关联规则的挖掘步骤: Apriori算法 Apriori算法简介: Apriori算法举例: Apriori算法优缺点: Apriori算法应用 FP-growth算法: FP-growth算法简介: FP-growth的数据结构: …

Mysql的基本命令

1 服务相关命令 命令描述systemctl status mysql查看MySQL服务的状态systemctl stop mysql停止MySQL服务systemctl start mysql启动MySQL服务systemctl restart mysql重启MySQL服务ps -ef | grep mysql查看mysql的进程mysql -uroot -hlocalhost -p123456登录MySQLhelp显示MySQ…

OLAP 和 OLTP

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 OLTP与OLAP的介绍OLTP(on-line transaction processing):联机事务处理OLAP(On-Line Analytical Processing&#xff…

Dockerd的使用

端口映射 存储卷 类似于mount,把真机的某个目录映射都容器里面 -v 选项可以有多个 利用存储卷修改配置文件 容器间网络模式 共享网络为 --networkcontainer:容器名 微服务架构 一种由容器为载体,使用多个小型服务组合来构建复杂的架构为…

【可靠性】陷阱电荷对TDDB影响的多尺度模拟

【From Accelerated to Operating Conditions: How Trapped Charge Impacts on TDDB in SiO2 and HfO2 Stacks】 文章总结: 本研究深入探讨了在SiO2和HfO2介质堆叠中,陷阱电荷对时间依赖介电击穿(TDDB)现象的影响。通过引入载流子…

ElementUI 表格横向滚动条时滚动到指定位置

ElementUI 表格横向滚动条时滚动到指定位置 getColumnOffset(columnProp) {this.$nextTick(() > {const table this.$refs.tableRef.$refs.multipleTable;const columns table.columns;const column columns.find((col) > col.property columnProp);if (column) {// …

Kafka基础 (上)

前言 各位清明 快乐呀,近期博主也是学习了一下kafka,以下是博主的一些学习笔记,希望对你有所帮助 前置知识 线程中的数据交互以及进程中的数据交互 我们知道线程之间可以使用堆空间进行数据交互的 但是如果发送方和接收方处理数据的效率差距过大,这里就会造成消息积压的问题,怎…

UE小:UE5.3无法创建C++工程

当您在使用Unreal Engine (UE) 构建项目时,如果遇到以下问题: Running C:/Program Files/Epic Games/UE\_5.3/Engine/Build/BatchFiles/Build.bat -projectfiles -project"C:/UEProject/Shp\_1/Shp\_1.uproject" -game -rocket -progress Usi…

Hippo4j线程池实现技术

文章目录 🔊博主介绍🥤本文内容部署运行模式集成线程池监控配置参数默认配置 📢文章总结📥博主目标 🔊博主介绍 🌟我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家…