【Java】零基础上手SpringBoot学习日记(day1)

前言

此帖为本人学习Springboot时的笔记,由于是个接触计算机一年左右的新手,也没有网站开发经验,所以有些地方的理解会比较浅显并且可能会出现错误,望大佬们多多包涵和指正。

Web应用开发

在我的理解中,Web应用的开发大体分为两个部分,一个是前端的页面设计以及实现,比如使用HTML、CSS、Javascript写出来的给用户看的页面;另一个是后端开发。后端开发主要关注数据处理、服务器逻辑和与前端的通信,负责处理用户请求、存储数据以及确保网站的稳定性和安全性。无论是安卓应用还是桌面端应用都大差不差是这两部分。

不管是前端的JavaScript,还是后端的Java,它们都可以使用自己原生的语法和自带能够使用的包或者模块进行前后端的开发,但这样子开发网站势必会出现重复造轮子的情况,不利于规范化企业化的开发,框架的出现就能够解决这一问题。

SpringBoot简介

SpringBoot是一个基于Spring框架的应用开发快速开发框架,它可以简化Spring应用程序的创建和开发过程。SpringBoot自动化配置了许多默认配置,减少了繁琐的XML配置过程。

本人不熟悉后台开发的知识,但简单了解了一下,以前使用Java开发后台经常会使用XML这种类似HTML格式的语言进行配置项目依赖,这种配置十分繁琐。Springboot框架就能够减少书写重复且繁杂的代码。

编写依赖

Springboot在初始化项目的时候就可以提前选择一些常用的配置项,所以在项目开发之初就能够减少配置环境的工作量。

在这里插入图片描述

在我仔细了解了一些开发流程之后,我发现并不是就不需要配置依赖了;后续有新的需求的时候,初始化时配置的依赖明显不够用,所以仍需要在项目中编写依赖,具体是在项目目录生成之后的pom.xml文件中配置。
在这里插入图片描述
方框框起来的内容是我了解下来比较重要的东西,初始化勾选的javaweb就是 第一个dependency标签中的东西,每个dependency标签中都有子标签 表示该依赖的关键信息 如version(版本) groupid 名称等等。

这些依赖编写完成后会由idea自动在maven中搜索下载,maven在我的理解当中是springboot在服务器中的依赖库,类似于python的pip、node的npm、这种包管理器。

程序入口

编写、下载导入完依赖之后就可以尝试启动服务器,让服务器运行起来;程序的入口就在目录下的ServerApplication中。

通过运行这个main方法就能够把服务器启动,它之所以成为服务器的入口是因为主类的上面有一行 @SpringBootApplication

这是一个注解,它的作用就是能够让下方的代码块具备某些特定的功能,显然这个注解的功能就是把下方的类变成服务器的主入口。在这里插入图片描述

启动好服务器之后就能够看到下方控制台输出如下信息,代表程序运行成功。

在这里插入图片描述

SpringBoot点亮第一个电灯泡(hello world)

仅仅是启动了主程序并不能在浏览器中看到我想要看到的东西,我想到当我访问localhost:8080/xxx (Springboot项目默认端口号是8080)时,页面上出现hello world

我需要创建一个Controllers目录,因为Web开发都是使用MVC模式MVC模式是一种软件架构模式,它将应用程序分为三个主要部分,即模型(Model)、视图(View)和控制器(Controller),以实现代码的分离和更好的组织。

在MVC模式中,模型表示应用程序的数据和业务逻辑,视图表示应用程序的用户界面,控制器则处理用户输入并协调模型和视图之间的交互。

在我的需求中,想要在指定地址的页面获得想要的输出就属于控制器曾的范畴了,所以新建了一个Controllers目录用于存放控制器层的类,接着在该目录下创建了PoiController.class文件,并为了达到我的目的在该文件中编写程序。

在这里插入图片描述

该程序如下:

@RestController
@RequestMapping("/poi")
public class PoiController{@GetMapping("/hello")public String hello(){return "hello world";}
}

