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

news/2024/5/20 19:22:30

前言

此帖为本人学习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.mrgr.cn/p/26446628

相关文章

opencv-28 自适应阈值处理-cv2.adaptiveThreshold()

什么是自适应阈值处理? 对于色彩均衡的图像,直接使用一个阈值就能完成对图像的阈值化处理。但是,有时图像的色彩是不均衡的,此时如果只使用一个阈值,就无法得到清晰有效的阈值分割结果图像。 有一种改进的阈值处理技术&#xff…

基础概念:图片的卷积可视化结果

1. 前言 之前介绍过卷积的基本概念,具体的可以参考图片的卷积和池化操作,这里给出可视化的操作,因为卷积在初学的时候比较抽象,现在有时间就写写看,希望可以给初学的同学一点启发吧(这里前提是学过pytorch和相关的图像…

【C++入门到精通】C++入门 —— 类和对象(初始化列表、Static成员、友元、内部类、匿名对象)

目录 一、初始化列表 ⭕初始化列表概念 ⭕初始化列表的优点 ⭕使用场景 ⭕explicit关键字 二、Static成员 ⭕Static成员概念 🔴静态数据成员: 🔴静态函数成员: ⭕使用静态成员的优点 ⭕使用静态成员的注意事项 三、友…

大数据面试题之Elasticsearch:每日三题(七)

大数据面试题之Elasticsearch:每日三题 1.Elasticsearch索引文档的流程?2.Elasticsearch更新和删除文档的流程?3.Elasticsearch搜索的流程? 1.Elasticsearch索引文档的流程? 协调节点默认使用文档ID参与计算(也支持通过routing)&a…

微服务项目,maven无法加载其他服务依赖

微服务项目,导入了工具类工程,但是一直报错,没有该类, 检查maven 这里的Maven的版本与idea版本不匹配可能是导致依赖加载失败的最重要原因 检查maven配置,我这是原来的maven,home 修改之后,就不报错了

秒级体验本地调试远程 k8s 中的服务

点击上方蓝色字体,选择“设为星标” 回复”云原生“获取基础架构实践 背景 在这个以k8s为云os的时代,程序员在日常的开发过程中,肯定会遇到各种问题,比如:本地开发完,需要部署到远程k8s集群,本地…

TCP/IP协议详解(二)

目录内容 TCP协议的可靠性 TCP的三次握手 TCP的四次挥手 C#中,TCP/IP建立 三次握手和四次挥手常见面试题 在上一篇文章中讲解了TCP/IP的由来以及报文格式,详情请见上一篇文章,现在接着来讲讲TCP/IP的可靠性以及通过代码的实现。 在TCP首部的…

算法通过村第二关-链表白银笔记|指定区间反转

文章目录 前言链表反转|指定区间内头插法:穿针引线法: 总结 前言 提示:人啊,果然跟花一样,开花前的等待无比漫长,绽放的魅力却转瞬即逝。 链表反转|指定区间内 参考题目:92. 反转链表 II - 力…

Vue(待续)

概念 一套用于构建用户界面的渐进式JavaScript框架 Vue可以自底向上逐层的应用: 简单应用:只需一个轻量小巧的核心库。 复杂应用:可以引入各式各样的Vue插件。 1.采用组件化模式,提高代码复用率、且让代码更好维护。 2.声明式编码,让编码人员…

【iOS】—— 持久化

文章目录 数据持久化的目的iOS中数据持久化方案数据持久化方式分类内存缓存磁盘缓存 沙盒机制获取应用程序的沙盒路径沙盒目录的获取方式 持久化数据存储方式XML属性列表Preferences偏好设置(UserDefaults)数据库存储什么是序列化和反序列化,…

DAY1,Qt [ 手动实现登录框(信息调试类,按钮类,行编辑器类,标签类的使用)]

1.手动实现登录框&#xff1b; ---mychat.h---头文件 #ifndef MYCHAT_H #define MYCHAT_H#include <QWidget> #include <QDebug> //打印信息 #include <QIcon> //图标 #include <QPushButton> //按钮 #include <QLineEdit> //行编辑器类 #in…

TCP/IP协议

TCP/IP 是一类协议系统&#xff0c;它是用于网络通信的一套协议集合 物理层 所谓的物理层&#xff0c;是指光纤、电缆或者电磁波等真实存在的物理媒介。这些媒介可以传送物理信号&#xff0c;比如亮度、电压或者振幅。对于数字应用来说&#xff0c;我们只需要两种物理信号来分别…

分冶算法 剑指 07 重建二叉树 排序算法:剑指45 把数组排成最小的数 10-I 斐波那契数列

来记录几个注意事项 1.vector容器里利用find&#xff08;&#xff09;函数 不同于map&#xff08;map有find方法&#xff09;&#xff0c;vector本身是没有find这一方法&#xff0c;其find是依靠algorithm来实现的。 所以要包含头文件 #include <iostream> #include <…

特定Adreno GPU的Android设备发生冻屏问题

1&#xff09;特定Adreno GPU的Android设备发生冻屏问题 ​2&#xff09;Unity版本升级后&#xff0c;iOS加载UnityFramework bundle闪退 3&#xff09;关于RectTransfrom.rect在屏幕空间中表示的相关问题 4&#xff09;Unity Mesh泄露问题 这是第345篇UWA技术知识分享的推送&a…

计算机网络——应用层

文章目录 **1 网络应用模型****2 域名系统DNS****3 文件传输协议FTP****4 电子邮件****4.1 电子邮件系统的组成结构****4.2 电子邮件格式与MIME****4.3 SMTP和POP3** **5 万维网WWW****5.1 HTTP** 1 网络应用模型 客户/服务器模型 C/S 服务器服务于许多来自其他称为客户机的主…

ElementUI Select选择器如何根据value值显示对应的label

修改前效果如图所示&#xff0c;数据值状态应显示为可用&#xff0c;但实际上仅显示了状态码1&#xff0c;并没有显示其对应的状态信息。在排查了数据类型对应关系问题后&#xff0c;并没有产生实质性影响&#xff0c;只好对代码进行了如下修改。 修改前代码&#xff1a; <…

CSS鼠标样式(cursor)

CSS cursor 属性值 属性值示意图描述auto默认值&#xff0c;由浏览器根据当前上下文确定要显示的光标样式default 默认光标&#xff0c;不考虑上下文&#xff0c;通常是一个箭头none不显示光标initial将此属性设置为其默认值inherit从父元素基础 cursor 属性的值context-menu…

学习React(四)

学习React&#xff08;四&#xff09; componentWillMount&#xff08;被放弃使用&#xff09;rendercomponentDidMountshouldComponentUpdate(nextProps,nextState)componentWillUpdate&#xff08;被放弃使用&#xff09;componentDidUpdatecomponentWillReceiveProps&#x…

Excel修改日期格式,改变日期的筛选方式

我们有两列日期数据&#xff1a; 左边这一列筛选会显示&#xff1a; 右边这一列筛选会显示&#xff1a; 修改格式&#xff0c;将【日期1】改为【日期2】 将【日期1】的格式修改为文本格式即可 修改格式&#xff0c;将【日期2】改为【日期1】 选中日期2&#xff0c;点击【数据…

7月31日每日两题

第一题:再解炸弹人 小哼最近爱上了“炸弹人”游戏。你还记得在小霸王游戏机上的炸弹人吗?用放置炸弹的方法来消灭敌人。需将画面上的敌人全部消灭后,并找到隐藏在墙里的暗门才能过关。 现在有一个特殊的关卡如下。你只有一枚炸弹,但是这枚炸弹威力超强(杀伤距离超长,可…