Spring Web MVC入门(1)

什么是Spring Web MVC?

定义:Spring Web MVC是基于Servlet构建的原始Web框架,从一开始就包含在Spring框架中.它的正式名称"Spring Web MVC"来自其源模块的名称(Spring-webmvc),但是它通常被称为"Spring MVC".

什么是Servlet?

Servlet是一种实现动态页面的技术.准确地来讲Servlet是一套Java Web开发的规范,或者是一套Java Web开发的技术标准.只有规范并不能做任何事情,必须要有人来实现它.所谓实现Servlet规范,就是真正编写代码去实现Servlet规范提到的各种功能,包括类,方法,属性等.

从定义中可以得到一个关键信息: Spring Web MVC是一个Web框架. 之后我们简称为:Spring MVC

然而想真正搞清楚什么是Spring MVC, 我们首先要搞懂MVC是什么.

MVC定义

MVC是Model View Controller的缩写,它是软件工程中的一种软件架构设计模式,它把软件系统分为模型,视图和控制器三个基本部分.

View(视图):指在应用程序中专门与浏览器进行交互,展示数据的资源.

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

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

比如去饭店吃饭

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

在这个过程中

服务员就是View(视图),负责接待客户,帮助客户点餐,以及给顾客端饭.

前厅就是Controller(控制器),根据用户的点餐情况,来选择给哪个后厨下达命令.

后厨就是Model(模型),根据前厅的要求来完成客户的用餐需求. 

 什么是Spring MVC

MVC是一种架构设计模式,也是一种思想,而Spring MVC是对MVC思想的具体实现.除此之外,Spring MVC还是一个Web框架.

总结来说, Spring MVC是一个实现了Web模式的MVC框架.

所以Spring MVC主要的关注有两个点: 1.MVC; 2.Web框架.

Spring boot和Spring MVC之间的关系:

Spring Boot是实现Spring MVC的一种方式.

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

比如:厨房可以用来做饭,但真实实现做饭功能的是火及各种做饭的相关食材和工具.

厨房就好比Spring Boot,厨房可以装柜子,实现收纳功能,装燃气灶等,实现做饭功能.

做饭这个事,就是MVC,在几千年前,有火有食材就可以做饭. 

不过Spring在实现MVC时,也结合自身项目的特点,做了一点改变,相对而言,使用这个图更合适:
 

不过核心没有变

比如上面的例子中,去饭店吃饭.一些饭店是前厅负责接待客户,帮助客户点餐,也就是Controller来负责接收用户的请求. 

学习Spring MVC

既然是Web框架,那么当在浏览器中输入url之后,我们的Spring MVC就可以感知到用户的请求,并给予响应.(我们学习Spring MVC,重点也就是学习如何通过浏览器和用户程序进行交互).

主要分以下几个方面:

1.建立连接:将用户(浏览器)和Java程序连接起来,也就是访问一个地址能够调用到我们的Spring程序.

2.请求:用户请求的时候会带一些参数,在程序中要想办法获取到参数,所以请求这块主要是获取到参数的功能.

3.响应:执行业务逻辑之后,要把程序执行的结果返回给用户,也就是响应. 

比如用户去银行存款

1.建立连接:去柜台

2.请求:带着银行卡,身份证去存款.

3.响应:银行返回一张存折. 

对于Spring MVC来说,掌握了以上三个功能就相当于掌握了Spring MVC.

建立连接

在Spring MVC中使用@RequestMapping 来实现URL路由映射,也就是浏览器连接程序的作用. 

创建一个UserController类,实现用户通过浏览器和程序的交互,具体实现的代码如下:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {//路由器规则注册@RequestMapping("/sayHi")public String sayHi() {return "hello, Spring MVC";}
}

方法名和路径名称无需一致.

接下来访问:http://127.0.0.1:8080/sayHi,就可以看到程序返回的程序了.

 

@RequestMapping注解介绍

@RequestMapping是SpringMapping 是Spring Web MVC应用程序中最常被用到的注解之一,它是用来注册接口的路由映射的.

表示服务收到请求时,路径为/sayHi的请求就会调用sayHi这个方法的代码.

路由映射:当用户访问一个URL时,将用户的请求对应到应用程序中某个类的某个方法的过程就叫做路由映射. 

既然@RequestMapping已经可以达到我们的目的了,我们为什么还要加@RestController呢?

我们把@RestController去掉,再来访问一次:

可以看到,程序报了404,找不到页面.

这就是@RestController起到的作用