在这段程序中使用了三个注解,分别是:
@RestController :用于标记一个类或者方法,表示该类或方法用于处理HTTP请求,并将响应的结果直接返回给客户端,而不需要进行视图渲染。
@RequestMapping :用于标记一个方法或者类,表示该方法或类用于处理HTTP请求,并映射到指定的URL路径上。
@GetMapping:用于标记一个方法,表示该方法处理GET请求,并映射到指定的URL路径上。

简单来说就是:
RestController 注解让下方的类具有了处理http请求的能力;
RequestMapping 注解表示处理/poi/…的url ;
GetMapping注解表示下方的方法是 url结尾带/poi/hello的get请求的处理方法。

该方法名为hello 返回值为一个String类型的字符串“hello world” 该返回值会渲染到页面上去。

在这里插入图片描述

Get请求的两种参数传递方式

get请求是前端给后端发请求的一种方式,它可以在请求的同时传递一些参数以达到前后端参数传递的作用。

在get请求中有两种参数传递的方式:

  • 一种是以参数的形式传递数据

在这里插入图片描述
这种参数传递的格式为:?key1=value1&key2&value2

  • 另一种是以路径的形式传递数据
    在这里插入图片描述

这种方式一般在请求url的最后方加上 / + 传递的数据

SpringBoot处理Get请求传递的参数的两种形式

  • 如果想要处理这种形式的请求 拿到pageNum和pageSize 两个参数的值
localhost:8080/poi/list?pageNum=2&pageSize=20

可以在controller的类中编写这样的代码:

@GetMapping("/list")  //以参数的形式传递数据public String list(@RequestParam(defaultValue="1") int pageNum,@RequestParam(defaultValue="30")int pageSize){log.info("poi list pageNum = {},pageSize = {}",pageNum,pageSize);return "this is list";}

通过在list方法的参数中定义两个int类型的形参,就可以拿到get请求中的两个参数的值了
另外可以在形参之前使用@RequestParam(defaultValue=“1”)注解,来设定两个参数的默认值,这里设置为了1。

当使用postman发出这个请求:
在这里插入图片描述
可以看到成功响应了this is list 字样,在控制台中也可以看到这两个参数的值:

在这里插入图片描述

  • 如果想要处理这种形式的请求 拿到detail/后面的123
localhost:8080/poi/detail/123

可以在controller中编写这样的代码:

@GetMapping("/detail/{id}") //以路径的形式传递数据public String detail(@PathVariable int id){log.info("poi detail id = {}",id);return "this is detail";}

这段代码通过在GetMapping注解的参数中(“/detail/{id}” ) ,在不确定的参数上使用{}包裹,然后在方法参数中使用@PathVariable注解 把形参id与{}包裹的id绑定,从而拿到需要的值。

使用postman发起这样的请求:
在这里插入图片描述

可以看到控制台也成功输出了参数id为123:
在这里插入图片描述

Post请求的数据传递方式

Post请求的数据传递方式是通过请求体传递的。在HTTP请求中,Put请求是一种用于向服务器上传数据的请求方法,通常用于更新服务器上的资源。与GET请求不同,PUT请求将数据作为请求的一部分放在请求体body中发送到服务器,而不是作为URL参数传递。

在前后端的数据传输过程中一般会使用json类型的数据。
json类型的数据格式类似于:

{"name":"教室","description":"这是一间教室"
}

Springboot处理Post请求的数据

由于json类型的数据的格式特殊,结构为key:value的形式;
所以springboot要处理json的数据最好新建一个类用于储存这些数据:
在controllers下新建Poi类

public class Poi {public String name;public String description;}

这样如果要处理上文中json类型的数据,两个数据都有地方放;
接着在controler类中编写处理post请求的程序:

 @PostMapping("/add")  //以body的形式传递数据public String add(@RequestBody Poi poi){ //用类储储存json信息log.info("poi add name = {} description = {}",poi.name,poi.description);return "this is add";}

这里使用@RequestBody注解,使获取到的数据存到先前创建的类实例化出来的对象中,
这样的话这个对象的两个属性就分别为前端传过来的json数据的两个值了。

可以验证一下:
使用postman发起请求
在这里插入图片描述

可以看到页面中响应了this is detail ,并且控制台内也输出了json中的数据:
在这里插入图片描述

