SpringBoot和SpringMVC

目录

一、springboot项目

(1)创建springboot项目

(2)目录介绍

(3)项目启动

(4)运行一个程序

(5)通过其他方式创建和运行springboot项目

二、SpringMVC

1、MVC概念

2、SpringMVC概念

3、SpringBoot与SpringMVC的联系与区别

4、创建springmvc项目

(1)建立连接

(2)处理请求

(3)返回响应


一、springboot项目

(1)创建springboot项目

需要先下载好Spring Boot Helper插件。IDEA专业版不需要下载该插件。

进入IDEA创建新项目,选择Spring Initializr:

点击Next:

点击Next:

点击Next:

点击Create:

(2)目录介绍

(3)项目启动

这个是启动类,点击任意小绿箭头都可以运行项目。

项目启动成功,发现springboot项目里内置了tomcat

(4)运行一个程序

上面算是springmvc(后面解释)

运行启动类,在浏览器访问:

8080是因为web服务器是tomcat,默认端口号为8080,也可以修改端口号:

在这个里面写:server.port='端口号'

(5)通过其他方式创建和运行springboot项目

①创建项目其他方式

直接进入官网创建生成jar包,和IDEA创建方式是一样的

②运行jar包

java -jar jar包名字运行jar包

进入jar包所在命令页面,找到jar包

运行成功:

通过浏览器访问:

二、SpringMVC

1、MVC概念

是软件工程中的一种软件架构设计模式,他把软件系统分为三个模块:view(视图)、model(模型)、controller(控制器)。

view:与浏览器进行交互,获取请求数据以及接收响应;

model:主体部分,处理数据逻辑部分;

controller:可以理解为一个分发器,用来连接view和model,根据view发来的请求,决定使用那个model,以及决定将返回的响应分发给哪个视图。

2、SpringMVC概念

是一个实现了MVC模式的web框架。

3、SpringBoot与SpringMVC的联系与区别

Spring Boot是一个基于Spring框架的快速开发框架,它简化了Spring应用程序的搭建和配置过程,提供了一种快速开发的方式。而Spring MVC是Spring框架中的一个模块,用于构建Web应用程序,提供了一套MVC(Model-View-Controller)架构。

它们之间的联系在于,Spring Boot可以集成Spring MVC,通过Spring Boot可以更快速地构建和配置Spring MVC应用程序。Spring Boot提供了自动配置和起步依赖等功能,简化了Spring MVC应用程序的开发过程。Spring Boot是建立Spring MVC的一种方式。

它们的区别在于,Spring Boot是一个快速开发框架,提供了一种快速构建Spring应用程序的方式,而Spring MVC是一个Web框架,用于构建Web应用程序。Spring Boot可以集成Spring MVC,也可以集成其他的Spring模块,如Spring Data、Spring Security等,而Spring MVC主要用于构建Web应用程序。

上述在构建springboot时,就是选择了spring web,可以建立spring mvc项目,实现web开发。

4、创建springmvc项目
(1)建立连接

在springmvc中,是通过@RequestMappering注解,将浏览器与服务器之间建立连接。该注解后面跟访问的路径。注解在类上时,访问类中的方法时,路径=类路径+方法路径;类没有注解时,访问方法时,路径=方法路径。

eg:方法路径

类路径+方法路径:

不加类路径,会显示404.

@RestController注解的作用:将一个类标识为控制器,用于处理HTTP请求并返回响应。没有该注解时,有http请求时就无法访问该类。

(2)处理请求

①http请求:包括首行(方法、url、版本号)、请求头(header)、正文(get方法大概率没有)

②获取url中,查询字符串(对url的补充)的参数。

一个参数获取

指定请求方式

springmvc获取请求时,请求方式可以是get,也可以是post,也可以指定请求方式。

指定请求方式:

发送get请求与响应:

发送post请求与响应:

405表示方法不被允许。

两个参数获取

age写为Integer是因为Integer可以接收null,int类型时,没有age会报错。

postman发送请求:

收到的响应:

参数重命名

postman发送请求:

收到的响应:

但以上代码有个问题,username必须是必传的参数。

username默认是必传的参数,可进行修改:

请求与响应:

对象获取

定义一个对象user:

获取对象

请求与响应:

数组获取

请求与响应:

或者:

集合获取