一个项目中,会有很多类,每个类可能有很多的方法,Spring程序怎么知道要执行哪个方法呢?

Spring会对所有的类进行扫描,如果类加了注解@RestController, Spring才会去看这个类里面的方法有没有加@RequestMapping这个注解,当然它的作用不止这一点,咱们先用.

@RequestMapping使用

@RequestMapping即可修饰类,也可以修饰方法,当修饰类和方法时,访问的地址是类路径 + 方法路径.

@RequestMapping标识一个类:设置映射请求的请求路径的初始信息.

@RequestMapping标识一个方法:设置映射请求路径的具体信息. 

@RequestMapping("/user")
@RequestController
public class UserController {@RequestMapping("/sayHi")public String sayHi() {return "Hello, Spring MVC";}
}

访问地址:http://127.0.0.1:8080/user/sayHI

注意:@RequestMapping的URL路径最前面加不加 / (斜杠)都可以,Spring程序启动时,会进行判断,如果前面没有加 / , Spring就会加上一个 / .

访问之后仍然是可以正常响应的. (通常情况下,我们都会加上 / 

@RequestMapping的路径也可以是多层路径,最终访问时,依然是类路径 + 方法路径.

​
@RequestMapping("/user/m1")
@RequestController
public class UserController {@RequestMapping("/say/hi")public String sayHi() {return "Hello, Spring MVC";}
}​

访问路径:http://127.0.0.1:8080/user/m1/say/hi

 @RequestMapping是GET还是POST请求?

我们来测试一下就可以得到结论了.

GET请求:

浏览器发送的类型都是get,通过以上案例,可以看出来@RequestMapping支持get请求.

POST请求:

我们通过form表单来构造请求.

创建test.html, html代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><form action="/request/hello" method="post"><input type="submit" value="发送请求"></form>
</body>
</html>

访问方式为http://127.0.0.1:8080/test.html

从运行结果可以看出:@RequestMapping既支持Get请求,又支持Post请求.同理,也支持其它的请求方式. 

 

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

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

相关文章

springboot+ssm基于vue.js的客户关系Crm管理系统

系统包含两种角色&#xff1a;管理员、用户&#xff0c;主要功能如下。 ide工具&#xff1a;IDEA 或者eclipse 编程语言: java 数据库: mysql5.7 框架&#xff1a;ssmspringboot都有 前端&#xff1a;vue.jsElementUI 详细技术&#xff1a;springbootSSMvueMYSQLMAVEN 数据库…

电梯机房秀

每天乘坐电梯&#xff0c;您见过电梯的机房吗&#xff1f;来&#xff0c;跟着小伍去看看吧。Lets go&#xff01; 电梯还能节能呢&#xff0c;您知道么&#xff1f;正好&#xff0c;小伍一块带您看看电梯节能装置(●◡●) 目前电梯节能装置已广泛应用于三菱、富士、日立、奥的斯…

案例分析篇12:可靠性设计考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

深入理解 CSS——CSS进阶与实践(5w字高频面试题整理)

本文总结了CSS高频面试题&#xff0c;并搭配了演示动画进行CSS样式演示。介绍了关于如何理解盒模型&#xff0c;如何实现块级元素水平居中&#xff0c;如何实现两侧固定中间自适应的三栏布局、如何实现两栏布局&#xff0c;如何进行响应式设计&#xff0c;对BFC的理解&#xff…

Github上哪些好用的安全工具1

专注于web漏洞挖掘、内网渗透、免杀和代码审计&#xff0c;感谢各位师傅的关注&#xff01;网安之路漫长&#xff0c;与君共勉&#xff01; URLFinder 一款快速提取网页信息的工具。该项目可以快速爬取网页上的 URL 地址、JS 文件里的 API 接口等信息&#xff0c;支持批量抓取…

市场复盘总结 20240314

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率中 25% 最常用的…

【CSP试题回顾】201703-2-学生排队

CSP-201703-2-学生排队 解题思路 初始化队列&#xff1a;通过输入获得学生的数量 n&#xff0c;然后创建一个队列 queue&#xff0c;初始时这个队列中的学生按照学号从小到大的顺序排列。这是通过循环赋值实现的&#xff0c;其中每个学生的学号是其在列表中的位置加1。 处理调…

男人圣经 7

男人圣经 7 高逼格长期目标的行动飞轮1. 品牌价值和声誉2. 人脉网络和关系3. 企业文化和价值观4. 专有技术和知识产权5. 管理经验和专业知识 为什么只追求高经济、高科技&#xff1f;为什么说道德仁义是表面&#xff0c;而利益才是一切背后的真相&#xff1f; 高逼格长期目标的…

SinoDB数据库资源分析

SinoDB数据库资源主要从数据库虚处理器繁忙状况、数据库虚拟内存段、锁资源使用情况、数据空间使用率、网络连接情况等5个方面来进行分析。分别如下&#xff1a; 一、数据库虚处理器 检查项目 数据库虚处理器繁忙状况 检查命令 onstat -g rea onstat -g glo 说明 1、使用ons…

中科数安|公司办公终端、电脑文件数据 \ 资料防泄密系统

#中科数安# 中科数安是一家专注于信息安全技术与产品研发的高新技术企业&#xff0c;其提供的公司办公终端、电脑文件数据及资料防泄密系统&#xff08;也称为终端数据防泄漏系统或简称DLP系统&#xff09;主要服务于企业对内部敏感信息的安全管理需求。 www.weaem.com 该系统…

01、JS实现:去除数组中重复项的算法之一

数组去除重复项的算法&#xff1a; Ⅰ、删除排序数组中的重复项(注意&#xff1a;是已经排好序的)&#xff1a;1、题目描述&#xff1a;2、解题思路&#xff1a;3、实现代码&#xff1a; Ⅳ、小结&#xff1a; Ⅰ、删除排序数组中的重复项(注意&#xff1a;是已经排好序的)&…

ConcurrentHashMap 为什么不能插入 null?

1、典型回答 简单来说&#xff0c;ConcurrentHashMap 不允许插入 null 值是JDK 源码规定的&#xff0c;如下源码所示(此源码基于JDK 1.8)&#xff1a; 从上述源码可以看出&#xff0c;在添加方法的第一句就加了判断&#xff1a;如果 key 值为 null 或者是 value 值为 null&…

齐聚“向上的力量”,维谛技术(Vertiv)2024年合作伙伴大会成功举办

3月13日&#xff0c;维谛技术&#xff08;Vertiv&#xff0c;NYSE&#xff1a;VRT&#xff09;2024年合作伙伴大会在广东佛山顺利召开&#xff0c;本次大会以“向上的力量”为主题&#xff0c;维谛技术与数百家优秀合作伙伴&#xff08;含港台&#xff09;欢聚一堂&#xff0c;…

vue/uniapp路由history模式下宝塔空间链接打开新窗口显示404解决方法

vue/uniapp路由history模式下宝塔空间链接打开新窗口显示404&#xff0c;或者域名后带路径参数刷新就报404 解决方法&#xff1a; 宝塔中站点配置修改&#xff1a;【配置文件】中添加下面代码&#xff0c;具体如图&#xff1a; location / {try_files $uri $uri/ /index.html…

Editor.md-编辑器

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

mac安全干净卸载Anaconda3

使用which python显示当前使用的是/Users/username/anaconda3/bin/python 现在想卸载Anaconda&#xff0c;恢复使用mac系统自带的Python 删除隐藏文件目录 rm -rf ~/.anaconda修改~/.bash_profile文件&#xff0c;将anaconda相关删除 也有可能不是~/.bash_profile而是~/.zs…

三维铁木辛柯梁Matlab有限元编程 | 弹簧支座 | 弹性支撑单元| Matlab源码 | 理论文本

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

【C++】stack、queue模拟实现+仿函数

stack、queue模拟实现仿函数 stack定义stack模拟实现 queue定义queue模拟实现 priority_queue定义priority_queue模拟实现 deque定义底层分析 容器适配器定义种类 仿函数控制类里面数据的比较逻辑回调函数仿函数两者区别 铁汁们&#xff0c;今天给大家分享一篇stack、queue模拟…

移动端使用 echarts中 滚动条 dataZoom 改造为内容区域可以左右滚动

移动端使用 echarts中 滚动条 dataZoom 改造为内容区域可以左右滚动 直接上图 &#xff1a; 主要是下面这段代码&#xff1a; "dataZoom": [{"type": "inside","show": false,"xAxisIndex": [0],"zoomOnMouseWheel&…

Clickhouse 单机部署安装

前言 在大数据的时代背景下&#xff0c;数据的处理和分析能力成为企业竞争力的关键。ClickHouse&#xff0c;作为一款由俄国Yandex公司开发的分布式数据分析型数据库&#xff0c;凭借其卓越的性能和稳定性&#xff0c;赢得了业界的广泛关注。本文将介绍ClickHouse的基本概念、…