此帖为本人学习Springboot时的笔记,由于是个接触计算机一年左右的新手,也没有网站开发经验,所以有些地方的理解会比较浅显并且可能会出现错误,望大佬们多多包涵和指正。
在我的理解中,Web应用的开发大体分为两个部分,一个是前端的页面设计以及实现,比如使用HTML、CSS、Javascript写出来的给用户看的页面;另一个是后端开发。后端开发主要关注数据处理、服务器逻辑和与前端的通信,负责处理用户请求、存储数据以及确保网站的稳定性和安全性。无论是安卓应用还是桌面端应用都大差不差是这两部分。
不管是前端的JavaScript,还是后端的Java,它们都可以使用自己原生的语法和自带能够使用的包或者模块进行前后端的开发,但这样子开发网站势必会出现重复造轮子的情况,不利于规范化企业化的开发,框架的出现就能够解决这一问题。
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
这是一个注解,它的作用就是能够让下方的代码块具备某些特定的功能,显然这个注解的功能就是把下方的类变成服务器的主入口。
启动好服务器之后就能够看到下方控制台输出如下信息,代表程序运行成功。
仅仅是启动了主程序并不能在浏览器中看到我想要看到的东西,我想到当我访问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请求中有两种参数传递的方式:
这种参数传递的格式为:?key1=value1&key2&value2
这种方式一般在请求url的最后方加上 / + 传递的数据
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 字样,在控制台中也可以看到这两个参数的值:
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绑定,从而拿到需要的值。
Post请求的数据传递方式是通过请求体传递的。在HTTP请求中,Put请求是一种用于向服务器上传数据的请求方法,通常用于更新服务器上的资源。与GET请求不同,PUT请求将数据作为请求的一部分放在请求体body中发送到服务器,而不是作为URL参数传递。
在前后端的数据传输过程中一般会使用json类型的数据。
json类型的数据格式类似于:
{
"name":"教室",
"description":"这是一间教室"
}
由于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数据的两个值了。
可以看到页面中响应了this is detail ,并且控制台内也输出了json中的数据:
除了get、post请求外,restfulapi中还有这其他的请求方法,如put、delete等,但他们的处理方法与get、post类似,这里就举些例子,不细说了。
@PutMapping("/edit")
public String edit(@RequestBody Poi poi){
log.info("poi edit name = {} description = {}",poi.name,poi.description);
return "this is edit";
}
@DeleteMapping("/delete/{id}")
public String delete(@PathVariable int id){
log.info("poi delete id = {}",id);
return "this is delete";
}
这就是本人入门Springboot第一天的一些理解,之后会继续更新day2、day3…
最后贴一句自己的座右铭:
让人迷茫的原因只有一个,那就是本该拼搏的年纪,却想的太多,做的太少。
继续加油!