当前位置: 首页 > news >正文

【Spring】快速入门Spring Web MVC

文章目录

  • 1. 什么是Spring Web MVC
    • 1.1 MVC
    • 1.2 Spring MVC
  • 2. 使用Spring MVC
    • 2.1 项目创建
    • 2.2 建立连接
      • 2.2.1 @RequestMapping 注解
      • 2.2.2 @RestController 注解
      • 2.2.3 @RequestMapping 使⽤
      • 2.2.4 @RequestMapping 是什么请求?POST?GET?…?
      • 2.2.5 @RequestMapping 限制方法
  • 3. 使用postman
    • 3.1 下载postman
    • 3.2 postman界面介绍
    • 3.3 传参介绍
      • 3.3.1 普通传参
      • 3.3.2 form-data
      • 3.3.3 x-www-form-urlencoded
      • 3.3.4 raw

1. 什么是Spring Web MVC

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"SpringMVC"。
想要更好的理解SpringMVC,我们需要理解什么是MVC。

1.1 MVC

MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分。
MVC
视图:指在应⽤程序中专⻔⽤来与浏览器进⾏交互,展⽰数据的资源;
控制器:可以理解为⼀个分发器,⽤来决定对于视图发来的请求,需要⽤哪⼀个模型来处理,以及处理完后需要跳回到哪⼀个视图。即⽤来连接视图和模型;
模型:是应⽤程序的主体部分,⽤来处理程序中数据逻辑的部分。
通俗的讲,客⼾进店之后, 服务员来接待客⼾点餐, 客⼾点完餐之后, 把客⼾菜单交给前厅, 前厅根据客⼾菜单给后厨下达命令. 后厨负责做饭, 做完之后, 再根据菜单告诉服务员, 这是X号餐桌客⼈的饭。
在这个过程中:
服务员就是View(视图), 负责接待客⼾, 帮助客⼾点餐, 以及给顾客端饭
前厅就是Controller(控制器), 根据⽤⼾的点餐情况, 来选择给哪个后厨下达命令.
后厨就是Model(模型), 根据前厅的要求来完成客⼾的⽤餐需求。

1.2 Spring MVC

MVC是架构的设计模式,是一种思想,那么Spring MVC就是MVC思想的具体实现,也是一种框架。
Spring MVC就是实现MVC思想的Web框架。
它和Spring Boot的关系又是什么呢?
在我们创建Spring Boot项目时,我们会勾选Spring Web框架,这个其实就是Spring MVC框架。
而两者其实并没有必然的关系,Spring MVC是Spring框架的一部分,用于Web开发,Spring Boot是一个用于快速简化搭建Spring应用的框架,所有后者只是搭建前者的一种方式。
Spring在实现MVC后,设计模式也发生了一点改变,但核心思想仍不变:
在这里插入图片描述

2. 使用Spring MVC

既然是 Web 框架, 那么当⽤⼾在浏览器中输⼊了 url 之后,我们的 Spring MVC 项⽬就可以感知到⽤⼾的请求, 并给予响应。
咱们学习Spring MVC, 重点也就是学习如何通过浏览器和⽤⼾程序进⾏交互。
主要分以下三个⽅⾯:

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

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

2.1 项目创建

项目创建方式和String Boot项目的创建方式相同,在创建时勾选Spring Web框架就是创建了Spring MVC项目,本专栏前面有Spring Boot创建的详解,这里就不过多解释了。

2.2 建立连接

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

我们实现一个简单的打印hi,代码如下:

package com.example.demo.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@RequestMapping("/sayhi")public String hi(){return "hi";}}

启动程序,在浏览器直接访问,如图:
sayhi
不知道里面有些代码什么意思,下面就介绍。

2.2.1 @RequestMapping 注解

@RequestMapping 是 Spring Web MVC 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的路由映射的。
表⽰服务收到请求时, 路径为 /sayhi 的请求就会调⽤ hi 这个⽅法的代码。
路由映射: 当⽤⼾访问⼀个 URL 时, 将⽤⼾的请求对应到程序中某个类的某个⽅法的过程就叫路由映射。
如果去掉这个注解,我们就请求就会报错。
去注解
去注解报错

2.2.2 @RestController 注解

我们把代码中的@RestController去掉,直接访问。
去
404
也会报404错误,找不到该界面,这就是@RestController作用。
一个项目中会有许多类,每个类可能有很多的⽅法, Spring程序怎么知道要执⾏哪个⽅法呢?
Spring会对所有的类进⾏扫描, 如果类加了注解@RestController, Spring才会去看这个类⾥⾯的⽅法有没有加 @RequestMapping 这个注解,当然这只是在这种情况中的作用。