其他请求的参数处理

除了get、post请求外,restfulapi中还有这其他的请求方法,如put、delete等,但他们的处理方法与get、post类似,这里就举些例子,不细说了。

  • 处理put请求的数据
 @PutMapping("/edit")public String edit(@RequestBody Poi poi){log.info("poi edit name = {} description = {}",poi.name,poi.description);return "this is edit";}
  • 处理delete请求的数据
  @DeleteMapping("/delete/{id}")public String delete(@PathVariable int id){log.info("poi delete id = {}",id);return "this is delete";}

结束

这就是本人入门Springboot第一天的一些理解,之后会继续更新day2、day3…
最后贴一句自己的座右铭:

让人迷茫的原因只有一个,那就是本该拼搏的年纪,却想的太多,做的太少。

继续加油!

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

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

相关文章

测试|测试分类

测试|测试分类 文章目录 测试|测试分类1.按照测试对象分类(部分掌握)2.是否查看代码:黑盒、白盒灰盒测试3.按开发阶段分:单元、集成、系统及验收测试4.按实施组织分:α、β、第三方测试5.按是否运行代码:静…

Mysql sql优化

目录 目的 目标 explain 优化 避免使用select * 用union all代替union 小表驱动大表(in与exists) 批量操作 多使用limit in中值太多 不使用%前缀模糊查询 不在where子句中进行表达式操作 避免隐式类型转换 联合索引遵守最左前缀法则 inne…

【Spring Boot 源码学习】走近 AutoConfigurationImportSelector

AutoConfigurationImportSelector 源码解析 引言主要内容1. ImportSelector 接口2. DeferredImportSelector 接口3. AutoConfigurationImportSelector 功能概述 总结 引言 上篇博文我们了解了 EnableAutoConfiguration 注解,其中真正实现自动配置功能的核心实现者 …

1.Oracle建表及使用

1.概述 1. 表:用于 存储数据 -- 是我们最常见的数据库对象 2. 表设计注意事项 (1) 表设计时,尽量遵从 第三范式(3NF) (2) 名称不能超过 30 个字符 -- 超过会报错 (3) 名称只能以 字母 大头,可由数字、 _、 $…

细讲TCP三次握手四次挥手(二)

TCP/IP 协议族 应用层 应用层( application-layer )的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。 对于不同的网络应用需要不同的应用层协议…

C语言字串函数、内存函数介绍以及模拟实现

目录 前言 本期内容介绍: 一、字符串函数 strlen介绍 strlen 模拟实现(三种方式) 方法一:计数器法 方法二:递归法(不创建临时变量法) 方法三:指针-指针 strcpy介绍 strcpy模…

速度快\颜色准\功能多,移动端HEIF图片解码实现方案

HEIF图片压缩格式是一种使用HEVC编码技术存储图像数据的方式,在同等质量下相比JPEG可节省50%以上空间,无论是节约包体还是节省带宽,使用HEIF格式都能有所收益。 基于百度智能云音视频处理MCP的自研BD265编码器,百度智能云对象存储…

Rust-IO

