Spring Web MVC 入门秘籍:从概念到实践的快速通道(上)

Spring Web MVC 入门秘籍:从概念到实践的快速通道(上)

个人主页♡喜欢做梦

欢迎  👍点赞  ➕关注  ❤️收藏  💬评论


目录

一、什么是Spring Web MVC?

1.定义

2.关于MVC

2.1什么是MVC?

二、学习Sring MVC

1.项目准备

2.@RestController注解的介绍

3.@RequestMapping注解

1.@RequestMapping只用在类上(相当于“只给文件夹起名,不给文件起名”)

2.@RequestMapping只用在方法上(相当于“只给文件起名,不给文件夹起名”)

3.@RequestMapping用在类和方法上(相当于给文件夹和文件都取名)

三、Postman

1.什么是Postman?

2.关于API

3.传参介绍

1.普通传参:通过查询字符串来传参

2.form-data(完整表示为:multipart/form-data)

3.x-www-form-urlencoded

4.raw:可以上传任意格式的文本,比如:text、JavaScript、json、html、xml

4.传递参数

1.传递单个参数

2.传递多个参数

3.传递对象

4.传递数组

5.传递集合


一、什么是Spring Web MVC?

1.定义

Spring Web MVC是基于Servlet API构建的原始Web框架。是Spring框架中用于构建Web应用程序的模块,基于模型-视图-控制器(MVC)构架模式。简称Spring MVC。
  • Servlet:Servlet是Java企业级开发中的一项核心技术,主要用于在Web服务器上处理客户端请求并生成的动态响应。Servlet不能独立运行,把必须部署在支持Servlet规范放入容器内。

2.关于MVC

2.1什么是MVC?

定义

MVC是一种软件构架模式,广泛应用于图形用户界面(GUI)和Web应用程序的开发中国。他通过将应用程序的逻辑分为三个核心部分,实现了关注点分离,提高了代码的可维护性、可扩展性和复用性。

MVC的核心组成:模型(Model)、视图(View)、控制器(Controller),三者各司其职又相互协作。

步骤

模型(Model):负责管理应用程序的数据和业务逻辑。是应用程序的“数据中心”。例如学生的家庭、号码、住址等数据。视图(View):负责展示数据,是用户直接看到和交互的界面。例如我们平常经常看到的网页哪些界面。同一个模型可以对应多个视图。控制器(Controller):作为模型和视图之间的“桥梁”,负责协调两者的交互,处理用户的核心业务逻辑。例如,“订单控制器”,用户请求下单,调用商品,那么商品模型的减少库存,调用订单模型创建订单,最后跳转订单成功页面。
  • 用户通过视图发起交互(例如在网页点击跳转页面)。
  • 控制器接收用户请求。
  • 控制器调用模型,进行数据处理(如验证、存储)。
  • 模型处理完数据后,并将结果返回给控制器。
  • 控制器选择对应的视图,并传递模型数据给视图。
  • 视图展示模型数据,用户看到最终结果。

简要概括:用户->视图->控制器->模型->控制器->视图->用户

二、学习Sring MVC

1.建立连接:将用户(浏览器)和Java连接起来,访问一个地址可以调用Spring 程序

2.请求:用户请求一些参数,想办法获取这些参数。

3.响应:执行了业务逻辑,把程序执行结果返回给用户。

1.项目准备

创建项目

点击New Project创建新项目

点击Spring Initializr,没有的话需要自己去下载,随后点击下一步

出现下面的界面

  • 这里注意一下,只能包含小写字母、数字、连字符(-)、下划线、句号(.),不能包含大写字母。

点击启动项目

建立连接

我们创建一个类,实现用户与浏览器的交互

代码如下

@RestController public class hello { @RequestMapping("/sayhello") public String say(){ return "hello"; } }

在浏览器输入网址:127.0.0.1:8080/sayhello 查看结果

  • 127.0.0.1:本地主机地址,表示定位到当前电脑。
  • 8080:是Spring Boot应用的默认端口号。表示定位到“电脑上运行的Spring Boot程序”。
  • /sayhello:请求路径,接口地址。表示定位带请求支援的位置。
  • http://127.0.0.1:8080/sayhello: 表示的就是向本地计算机中的8080端口程序,获取资源位置。