2.2.3 @RequestMapping 使⽤

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

  • @RequestMapping标识⼀个类:设置映射请求的请求路径的初始信息
  • @RequestMapping标识⼀个⽅法:设置映射请求请求路径的具体信息

使用
使用
注意:路径中第一个/可以不写,也是对的,但最后写。
hello

2.2.4 @RequestMapping 是什么请求?POST?GET?…?

这个直接测试一下就行,我们使用postman进行测试。

  • post在这里插入图片描述
  • get
    get
    我们会发现都可以成功访问,其实@RequestMapping支持所有类型访问。
    当然我们也可以指定访问类型,当然这有时并没必要,我们有一条大路可以走,为什么要走羊肠小道呢。

2.2.5 @RequestMapping 限制方法

代码

@RequestMapping("/hello")
@RestController
public class HelloController {@RequestMapping("/sayhi")public String hi(){return "hi";}@RequestMapping(value = "sayhello",method = RequestMethod.POST)public String hello(){return "hello";}
}

如上面代码,我们可以直接value = “sayhello”,method = RequestMethod.POST,这样便只能接受POST类型的请求。
当我们发起GET请求,便会报错。
get
value = “sayhello”,method = RequestMethod.GET,也可以限制GET等。

3. 使用postman

3.1 下载postman

下载链接: postman,点击下载安装即可。
postman

3.2 postman界面介绍

界面

3.3 传参介绍

3.3.1 普通传参

直接添加URL,我们可以发POST请求,查询字符串可以添加到URL中,也可以在请求参数中添加。
在URL中添加查询字符串,下面会自动生成参数。
查询字符串

3.3.2 form-data

表单提交的数据, 在 form 标签中加上 enctyped=“multipart/form-data” , 通常⽤于提交图⽚/⽂件. 对应Content-Type: multipart/form-data。
表单数据

3.3.3 x-www-form-urlencoded

form表单, 对应Content-Type: application/x-www-from-urlencoded。
x

3.3.4 raw

可以上传任意格式的⽂本,可以上传text、json、xml、html等。
raw

相关文章:

【Spring】快速入门Spring Web MVC

文章目录 1. 什么是Spring Web MVC1.1 MVC1.2 Spring MVC 2. 使用Spring MVC2.1 项目创建2.2 建立连接2.2.1 RequestMapping 注解2.2.2 RestController 注解2.2.3 RequestMapping 使⽤2.2.4 RequestMapping 是什么请求?POST?GET?…&#xff1…...

python---continue关键字对for...else结构的影响

代码: str1 laowang for i in str1:if i w:print(遇w不打印)continueprint(i) else:print(循环正常结束之后执行的代码) 图示:...

小结笔记:多位管理大师关于管理的要素的论述

最近在看《刘澜管理学》,其中有提到多位管理大师关于管理的要素的论述,笔记如下: 法约尔的管理五要素 这就是在前言中提到过的法约尔的管理五要素模型。 第一个“管理”学者 法约尔可以说是第一个专门的“管理”学者。在法约尔之前,没有人专门…...

sql---慢查询和语句耗时

查看当前会话的所有的sql语句耗时情况 profile 开启 查询指定sql的各个阶段耗时 查看执行计划指令 Explain Explain select * from 表 Index 和 all 属于性能不太好 在不扫描得的情况下才可能为null,index表示使用了索引但是扫描了所有的索引&#xff…...

ChinaSoft 论坛巡礼 | 智慧化 IDE 论坛

2023年CCF中国软件大会(CCF ChinaSoft 2023)由CCF主办,CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办,将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…...

数字孪生智慧工厂三维可视化系统解决方案,打造新一代智慧工厂

在制造业的快速发展和数字化转型的时代,智慧工厂已经成为制造企业前进的必经之路。数字孪生技术,作为工业数字化转型的核心动力,为打造智慧工厂提供了关键支持。其中,数字孪生智慧工厂三维可视化系统解决方案无疑是制造企业的得力…...

并查集学习心得

int find(int x)//并查集找父亲 {if(x!fa[x]) fa[x]find(fa[x]);return fa[x]; } void add(int x,int y)//合并 {int fxfind(x);int fyfind(y);if(x!y) fa[fx]fy; } P1197 [JSOI2008] 星球大战 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 洛谷p1197星球大战 :并查集逆向…...

