【Spring】快速入门Spring Web MVC

news2024/11/14 19:13:58

文章目录

  • 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

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

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

相关文章

Linux高性能服务器编程——ch8笔记

第8章 高性能服务器程序框架 8.1 服务器模型 服务器启动后,首先创建一个(或多个)监听socket,并调用bind函数将其绑定到服务器感兴趣的端口,然后调用listen函数等待客户连接。服务器稳定运行之后,客户端就可…

网盘限速问题解析:哪家网盘真的不限速?

天下苦网盘限速久矣。市面上一些网盘工具要不然是收费限流,要不然是需要额外购买下载券。哪家网盘真的不限速? Zoho Workdrive 企业网盘是真正的不限速网盘,上传和下载文件都不限速,真正做到用户的网速有多快,下载就有…

玩转ChatGPT:批量下载Alphafold的蛋白pdb文件

一、写在前面 突发奇想,想批量下载Alphafold网站的蛋白pdb文件,后续再做个分子对接用。又不想手动下载,来求助CSDN和GPT。 二、CSDN白嫖基础代码 CSDN大神多,这不,找到一个:Alphafold批量下载蛋白的pdb文…

Unity Shader当用户靠近的时候会出现吃鸡一样的光墙

效果图片 靠近墙壁 远离墙壁 材质球的设置 两张图片 使用方式 把这个脚本放到墙上,将player赋值给"_player",然后运行,用户靠近就会根据距离显示光墙。 using UnityEngine;public class NewBehaviourScript : MonoBehaviour {pr…

【算法|贪心算法系列No.5】leetcode409. 最长回文串

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

win10 + VS2017 编译libjpeg(jpeg-9b)

需要用到的文件: jpeg-9b.zip win32.mak 下载链接链接:https://pan.baidu.com/s/1Z0fwbi74-ZSMjSej-0dV2A 提取码:huhu 步骤1:下载并解压jpeg-9b。 这里把jpeg-9b解压到文件夹"D:\build-libs\jpeg\build\jpeg-9b" …

创纪录的1亿RPS DDoS攻击利用HTTP/2快速重置漏洞

导语:最近,一项创纪录的DDoS攻击引起了广泛关注。攻击者利用了HTTP/2协议中的一个快速重置漏洞,发起了一系列超大规模的攻击。本文将为大家详细介绍这次攻击的背景、影响以及应对措施。 攻击背景 最近,全球范围内遭受了一系列规模…

计算机操作系统重点概念整理-第六章 输入输出I/O管理【期末复习|考研复习】

第六章 输入输出I/O管理【期末复习|考研复习】 计算机操作系统系列文章传送门: 第一章 计算机系统概述 第二章 进程管理 第三章 进程同步 第四章 内存管理 第五章 文件管理 第六章 输出输出I/O管理 文章目录 第六章 输入输出I/O管理【期末复习|考研复习】前言六、输…

c++的4中类型转换操作符(static_cast,reinterpret_cast,dynamic_cast,const_cast),RTTI

目录 引入 介绍 static_cast 介绍 使用 reinterpret_cast 介绍 使用 const_cast 介绍 使用 dynamic_cast 介绍 使用 RTTI(运行时确定类型) 介绍 typeid运算符 dynamic_cast运算符 type_info类 引入 原本在c中,我们就已经接触到了很多类型转换 -- 隐式类型转…

论文阅读——GPT3

来自论文:Language Models are Few-Shot Learners Arxiv:https://arxiv.org/abs/2005.14165v2 记录下一些概念等。,没有太多细节。 预训练LM尽管任务无关,但是要达到好的效果仍然需要在特定数据集或任务上微调。因此需要消除这个…

YOLOv5配置文件之 - yaml

在YOLOv5的目录中,models文件夹里存储了YOLO的模型配置。 ./models/yolov5.yaml 定义了YOLOv5s网络结构的定义文件 yaml的主要内容 参数配置 nc: 80 类别数量 depth_multiple: 0.33 模型深度缩放因子 width_multiple: 0.50 控制卷积特征图的通道个数 anchors配…

JSON(详解)

目录 什么是JSON? 哪里会用到JSON? JSON的特点 JSON的优点 JSON的缺点 JSON和cJSON的关系 什么是JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它以易于阅读和编写的文本格式来存储和表示…

Linux mkdir命令:创建目录(文件夹)

mkdir 命令,是 make directories 的缩写,用于创建新目录,此命令所有用户都可以使用。mkdir 命令的基本格式为: [rootlocalhost ~]# mkdir [-mp] 目录名 -m 选项用于手动配置所创建目录的权限,而不再使用默认权限。 -p…

shell算数运算指令、

1.shell算数运算的指令 (( )) $[ ] let expr expr的字符串运算 例子: 2.shell的if分支结构

1624. 两个相同字符之间的最长子字符串

1624. 两个相同字符之间的最长子字符串 java代码&#xff1a; class Solution {public int maxLengthBetweenEqualCharacters(String s) {int[] hash new int[26];Arrays.fill(hash, -1); // fill是Arrays静态方法int max -1;for (int i 0; i < s.length(); i) { // 对…

计算机毕业设计 基于SpringBoot大学生创新创业项目管理系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

ResNet简单解释

什么是Resnet&#xff1f; resnet是一种残差网络&#xff0c;简单看一下resnet的结构 上面是ResNet&#xff0c;下面是传统的 ResNet里的一小块就是这样的 为什么要引入ResNet&#xff1f; 理论上讲&#xff0c;随着网络加深&#xff0c;我们获取的信息越来越多多&#xff0…

C语言 每日一题 PTA 10.27 day5

1.高速公路超速处罚 按照规定&#xff0c;在高速公路上行使的机动车&#xff0c;达到或超出本车道限速的10 % 则处200元罚款&#xff1b; 若达到或超出50 % &#xff0c;就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。 输入格式 : 输入在一行中给出2个正…

构造类型详解及热门题型结构体大小的计算

在编写程序时&#xff0c;简单的变量类型已经不能满足程序中各种复杂数据的需求&#xff0c;因此c语言还提供了构造类型的数据&#xff0c;构造数据是有基本数据按照一定的规则组成的。 目录 结构体类型的概念 结构体变量的定义 结构体变量的初始化 结构体变量的引用 结构…

老年少女测试媛入职感想

作为一枚从事通信行业测试的老年少女测试媛&#xff0c;入职离职也有两三次了。现在又在一家企业入职了。虽然心里也清楚离职和入职&#xff0c;无非也就是从一个公司的坑里跳出来&#xff0c;再跳到另外一个公司的坑里罢了&#xff0c;明明知道老东家的坑是填不完的了&#xf…