2.@RestController注解的介绍

@RestController注解就像给控制器类贴一个特殊标签,告诉Spring框架:这个类里的方法是传给前端的返回数据。让控制器里的方法直接返回的东西当成响应内容发给前端,不用再走“找页面”流程。

如果不控制器加@RestController注解会访问页面会怎么样?

结果如下:

@RestController的核心作用是“让方法返回数据”

如果没有@RestController,通常会用普通的@Controller注解,或者干脆不加控制器注解,那么类就不会被识别为控制器。

  • 用@Controller,方法返回的是“页面地址”

  • 什么控制器注解都不加,那么类只是一个普通类,接口无法访问。

3.@RequestMapping注解

定义:@RequestMapping是Spring框架中一个非常重要的注解,用于将特定的Http请求方法映射带对应的处理方法。@RequestMapping(“/hello”)中里面的/hello表示调用路径里面的方法的代码。路径不加/也可以,没有影响,最好可以加一下。

@RequestMapping注解既可以用在类上,也可以用在方法上:

1.@RequestMapping只用在类上(相当于“只给文件夹起名,不给文件起名”)

@RestController @RequestMapping("/sayhello") public class hello { public String say(){ return "hello"; } }

相当于系统找到了文件夹,但不知道具体是哪个文件。就像你找一个住址,你只知道是哪个身份,但你并不知道是哪一个县哪一个乡,找不到具体是哪一个位置。

2.@RequestMapping只用在方法上(相当于“只给文件起名,不给文件夹起名”)

@RestController public class hello { @RequestMapping("/sayhello") public String say(){ return "hello"; } } 

相当于系统不知道是哪个文件夹的文件,但是会搜索所有文件夹来查找这个文件,直接通过文件名来定位。

那么如果出现相同的文件名呢?会怎么样,我们来试一下。

@RestController @RequestMapping("/sayhello") public class hello { public String say1(){ return "hello1"; } public String say2(){ return "hello2"; } }

系统只知道文件名,但是有两个相同的文件名,会出现路径重复的问题,发生报错现象。

3.@RequestMapping用在类和方法上(相当于给文件夹和文件都取名)

@RestController @RequestMapping("/sayhello") public class hello { @RequestMapping("/hello1") public String say1(){ return "hello1"; } @RequestMapping("/hello2") public String say2(){ return "hello2"; } }

相当于给文件夹和文件都取名,可以进行具体的定位,不容易发生报错。

查看RestMapping是否即支持Post和Get

@RestController @RequestMapping("/number") public class Rest { //即支持post,又支持get @RequestMapping("/1") public Integer num1(){ return 1; } }

另一种写法

 @RequestMapping(value = "6",method = {RequestMethod.GET,RequestMethod.POST}) public Integer num6(){ return 6; }
  • RestMapping即支持Post和Get

如果我只要只能用get或者Post其中一种呢?应该怎么写

只用get

 // 只支持get //写法1 @RequestMapping(value="/2",method = RequestMethod.GET) public Integer num2(){ return 2; } //写法2 @GetMapping("/3") public Integer num3(){ return 3; }

只请求Post

 //只请求Post //写法1 @RequestMapping(value="/4",method = RequestMethod.POST) public Integer num4(){ return 4; } //写法2 @PostMapping("/5") public Integer num5(){ return 5; }

三、Postman

1.什么是Postman?

Poatman是一筐广泛用于API开发、测试和调试的工具,被开发者、测试工具等广泛使用,其核心价值体现在高效、便捷的处理API相关工作。

Post是API开发调试的高效工具,核心优势:

