SpringBootWeb入门(包含http协议)
Spring
Spring发展到今天已经形成了一种开发生态圈,Spring提供了若干个子项目,每个子项目用于完成特定的功能。
其子项目是基于Spring Framework,但是Spring Framework配置繁琐,入手难度大,官方就推出了Spring Boot,简化配置,快速开发
Spring Boot 可以帮助我们非常快速的构建应用程序、简化开发、提高效率。
SpringBootWeb入门
需求:使用SpringBoot开发一个web应用,浏览器发起请求/hello后,给浏览器返回字符串“Hello World ~”。
步骤:
1.创建springboot工程,并勾选web开发相关依赖(在idea中创建module选Spring Initializr)
2.定义HelloController类,添加方法hello,并添加注解。
3.运行测试:
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
System.out.println("Hello World ~");
return "Hello World ~";
}
}
HTTP协议
概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。(响应数据,请求数据之间的协议)
特点:
1.基于TCP协议:面向连接,安全
2.基于请求 -响应模型的:一次请求对应一次响应
3.HTTP 协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。
- 缺点:多次请求间不能共享数据
- 有点:速度快
HTTP-请求数据格式
请求行:请求数据第一行(请求方式、资源路径、协议)
请求头:第二行开始,格式key:value
请求体:POST请求特有的,存放请求参数
GET /brand/findAll?name=OPPO&status=1 HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;qj=0.9,image/webp,image/apng,*/*
Aeecpt-Encoding: gzip, deflate,br
Accept-Language: zh-CN,zh;q=0.9
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/...
POST /brand HTTP/1.1
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Content-Length: 161
Content-Type: application/json;charset=UTF-8
Cookie: Idea-8296eb32=841b16f0-0cfe-495a-9cc9-d5aaa71501a6; JSESSIONID=0FDE4E430876BD9C5C955F061207386F
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/...
{"status":1,"brandName":"黑马","companyName":"黑马程序员","id":"","description":"黑马程序员"}
Host | 请求的主机名 |
---|---|
User-Agent | 浏览器版本,例如Chrome浏览器的标识类似Mozilla/5.0...Chome/79,IE浏览器的标识类似Mozilla/5.0(Windows NT ...)like Gecko |
Accept | 表示浏览器能接收的资源类型,如text/*接收文本,image/*接收图片或者*/*表示接收所有; |
Accept-Language | 表示浏览器偏好的语言,服务器可以据此返回不同语言的网页; |
Accept-Encoding | 表示浏览器可以支持的压缩类型,例如gzip,deflate等。 |
Content-Type | 请求主体的数据类型。 |
Content-Length | 请求主体的大小(单位:字节)。 |
请求方式-GET:请求参数在请求行中,没有请求体,如:/brand/findAll?name=OPPO&status=1。GET请求大小是有限制的。
请求方式-POST:请求参数在请求体中,POST请求大小是没有限制的。
请求响应介绍-HTTP响应格式
相应行:响应数据第一行(协议、状态码、描述)
响应头:第二行开始,格式key:value
响应体:最后一部分,存放响应数据
HTTP/1.1 200 0K
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 10 May 2022 07:51:07 GMT
Keep-Alive: timeout=60
Connection: keep-alive
[{id: 1, brandName::“阿里巴巴",companyName:"腾讯计算机系统有限公司",description:"玩玩玩"}]
状态码分类 | 说明 |
---|---|
1xx | 响应中——临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果它已经完成则忽略它 |
2xx | 成功——表示请求已经被成功接收,处理已完成 |
3xx | 重定向——重定向到其它地方:它让客户端再发起一个请求以完成整个处理。 |
4xx | 客户端错误——处理发生错误,责任在客户端,如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等 |
5xx | 服务器端错误——处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等 |
常见的响应状态码
状态码 | 英文描述 | 解释 |
---|---|---|
200 | OK |
客户端请求成功,即处理成功,这是我们最想看到的状态码 |
302 | Found |
指示所请求的资源已移动到由Location 响应头给定的 URL,浏览器会自动重新访问到这个页面 |
304 | Not Modified |
告诉客户端,你请求的资源至上次取得后,服务端并未更改,你直接用你本地缓存吧。隐式重定向 |
400 | Bad Request |
客户端请求有语法错误,不能被服务器所理解 |
403 | Forbidden |
服务器收到请求,但是拒绝提供服务,比如:没有权限访问相关资源 |
404 | Not Found |
请求资源不存在,一般是URL输入有误,或者网站资源被删除了 |
405 | Method Not Allowed |
请求方式有误,比如应该用GET请求方式的资源,用了POST |
428 | Precondition Required |
服务器要求有条件的请求,告诉客户端要想访问该资源,必须携带特定的请求头 |
429 | Too Many Requests |
指示用户在给定时间内发送了太多请求(“限速”),配合 Retry-After(多长时间后可以请求)响应头一起使用 |
431 | Request Header Fields Too Large |
请求头太大,服务器不愿意处理请求,因为它的头部字段太大。请求可以在减少请求头域的大小后重新提交。 |
500 | Internal Server Error |
服务器发生不可预期的错误。服务器出异常了,赶紧看日志去吧 |
503 | Service Unavailable |
服务器尚未准备好处理请求,服务器刚刚启动,还未初始化好 |
状态码大全:https://cloud.tencent.com/developer/chapter/13553
Content-Type | 表示该响应内容的类型,例如text/html,application/json。 |
---|---|
Content-Length | 表示该响应内容的长度(字节数)。 |
Content-Encoding | 表示该响应压缩算法,例如gzip。 |
Cache-Control | 指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒。 |
Set-Cookie | 告诉浏览器为当前页面所在的域设置cookie。 |
HTTP-协议解析
概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。(响应数据,请求数据之间的协议)
Web服务器
Web服务器是一个软件程序,对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷。主要功能是“提供网上信息浏览服务”。
Web服务器-Tomcat
概念:Tomcat是Apache软件基金会一个核心项目,是一个开源免费的轻量级Web服务器,支持Srvlet/JSP少量JavaEE规范。
JavaEE:Java Enterprise Edition,Java企业版。指Java企业级开发的技术规范总和。包含13项技术规范:JDBC、JNDI、EJB、RMI、JSP、Servlet、XML、JMS、Java IDL、JTS、JTA、Java Mail、JAF
Tomcat也被称为Web容器、Servlet容器。Servlet程序需要依赖于Tomcat才能运行
Web服务器
- 对HTTP协议操作进行封装,简化web程序开发。
- 部署web项目,对外提供网上信息浏览服务。
Tomcat
- 一个轻量级的web服务端,支持servlet、就是怕、等少量JavaEE规范。
- 也被称为web容器、servlet容器。
Tomcat-基本使用
(注意:SpringBoot已经内置Tomcat)
1.下载:官网下载,地址:https://tomcat.apache.org/download-90.cgi
2.安装:绿色版,直接解压即可
3.卸载:直接删除目录即可
4.启动:双击:bin\startup.bat
控制台中文乱码:修改conf/logging.properties
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = UTF-8(改成GBK)
5.关闭:
- 直接x掉运行窗口:强制关闭
- bin\shutdown.bat:正常关闭
- Ctrl+C:正常关闭
目录结构 | 说明 |
---|---|
bin | 可执行文件 |
conf | 配置文件 |
lib | Tomcat依赖的jar包 |
logs | 日志文件 |
temp | 临时文件 |
webapps | 应用发布目录 |
work | 工作目录 |
常见问题:
- 启动窗口一闪而过:检查JAVA_HOME环境变量是否正确配置
- 端口号冲突:找到对应程序,将其关闭掉
cmd查看端口号:netstat -ano | findstr 8080
mac查看端口号:lsof -I :8080
6.配置Tomecat端口号(conf/server.xml)
<Connector port="8080" protocol="HTTP/1.1"//修改8080即可
connectionTimeout="20000"
redirectPort="8443" />
注意事项:HTTP协议默认端口号为80,如果将Tomcat端口号改为80,则将来访问Tomcat时,将不用输入端口号。
7.Tomcat部署项目:将项目放置到webapps目录下,即部署完成
SpringBootWeb-入门程序解析
- spring-boot-starter-web:包含了web应用开发所需要的常见依赖。
- spring-boot-starter-test:包含了单元测试所需要的常见依赖。
- 官方提供的starter:https://docs.spring.io/spring-boot/docs/2.7.4/reference/htmlsingle/#using.build-systems.starters
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)