请求与响应:

发现报错,500是服务器的错误,当参数是集合时,需要通过@RequestParam绑定参数关系。

请求与响应:

json正文获取

请求与响应:

url参数获取

请求与响应:

url中参数重命名获取

上传文件获取

请求与响应:

 Cookie和Session

概念见文章:cookie和session概念

Cookie获取

①获取全部cookie:

 ②获取指定cookie

session设置

session获取

请求header获取

(3)返回响应

返回静态页面

制作一个静态页面:index.html

发现返回的不是index.html页面,而是一串文字。当把代码做以下修改:

只是改了一个注解,为什么结果就不一样了???

之前说@RestController注解是将将一个类标识为控制器,用于处理HTTP请求并返回响应。那和@Controller注解的区别在哪里???

@RestController注解的源码

发现是包括@Controller注解的

@Controller注解的源码

与@RestController注解源码比较,发现少了@ResponseBody注解。

即:@Controller+@ResponseBody=@RestController

@Target注解:表示注解的使用范围;

@Retention注解:表示注解的生命周期;

@Controller注解:告诉Spring哪些类是控制器,需要被管理。响应默认返回的是页面;

@RestController注解:设定响应返回的是数据。

@Controller+@RestController,即:@RestController,使得响应返回的是数据。

所以在上面使用@RestController注解的时候返回的是一串字符串,但是将注解改为:@Controller时,返回的就是指定页面了。

返回HTML片段

返回json

自动确定返回类型:

Spring会根据返回值的类型自动确定返回类型,可以是JSON、XML等格式。

常见类型:

text/html : HTML格式
text/plain :纯文本格式      
text/xml :  XML格式
image/gif :gif图片格式    
image/jpeg :jpg图片格式
image/png:png图片格式
application/xml :XML数据格式  
application/json:JSON数据格式
application/pdf :pdf格式

eg:

刚刚返回的静态页面的响应,类型是html。

该响应类型为json

使用produces属性指定返回类型

以上响应未指定类型时,返回的是纯文本类型(text/plain)。

指定类型为json:

设置响应状态码

自定义响应header

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

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

相关文章

高可用 k8s 1.29 一键安装脚本, 丝滑至极

博客原文 文章目录 集群配置配置清单集群规划集群网络规划 环境初始化主机配置 配置高可用ApiServer安装 nginx安装 Keepalived 安装脚本需要魔法的脚本不需要魔法的脚本配置自动补全加入其余节点 验证集群 集群配置 配置清单 OS: ubuntu 20.04kubernetes&#xf…

【Scala】1. 变量和数据类型

1. 变量和数据类型 1.1 for begining —— hello world 新建hello.scala文件,注意object名字与文件名一致。 object hello { def main(args:Array[String]): Unit { println("hello world!") } }运行后打印结果如下: hello world!Pr…

Golang 并发 生产者消费者模式

Golang 并发 生产者消费者模式 生产者-消费者模式能够带来的好处 生产者消费者模式是一种常见的并发编程模式,用于解决生产者和消费者之间的数据传递和处理问题。在该模式中,生产者负责生成数据(生产),而消费者负责处…

【射影几何13 】梅氏定理和塞瓦定理探讨

梅氏定理和塞瓦定理 目录 一、说明二、梅涅劳斯(Menelaus)定理三、塞瓦(Giovanni Ceva)定理四、塞瓦点的推广4.1 共线定理4.2 三角形外的塞瓦点 一、说明 在射影几何中,梅涅劳斯(Menelaus)定理和塞瓦定理是…

最大子数组和[中等]

一、题目 给定一个长度为n的环形整数数组nums,返回nums的非空 子数组 的最大可能和 。 环形数组 意味着数组的末端将会与开头相连呈环状。形式上,nums[i]的下一个元素是nums[(i 1) % n],nums[i]的前一个元素是nums[(i - 1 n) % n]。 子数…

论文封面下划线总是对不齐,这3步你肯定没做!

论文封面 在写论文时,总会遇到论文封面下划线对不齐,学会下面这三招轻松搞定封面。 解决方法 ①选中文字,点击“插入”,选择“表格”,找到“文本转化为表格”。列数为2,文字分割位置选空格,设置…

第21讲:动态内存管理