  • 调试简单:图形化界面,填好参数就能发送请求,不用写代码,响应结果直观展示。
  • 功能全面:支持各种HTTP请求方法和数据格式。
  • 协作方便:可将API分组管理,共享给团队;多环境一键切换,不用重复配置。
  • 能自动化测试:可写脚本验证响应,批量运行测试并生成报告,还能集成开发流程中自动检测问题。
  • 实用小工具:保存请求历史、自动生成API文档等,提升效率。

2.关于API

API(Application Programming Interface,应用程序编程接口)是不同软件之间进行交互的一套规则、协议和工具的集合,他规定了一方如何向另一方请求服务或数据,以及另一方如何响应。API就像两个软件之间的“桥梁”或“服务员”,让他们能按照统一的方式沟通,而无需了解对方的内部工作原理。

就像我们去网购的时候,我们直接对自己想要的东西直接下单购买即可,不用了解其内部具体流程是怎么样执行的,最后他都会把你要的东西给到你。这里“下单的流程”就是API规则。

界面介绍

3.传参介绍

1.普通传参:通过查询字符串来传参

2.form-data(完整表示为:multipart/form-data)

表单提交数据,在form标签中加上enctyped=“multipart/form-data”,通常用于提交图片/文件。对应Content-type:multipart/form-data

3.x-www-form-urlencoded

form表单:对应Content-type:application/x-www-form-urlencoded

4.raw:可以上传任意格式的文本,比如:text、JavaScript、json、html、xml

4.传递参数

1.传递单个参数

import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/request") public class RequestController { @RequestMapping("/1") public String method(String string){ return "接收单个参数:"+string; } }
  • 接收时,参数名要一致,否则无法接收到参数
如果接受的参数基本类型不对应,会发生报错现象

基本类型和引用类型传参的区别

@RequestMapping("/2") public String method2(Integer i){ return "接收单个参数:"+i; } @RequestMapping("/3") public String method3(int j){ return "接收单个参数:"+j; }
  • 引用类型:传参时,若不传值,会赋值为null,不会发生报错现象
  • 基本类型:传参时,若不传值,不会发生报错现象

2.传递多个参数

 @RequestMapping("/4") public String method3(String name,Integer age){ return "接收多个参数: "+"姓名:"+name+" 年龄:"+age; }

3.传递对象

 @RequestMapping("/5") public String method3(User user){ return "接收对象参数:"+user.toString(); } @RestController @RequestMapping("/User") public class User { private String name; private int password; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPassword() { return password; } public void setPassword(int password) { this.password = password; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", password=" + password + ", age=" + age + '}'; } }

后端参数重命名:@RequestParam

如果前后端参数命名不一致,可能会出接收不到的情况,这时候我们可以使用@RequestParam来重命名前后端参数。

//将其重命名为str @RequestMapping("/6") public String method6(@RequestParam("str")String s){ return "接收参数:"+s; }
  • 使用@RequestParam重命名时参数就成了必传参数,否则将会报错
  • 使用@RequestParam时,就不能再使用原来的前后端的参数名

如果真的不想要传参数怎么办?
看一下@RequestParam的源码

其默认参数为true,所以一定要传参数,我们将其改为false就好了

@RequestMapping("/7") public String method7(@RequestParam(value = "str",required = false)String s){ return "接收参数:"+s; }

4.传递数组

@RequestMapping("/8") public String method8(String[] s){ return Arrays.toString(s); }

5.传递集合

传递集合需要使用@RequestParam用于接收单个请求参数。如果要接收List类型,需要显示开启“允许多值”模式,否则Spring无法解析