use std::io::Write; fn main() {/*std::io::stdin() 返回标准输入流stdin的句柄。read_line() stdin的句柄的一个方法,从标准输入流中读取一行数据返回一个Result枚举。会自动删除行尾的换行符\n。unwrap() 是一个帮助的方法,简化恢复错误的处理。返回R…

合并两个有序数组——力扣88

文章目录 题目描述法一 双指针法二 逆向双指针 题目描述 法一 双指针 使用双指针方法&#xff0c;将两个数组看作队列&#xff0c;每次从两个数组头部取出比较小的数字放到结果中。 void merge(vector<int>&nums1, int m,vector<int>&nums2, int n){int p1…

C++ ——STL容器【list】模拟实现

代码仓库&#xff1a; list模拟实现 list源码 数据结构——双向链表 文章目录 &#x1f347;1. 节点结构体&#x1f348;2. list成员&#x1f349;3. 迭代器模板&#x1f34a;4. 迭代器&#x1f34b;5. 插入删除操作&#x1f34c;5.1 insert & erase&#x1f34c;5.2 push_…

15 文本编辑器vim

15.1 建立文件命令 如果file.txt就是修改这个文件&#xff0c;如果不存在就是新建一个文件。 vim file.txt 使用vim建完文件后&#xff0c;会自动进入文件中。 15.2 切换模式 底部要是显示插入&#xff0c;是编辑模式&#xff1b; 按esc&#xff0c;底部要是空白的&#xff0…

微服务契约测试框架Pact-Python实战

Pact是一个契约测试框架&#xff0c;有多种语言实现&#xff0c;本文以基于pact-python探究契约测试到底是什么&#xff1f;以及如何实现 官网&#xff1a;自述文件 |契约文档 (pact.io) 契约测试步骤 1、为消费者写一个单元测试&#xff0c;让它通过&#xff0c;并生成契约…

OS-08-事件驱动:C10M是如何实现的?

08-事件驱动&#xff1a;C10M是如何实现的&#xff1f; 你好&#xff0c;我是陶辉。 上一讲介绍了广播与组播这种一对多通讯方式&#xff0c;从这一讲开始&#xff0c;我们回到主流的一对一通讯方式。 早些年我们谈到高并发&#xff0c;总是会提到C10K&#xff0c;这是指服务…

Kubernetes(K8s)从入门到精通系列之七:K8s的基本概念和术语之安全类

Kubernetes K8s从入门到精通系列之七:K8s的基本概念和术语之安全类 一、安全类二、Role和ClusterRole三、RoleBinding和ClusterRoleBinding一、安全类 开发的Pod应用需要通过API Server查询、创建及管理其他相关资源对象,所以这类用户才是K8s的关键用户。K8s设计了Service A…

MIT 6.830数据库系统 -- lab five

MIT 6.830数据库系统 -- lab five 项目拉取引言搜索练习1 BTreeFile.findLeafPage() 插入练习2 Spliting Page 删除练习3 页再分配练习4 合并页 事务小结 项目拉取 原项目使用ant进行项目构建&#xff0c;我已经更改为Maven构建&#xff0c;大家直接拉取我改好后的项目即可: …

centos安装mysql8

安装过程 基本安装过程同mysq5.7&#xff0c;参考&#xff1a;centos7安装mysql5.7_centos7 安装mysql5.7源_shuair的博客-CSDN博客 设置不区分大小写 切记&#xff0c;在第一次启动器前就应修改配置文件&#xff0c;设置不区分大小写&#xff0c;即初始化之前修改&#xff…

使用 docker 一键部署 MongoDB

目录 1. 前期准备 2. 导入镜像 3. 部署MongoDB脚本 4. 配置模板文件 5. 部署MongoDB 6. 部署后配置 7. 基本维护 1. 前期准备 新部署前可以从仓库&#xff08;repository&#xff09;下载 MongoDB 镜像&#xff0c;或者从已有部署中的镜像生成文件&#xff1a; # 查看…

Zookeeper入门介绍

Zookeeper在我本次系统的学习之前是已经开始使用了&#xff0c;但是并不理解Zookeeper到底是什么&#xff0c;有什么作用&#xff0c;你或许跟我有一样的疑惑&#xff0c;本专栏将会解决这些疑惑。 目录 Zookeeper介绍&#xff1a; zookeeper特点&#xff1a; 数据结构&#x…

NUMA架构在kubernetes中的应用

numactl使用 numactl 通过将 CPU 划分多个 node 减少 CPU 对总线资源的竞争,一般使用在高配置服务器部署多个 CPU 消耗性服务使用。 numactl使用,numa常用命令,numa命令行使用 #numactl -H available: 2 nodes (0-1) node 0 cpus: 0 2 4 6 8 10 12 14 16 18 20 22 node 0…

09mysql之数据处理之增删改

#1. 创建数据库dbtest11 CREATE DATABASE IF NOT EXISTS dbtest11 CHARACTER SET utf8; #2. 运行以下脚本创建表my_employees USE dbtest11; CREATE TABLE my_employees( id INT(10), first_name VARCHAR(10), last_name VARCHAR(10), userid VARCHAR(10), salary DOUBLE(10,2)…