1.为什么要有动态内存分配 2.malloc和free 3.calloc 4.realloc 5.笔试题 6.总结c/c中程序内存区域划分 1.为什么要有动态内存分配 为了调整申请的空间大小,使程序员可以申请和释放空间,提高程序的灵活性 2.malloc和free 作用:分配一块…

python将.db数据库文件转成Excel文档

python实现.db数据库转Excel 程序实现 上一篇文章程序实现以下功能: 1.读取一个Excel文件,文件名通过函数传参数传入 2.将文件读取的内容保存到一个数据库文件中 3.数据库的文件名以传入的Excel文件的文件名命名 4.将excel文件的工作簿的名字作为数据库的表单名 5…

apache_exporter安装说明

Apache Exporter 问题描述 需要监控apache服务,部署了apache_exporter,对过程进行一下记录。 源码参见apache_exporter ①下载 https://github.com/Lusitaniae/apache_exporter/releases②解压缩 tar -xzvf apache_exporter-0.7.0.linux-amd64.tar…

深入了解Redis:选择适用于你的场景的持久化方案

自然语言处理的发展 文章目录 自然语言处理的发展强烈推荐前言:Redis提供了几种主要的持久化方案:RDB快照持久化:工作原理: AOF日志文件持久化:混合持久化: 总结强烈推荐专栏集锦写在最后 强烈推荐 前些天…

相机图像质量研究(7)常见问题总结:光学结构对成像的影响--镜片固化

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…

戴上HAUWEI WATCH GT 4,解锁龙年新玩法

春节将至,华为WATCH GT 4作为一款颜值和实力并存的手表,能为节日增添了不少趣味和便利。无论你是钟情于龙年表盘或定制属于自己的表盘,还是过年用来抢红包或远程操控手机拍全家福等等,它都能成为你的“玩伴”。接下来,…

C语言 服务器编程-日志系统

日志系统的实现 引言最简单的日志类 demo按天日志分类和超行日志分类日志信息分级同步和异步两种写入方式 引言 日志系统是通过文件来记录项目的 调试信息,运行状态,访问记录,产生的警告和错误的一个系统,是项目中非常重要的一部…

JUnit 5 注解总结与解析

前言 大家好,我是chowley,通过前篇的JUnit实践,我对这个框架产生了好奇,除了断言判断,它还有哪些用处呢?下面来总结一下它的常见注解及作用。 正文 在Java单元测试中,JUnit是一种常用的测试框…

linux互斥锁:递归锁,非递归锁用法详解

在实际的项目中经常涉及到共享资源,共享资源被多个线程访问会出现竞争现象;为了解决竞争和保护共享资源常用的机制之一就是互斥锁! 互斥锁又分为递归锁和非递归锁,互斥锁默认是非递归锁,也是我们常用的上锁方式。那么什…

零基础学Python之整合MySQL

Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。 不同的数据库你需要下载不同的DB API模块,例如你需要访问Oracle数据库和Mysql数据,你需要下载Oracle和MySQL数据库模块。 DB-API 是一个规范. 它…

【51单片机】要实现动静态数码管,你首先需要知道这些【数码管项目前置知识】

前言 大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁 主要内容含: 本章节内容为【实现动静态数码管】项目的第一个模块完整章节:传送门 欢迎订阅 YY滴C专栏!更多干货持…

QT styleSheet——控件设置样式表

QT开发中,需要设置多种多样的控件表现形式,QT实现的styleSheet能够满足多种多样的场景,这里简单的记录下一些我常用的 设置透明背景,鼠标悬浮时,设置背景色: pushButton->setStyleSheet("QPushBu…

Unity接入GVoice腾讯实时语音

Unity接入GVoice腾讯实时语音 一、介绍二、注册GVoice创建项目语音服务1.创建项目2.申请语音权限3.项目管理查看SDK初始化的一些参数和基本信息4.GVoice检测 三、SDK下载SDK是分为两种类型:独立版集成板 SDK放入Unity工程中 四、语音代码写法五、GVoice踩坑语音权限…

【canvas】获取鼠标点击位置坐标的颜色信息

在项目当中,要实现某业务需求例如PS魔棒功能时,则需要获取点击坐标的颜色信息。 功能不复杂,代码也很少,一看便知~~ 核心API为getImageData,传入4个参数,前2个为点击坐标xy,后2个都传1&#xf…