自动驾驶之—LaneAF学习相关总结

0.前言: 最近在学习自动驾驶方向的东西,简单整理一些学习笔记,学习过程中发现宝藏up 手写AI 1. 概述 Laneaf思想是把后处理放在模型里面。重点在于理解vaf, haf,就是横向聚类:中心点,纵向聚类&…...

软考系统架构之案例篇(Redis相关概念)

案例篇-Redis相关概念 1. Redis与Memcache能力对比2. Redis集群切片的常见方式3. Redis分布式存储方案4. Redis数据分片方案5. Redis持久化 1. Redis与Memcache能力对比 工作MemCacheRedis数据类型简单 key/value 结构丰富的数据结构持久性不支持支持分布式存储客户端哈希分片…...

黑客入门指南,学习黑客必须掌握的技术

黑客一词,原指热心于计算机技术,水平高超的电脑专家,尤其是程序设计人员。是一个喜欢用智力通过创造性方法来挑战脑力极限的人,特别是他们所感兴趣的领域,例如电脑编程等等。 提起黑客,总是那么神秘莫测。在…...

定档11月2日,YashanDB 2023年度发布会完整议程公布

数据库作为支撑核心业务的关键技术,对数字经济的发展有着重要的支撑作用,随着云计算、AI等技术的迅猛发展和数据量的爆发式增长,推动着数据库技术的加速创新。 为了应对用户日益复杂的数据管理需求,赋能行业国产化建设和数字化转型…...

composer安装thinkphp6报错

composer安装thinkphp6报错, 查看是否安装了对应的PHP扩展,我这边使用的是宝塔的环境,全程可以可视化操作 这样就可以安装完成了...

此页面不能正确地重定向

这种是由于条件判断有误,程序不断的重定向到一个页面,而造成的死循环的情况 下面列举一个常出现的场景之一 1、使用过滤器实现登录验证错误处理 解释:当用户访问login.jsp进行登录的时候,这个时候请求会被Filter捕获&#xff0…...

【Apache Flink】实现有状态函数

文章目录 在RuntimeContext 中声明键值分区状态通过ListCheckPonitend 接口实现算子列表状态使用CheckpointedFunction接口接收检查点完成通知参考文档 在RuntimeContext 中声明键值分区状态 Flink为键值分区状态(Keyed State)提供了几种不同的原语&…...

Android原生项目集成uniMPSDK(Uniapp)遇到的报错总结

uni小程s序SDK 集成到Android原生项目:老项目中用到的库较多,会出现几种冲突问题,总结如下: 报错1: Execution failed for task :app:processDebugManifest. > Manifest merger failed with multiple errors, see logs Andro…...

Linux redis 安装

1、解压 tar -zxvf redis-5.0.10.tar.gz 2、cd /data/redis-5.0.10 文件夹 3、make 等待make命令执行完成即可。 make命令报错:cc 未找到命令,系统中缺少gcc,执行命令安装 gcc: yum -y install gcc automake autocon…...

在Win11上部署ChatGLM3详细步骤

023年10月27日,智谱AI于2023中国计算机大会(CNCC)上,推出了全自研的第三代基座大模型ChatGLM3及相关系列产品,这也是智谱AI继推出千亿基座的对话模型ChatGLM和ChatGLM2之后的又一次重大突破。此次推出的ChatGLM3采用了…...

系列七、动态代理

一、概述 二、Jdk动态代理案例 2.1、Star /*** Author : 一叶浮萍归大海* Date: 2023/10/27 17:16* Description:*/ public interface Star {/*** 唱歌* param name 歌曲名字* return*/String sing(String name);/*** 跳舞*/void dance(); } 2.2、BigStar /*** Author : 一叶…...

Kafka集群搭建与SpringBoot项目集成

本篇文章的目的是帮助Kafka初学者快速搭建一个Kafka集群,以及怎么在SpringBoot项目中使用Kafka。 kafka集群环境包地址:百度网盘 请输入提取码 提取码:x9yn 一、Kafka集群搭建 1、准备环境 (1)准备三台…...

一个简单的注册的页面,如有错误请指正;(3.JavaScript)

这段代码是一个JavaScript函数,实现了用户登录和上传图片的功能,并包含了一些辅助函数。让我一一解释: 1. login():这个函数用于登录操作。首先,通过$(#name).val()来获取ID为name的元素的值,同理获取其他…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...