Spring
官网HTTPs://spring.io
spring生态(全家桶)基于Spring Framework基础框架。但如果我们基于该基础框架开发,会面临配置繁琐,入门难度大的问题,SpringBoot则可以快速开发(简化配置,快速开发)。
1.SpringBootWeb入门
使用SpringBoot开发一个Web应用,浏览器发起请求/hello之后,给浏览器返回字符串"hello world~"
步骤:
-
创建SpringBoot工程,并勾选web开发相关依赖(New Project/Module的时候Spring Initializer)。
-
定义HelloController类,添加方法hello,并添加注解
@RestController public class HelloController { @RequestMapping("/hello") public String hello(){ System.out.println("Hello World~"); return "Hello World~"; } }
-
运行测试
2.HTTP协议
2.1HTTP概述(简略)
规定了浏览器与服务器之间数据传输的规则
基于tcp面向连接;
基于请求响应模型:一次请求一次响应;
http是无状态的协议:对事物处理没有记忆能力。每一次请求响应都是独立的(优点:速度快;缺点:多次请求之间不能共享数据)——可以通过web会话技术解决记忆问题(比如用户是否处于登录状态)。
2.2HTTP请求协议
GET /hello HTTP/1.1 请求行:方式,路径,协议
以下为请求头
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 浏览器接受的资源类型:text/*表示文本,image/*表示图片,*/*表示所有
Accept-Encoding: gzip, deflate, br 浏览器支持的压缩类型
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 浏览器偏好的语言
Cache-Control: max-age=0
Connection: keep-alive
Host: localhost:8080 主机名
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0 浏览器类型
sec-ch-ua: "Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
常见的请求头还包括:content-length请求主体大小,content-type请求主题数据类型,例如json
请求体是post请求特有的部分,post分为请求行,请求头,请求体;而get只有前两个部分?k=v&k=v
2.3HTTP响应协议
HTTP/1.1 200 相应行,响应状态码
Content-Type: text/html;charset=UTF-8
Content-Length: 12
Date: Mon, 25 Mar 2024 06:48:18 GMT
Keep-Alive: timeout=60
Connection: keep-alive
2.4HTTP协议解析
协议解析(浏览器作为客户端是不需用我们去解析协议的,而服务端则需要按照请求格式对http协议进行解析,并按照响应格式,对http协议进行响应)
服务端开发工程师用serverSocket接收请求,按照字符串组成规则进行解析。手写解析http的代码IO加socket是可以实现的,但很复杂。由于格式固定,就可以用jetty,weblogic以及tomcat等写好的软件进行解析。
3.Web服务器-Tomcat
web服务器是一个软件程序,对http协议的操作进行封装,使程序员不必直接对协议进行操作,使web开发更搞笑。主要功能是提供网上信息浏览服务
springboot已经内置了tomcat
3.1 tomcat简介
apache
支持少量javaEE规范servlet/jsp
也被成为web容器,servlet容器
3.2 基本使用
官网安装绿色版本之后改成gbk编码(conf/logging)
startup.bat双击就可以运行脚本文件/停止的话shutdown.bat
想要改端口号(conf/server.xml)端口号改为80(http默认端口的话,输入url就不用输入端口号了)
将项目放在webapps目录下
不用安装了,因为SpringBoot已经内置了
3.3 入门程序解析
maven有许多起步依赖starter,比如spring-boot-starter-aop,spring-boot-starter-web等(其余许多被依赖传递,而web就依赖了内嵌的tomcat)
本来只是自己编写一个Controller类,tomcat不识别;但是tomcat识别servlet(一项javaEE规范里的技术)DispatcherServlet(SpringBoot底层支持的一个核心的Servlet接口的实现类,称之为核心控制器或者前端控制器)
请求响应都会先经过Dispatcher:tomcat将接受到的协议信息进行解析,并将结果封装在一个httpServletRequest对象中,应用程序就可通过该对象获取请求数据了,然后对于该数据进行处理,处理完了之后再响应httpServletResponse。
BS架构(broswer-server)用户只要一个browser
CS架构,需要安装客户端。
4.请求响应
4.1请求
controller中获取请求数据(参数)
接口测试工具,postman。前后端分离之后,后端接口测试需求,浏览器直接地址测试只能get,又得单独去写前端post。
postman是一款功能强大的网页调试与发送网页http请求的chrome插件;作用:常用于进行接口测试(有一些apipost以及apifox的衍生大差不差)
可以下载vscode同名插件,可以用网页版(注意网页版访问本地地址需要下载代理),也可以下载到本地。
简单参数:
原始方式接收
@RestController
public class RequestController {
@RequestMapping("/simpleParam")
public String simpleParameter