 @RequestMapping("/9") public List<Integer> method8(@RequestParam List<Integer> num){ return num; }

Read more

1.5k stars!阿里开源 PageAgent:让 AI 直接“住进“你的网页,用自然语言操控一切!

1.5k stars!阿里开源 PageAgent:让 AI 直接“住进“你的网页,用自然语言操控一切!

阿里开源 PageAgent:让 AI 直接"住进"你的网页,用自然语言操控一切 不需要浏览器插件,不需要 Python,不需要截图——一行 JS,让你的网页秒变 AI 智能体。 一、先说痛点:Web 自动化为什么这么难? 如果你用过 Selenium、Playwright,或者最近流行的 browser-use,你一定遇到过这些头疼的问题: * 环境太重:得装 Python、headless 浏览器、各种依赖,部署复杂,维护成本高; * 依赖截图 + OCR:很多方案靠多模态模型"看图操作",慢、贵、还不准; * 权限门槛高:要控制浏览器,往往需要特殊权限甚至操作系统级别的访问; * 对现有产品改造成本大:

Phi-3-Mini-128K中小企业应用:替代Copilot的本地化代码补全与解释引擎

Phi-3-Mini-128K中小企业应用:替代Copilot的本地化代码补全与解释引擎 1. 项目概述 Phi-3-Mini-128K是一款基于微软Phi-3-mini-128k-instruct模型开发的轻量化对话工具,专为中小企业开发者设计,提供本地化运行的代码补全与解释功能。相比云端Copilot服务,它具备完全本地运行、数据隐私保护、低成本部署等显著优势。 1.1 核心价值主张 * 隐私安全:所有数据处理均在本地完成,企业代码资产无需上传云端 * 成本效益:仅需7-8GB显存的GPU即可运行,大幅降低硬件投入 * 专业适配:针对代码场景优化的128K上下文窗口,完美处理复杂代码文件 * 易用体验:仿ChatGPT的交互界面,开发者零学习成本上手 2. 技术架构解析 2.1 模型核心能力 Phi-3-mini-128k-instruct模型经过微软专业调优,在代码理解与生成任务上表现优异: * 代码补全:支持Python、Java、C++等主流语言的智能补全 * 代码解释:可逐行分析代码逻辑,生成清晰的技术文档 * 错误诊断:识别常见语法错误并

高效AIGC工具推荐:10个热门平台免费与付费功能全指南

高效AIGC工具推荐:10个热门平台免费与付费功能全指南

�� 10大降AIGC平台核心对比速览 排名 工具名称 降AIGC效率 适用场景 免费/付费 1 askpaper ⭐⭐⭐⭐⭐ 学术论文精准降AI 付费 2 秒篇 ⭐⭐⭐⭐⭐ 快速降AIGC+降重 付费 3 Aibiye ⭐⭐⭐⭐ 多学科论文降AI 付费 4 Aicheck ⭐⭐⭐⭐ AI检测+降重一体化 付费 5 白果AI论文 ⭐⭐⭐ 格式规范+降AI 免费/付费 6 文赋AI论文 ⭐⭐⭐ 初稿生成+降AI 免费/付费 7 笔尖AI写作 ⭐⭐⭐ 多场景降AI 免费 8 梅子AI论文 ⭐⭐⭐ 学历适配降AI 付费 9 闪稿AI论文 ⭐⭐ 紧急降AI处理 免费 10

Whisper-large-v3长文本处理:万字级语音转写+智能段落划分演示

Whisper-large-v3长文本处理:万字级语音转写+智能段落划分演示 1. 这不是普通语音转文字——它能读懂万字长录音的“呼吸节奏” 你有没有试过把一场90分钟的技术分享录下来,想转成文字整理笔记,结果发现: * 普通工具卡在3分钟就报错? * 转出来的文字密不透风,全是连在一起的大段落,根本没法读? * 中英文混杂的发言,识别错一半,还得逐句核对? 这次我们实测的 Whisper-large-v3 Web 服务,直接绕开了这些坑。它不只是“把声音变成字”,而是真正理解一段长语音的语义节奏——自动识别说话人停顿、话题切换、语气转折,再把万字转录结果智能切分成逻辑清晰、可读性强的自然段落。 这不是调参炫技,而是面向真实工作流的工程优化:会议纪要、课程听讲、访谈整理、播客文稿……所有需要“听完再消化”的场景,它都能一步到位。 本文全程基于 by113小贝 二次开发的本地化部署版本,不依赖任何云端API,所有音频数据留在你自己的机器里。下面带你从零跑通万字语音转写全流程,重点看它怎么把一整段27分钟的讲座录音,变成结构分明、带时间戳、可直接复制使用的中文文稿。