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 数据库…

二刷代码随想录算法训练营第二十三天 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

目录 一、669. 修剪二叉搜索树 二、108. 将有序数组转换为二叉搜索树 三、538. 把二叉搜索树转换为累加树 一、669. 修剪二叉搜索树 题目链接&#xff1a;力扣 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a; 你修剪的方式不对&#xff0c;我来给你纠正一下&#…

电梯机房秀

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

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

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

PyTorch Dataset、DataLoader长度

pytorch 可以直接对 Dataset 对象用 len() 求数据集大小&#xff0c;而 DataLoader 对象也可以用 len()&#xff0c;不过求得的是用这个 loader 在一个 epoch 能有几多 iteration&#xff0c;容易混淆。本文记录几种情况的对比。 from torch.utils.data import Dataset, DataL…

人类科技发展的迅速进步:偶然性与必然性的交织

在审视人类历史长河时&#xff0c;我们不难发现科技发展的速度在过去几个世纪以来呈现出显著的加速趋势。从最初的火种发明到现代的量子计算、人工智能&#xff0c;科技发展犹如疾驰的列车&#xff0c;飞速向前。然而&#xff0c;这种前所未有的快速发展究竟是由一系列巧合所导…

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

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

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

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

【C++】每日一题 100 相同的树

给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的 #include <iostream>// Definition for a binary tree node. struct TreeNode {int val;Tre…

市场复盘总结 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 该系统…

美易官方:阿迪达斯30年来首次亏损,红海危机令其雪上加霜

近期&#xff0c;关于电动汽车制造商菲斯克&#xff08;Fisker&#xff09;申请破产的传闻甚嚣尘上。然而&#xff0c;菲斯克公司迅速回应称&#xff0c;公司正在专注于筹集更多资本&#xff0c;并与一家大型汽车制造商洽谈构建战略伙伴关系&#xff0c;以应对当前的市场挑战。…

java通过Excel批量上传下载数据

一、首先在前端写一个上传组件。 <template><!-- 文件上传 --><el-upload class"upload-demo" drag action"" :on-change"onChange" :auto-upload"false"><el-icon class"el-icon--upload"><up…

iOS 17.0 YYText UIGraphicsBeginImageContextWithOptions 崩溃处理

在iOS17上&#xff0c;YYText会报以下错误&#xff1a; UIGraphicsBeginImageContext() failed to allocate CGBitampContext: size{0, 0}, scale3.000000, bitmapInfo0x2002. Use UIGraphicsImageRenderer to avoid this assert. 解决方法如下&#xff1a; 在YYTextAsyncLayer…

https部署的几个坑

域名解析的坑 阿里云的 云解析DNS&#xff0c;请求解析来源&#xff0c;要使用 指域名访问者所在的地区和使用的运营商网络。这里一定要有默认设置&#xff0c;不然设置联通 电信等选项&#xff0c;导致很多地方域名解析不了 SSL 的坑 阿里云的免费数字证书&#xff0c;有些…

Jsch实践(二):JSch的HostKeyRepository接口如何使用

Jsch实践(二)&#xff1a;JSch的HostKeyRepository接口如何使用 JSch 的 HostKeyRepository 接口用于存储和验证远程服务器的 SSH 主机密钥。当连接到一个新的远程服务器时&#xff0c;JSch 会请求服务器的主机密钥&#xff0c;并期望用户确认是否接受这个密钥。在生产环境中&…

解决C#连接MySQL数据库报错: SslMode=None;

2024/3/12 13:30:30_Program:中文提示 : 连接数据库过程中发生错误&#xff0c;检查服务器是否正常连接字符串是否正确&#xff0c;错误信息&#xff1a;Couldnt connect to serverDbType"MySql";ConfigId"". English Message : Connection open error . …