当前位置: 首页 > article >正文

黑马JavaWeb开发笔记13——Springboot入门(创建、运行测试项目)、Http协议(请求响应协议)、HTTP协议解析

文章目录

  • 前言
  • 一、SpringBoot介绍
  • 二、SpringBootWeb入门
    • 1. 需求
    • 2. 开发步骤
      • 2.1 创建SpringBoot工程(需要联网)
      • 2.2 定义请求处理类
      • 2.3 运行测试
  • 三、HTTP协议
    • 1. Http-概述
      • 1.1 介绍
      • 1.2 特点
    • 2. Http-请求协议
      • 2.1 GET方式的请求协议
      • 2.2 POST方式的请求协议
      • 2.3 GET请求和POST请求的区别
    • 3. Http-响应协议
      • 3.1 格式介绍
      • 3.2 响应状态码
    • 4. Http协议解析
  • 总结


前言

本篇文章是2023年最新黑马JavaWeb开发笔记13:Springboot入门(创建、运行&测试项目)、Http协议(GET, POST, 响应协议)、HTTP协议解析的总结,帮助需要学习Web开发的朋友温故而知新。

  1. SpringBoot介绍
  2. SpringBootWeb入门
  3. HTTP协议(请求、响应、协议解析)

一、SpringBoot介绍

  • 首先了解什么是Spring
    • 我们可以打开Spring的官网( https://spring.io ),去看一下Spring的简介:Spring makesJava simple
      在这里插入图片描述
  • Spring发展到今天已经形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于完成特定的功能。
  • 而我们在项目开发时,一般会偏向于选择这一套spring家族的技术,来解决对应领域的问题,那我们称这一套技术为spring全家桶
  • 而Spring家族旗下这么多的技术,最基础、最核心的是 SpringFramework。其他的spring家族的技术,都是基于SpringFramework的,SpringFramework中提供很多实用功能,如:依赖注入、事务管理、web开发支持、数据访问、消息服务等等
    在这里插入图片描述
    在这里插入图片描述
  • 通过springboot就可以快速的帮我们构建应用程序,所以springboot呢,最大的特点有两个 :
    • 简化配置
    • 快速开发

二、SpringBootWeb入门

1. 需求

基于SpringBoot的方式开发一个web应用,浏览器发起请求/hello后,给浏览器返回字符串:“Hello World ~”

2. 开发步骤

第1步:创建SpringBoot工程项目
第2步:定义HelloController类,添加方法hello,并添加注解
第3步:测试运行

2.1 创建SpringBoot工程(需要联网)

  • 基于Spring官方骨架,创建SpringBoot工程
    在这里插入图片描述

  • Springboot版本要选2.0版本,只有2.0版本才支持jdk11,3.0系列需要jdk17

  • 基本信息描述完毕之后,勾选web开发相关依赖
    在这里插入图片描述

  • 点击Finish之后,就会联网创建这个SpringBoot工程,创建好之后,结构如下:
    在这里插入图片描述

2.2 定义请求处理类

  • 在com.itheima这个包下创建一个子包controller
    在这里插入图片描述

  • 然后在controller包下新建一个请求处理类:HelloController

    • 此时只是一个普通的类,还不是请求处理类,需要加上一个标识,使其变成请求处理类
      在这里插入图片描述
      在这里插入图片描述
package com.itheima.controller;
import org.springframework.web.bind.annotation.*;

@RestController
public class HelloController {
	
	@RequestMapping("/hello")
	public String hello(){
		System.out.println("Hello World ~");
		return "Hello World ~";
    }
}

2.3 运行测试

在这里插入图片描述
在这里插入图片描述

较新版本的IDEA中已经有hello请求处理类,所以运行时可以会报错,我们把方法名和映射的地址改成其他名字就行(我这里改成hella)
在这里插入图片描述
运行成功的指定端口在这里
在这里插入图片描述
打开网址
在这里插入图片描述
至此,快速入门完成

三、HTTP协议

1. Http-概述

1.1 介绍

在这里插入图片描述

  • http是互联网上应用最为广泛的一种网络协议
  • http协议要求:浏览器在向服务器发送请求数据时,或是服务器在向浏览器发送响应数据时,都必须按照固定的格式进行数据传输
  • 如果想知道http协议的数据传输格式有哪些,可以打开浏览器,点击 F12 打开开发者工具,点击Network 来查看
    在这里插入图片描述
  • 浏览器向服务器进行请求时:服务器按照固定的格式进行解析
    在这里插入图片描述
  • 服务器向浏览器进行响应时:浏览器按照固定的格式进行解析
    在这里插入图片描述
    所以,我们学习HTTP主要就是学习请求和响应数据的具体格式内容。

1.2 特点

我们刚才初步认识了HTTP协议,那么我们在看看HTTP协议有哪些特点:

  • 基于TCP协议: 面向连接,安全
    在这里插入图片描述
  • 基于请求-响应模型: 一次请求对应一次响应(先请求后响应)
    在这里插入图片描述
  • HTTP协议是无状态协议: 对于数据没有记忆能力。每次请求-响应都是独立的
    在这里插入图片描述

2. Http-请求协议

  • 浏览器和服务器是按照HTTP协议进行数据通信的。
  • HTTP协议又分为:请求协议和响应协议
    • 请求协议:浏览器将数据以请求格式发送到服务器
      • 请求行:请求数据第一行(请求方式、资源路径、协议)
      • 请求头:第二行开始,格式key: value
      • 请求体:POST请求,存放请求参数
    • 响应协议:服务器将数据以响应格式返回给浏览器
      • 包括:响应行 、响应头 、响应体
  • 在HTTP1.1版本中,浏览器访问服务器的几种方式:
    在这里插入图片描述
    在这里插入图片描述
    在我们实际应用中常用的也就是 :GET、POST

2.1 GET方式的请求协议

在这里插入图片描述

  • 请求行 :HTTP请求中的第一行数据。由:请求方式 、资源路径 、协议/版本组成(之间使用空格分隔)
    • 请求方式:GET
    • 资源路径:/brand/findAll?name=OPPO&status=1
      • 请求路径:/brand/findAll
      • 请求参数:name=OPPO&status=1
        • 请求参数是以key=value形式出现
        • 多个请求参数之间使用 & 连接
      • 请求路径和请求参数之间使用 ? 连接
    • 协议/版本:HTTP/1.1
  • 请求头 :第二行开始,上图黄色部分内容就是请求头。格式为key: value形式
    • http是个无状态的协议,所以在请求头设置浏览器的一些自身信息和想要响应的形式。这样
      服务器在收到信息后,就可以知道是谁,想干什么了
    • 常见的HTTP请求头有:
Host: 表示请求的主机名

User-Agent: 浏览器版本。 例如:Chrome浏览器的标识类似Mozilla/5.0
...Chrome/79IE浏览器的标识类似Mozilla/5.0 (Windows NT ...)like
Gecko

Accept:表示浏览器能接收的资源类型,如text/*,image/*或者*/*表示所有;

Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网
页;

Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip, deflate等。

Content-Type:请求主体的数据类型

Content-Length:数据主体的大小(单位:字节)
  • 请求体 :存储请求参数
    • GET请求的请求参数在请求行中,故不需要设置请求体

2.2 POST方式的请求协议

在这里插入图片描述

  • 请求行(以上图中红色部分):包含请求方式、资源路径、协议/版本
    • 请求方式:POST
    • 资源路径:/brand
    • 协议/版本:HTTP/1.1
  • 请求头(以上图中黄色部分)
  • 请求体(以上图中绿色部分) :存储请求参数
    • 请求体和请求头之间是有一个空行隔开(作用:用于标记请求头结束)

2.3 GET请求和POST请求的区别

在这里插入图片描述

3. Http-响应协议

3.1 格式介绍

与HTTP的请求一样,HTTP响应的数据也分为3部分:响应行、响应头 、响应体
在这里插入图片描述

  • 响应行(以上图中红色部分):响应数据的第一行。响应行由:协议及版本响应状态码状态码描述组成
    • 协议/版本:HTTP/1.1
    • 响应状态码:200
    • 状态码描述:OK
  • 响应头(以上图中黄色部分):响应数据的第二行开始。格式为key: value形式
    • http是个无状态的协议,所以可以在请求头和响应头中设置一些信息和想要执行的动作,这样,对方在收到信息后,就可以知道你是谁,想干什么
  • 常见的HTTP响应头有:
Content-Type:表示该响应内容的类型,例如text/html,image/jpeg ;

Content-Length:表示该响应内容的长度(字节数);

Content-Encoding:表示该响应压缩算法,例如gzip ;

Cache-Control:指示客户端应如何缓存,例如max-age=300表示可以最多缓存300;

Set-Cookie: 告诉浏览器为当前页面所在的域设置cookie ;
  • 响应体(以上图中绿色部分): 响应数据的最后一部分, 存储响应的数据
    • 响应体和响应头之间有一个空行隔开(作用:用于标记响应头结束)

3.2 响应状态码

在这里插入图片描述
在这里插入图片描述

关于响应状态码,我们先主要认识三个状态码,其余的等后期用到了再去掌握:

  • 200 ok 客户端请求成功
  • 404 Not Found 请求资源不存在
  • 500 Internal Server Error 服务端发生不可预期的错误

状态码大全:https://cloud.tencent.com/developer/chapter/13553

4. Http协议解析

在这里插入图片描述
将资料中准备好的Demo工程,导入到我们的IDEA中,有一个Server.java类,这里面就是自定义的一个服务器代码,主要使用到的是 ServerSocket 和 Socket

(此代码只是作为展示, 后期这些tomcat会自动生成, 大家了解即可)

  • 启动ServerSocket程序:
    在这里插入图片描述

  • 浏览器输入:http://localhost:8080 就会访问到ServerSocket程序

    • ServerSocket程序,会读取服务器上 html/a.html 文件,并把文件数据发送给浏览器
    • 浏览器接收到a.html文件中的数据后进行解析,显示以下内容
      在这里插入图片描述

现在学习了服务器是可以使用java完成编写,是可以接受页面发送的请求和响应数据给前端浏览器的,而在开发中真正用到的Web服务器,不会自己写,都是使用目前比较流行的web服务器。如:Tomcat。

下一笔记将讲解Tomcat。


总结

本篇文章是2023年最新黑马JavaWeb开发笔记13:Springboot入门(创建、运行&测试项目)、Http协议(GET, POST, 响应协议)、HTTP协议解析的总结,帮助需要学习Web开发的朋友温故而知新。


http://www.kler.cn/a/288046.html

相关文章:

  • SwanLab安装教程
  • java版嘎嘎快充汽车单车充电系统源码系统jeecgboot
  • 【解决】Layout 下创建槽位后,执行 Image 同步槽位位置后表现错误的问题。
  • 电商系统开发:Spring Boot框架实战
  • 恒流数显驱动数显LED驱动芯片VK16D32
  • 领夹麦克风哪个品牌好,手机领夹麦克风哪个牌子好,选购推荐
  • 问:关于内部类,知道这些就够了~
  • C++初学(18)
  • Vue学习笔记 二
  • 【赵渝强老师】MongoDB的WiredTiger存储引擎
  • C#Math计算的几个常用方法
  • Pandas 1- 创建文件
  • 关键点检测(6)——yolov8-neck的搭建
  • 微信小程序背景图无法显示
  • 2409d,d语言非常简单利用sqlite3库
  • 前端宝典二十六:vue3的新特性
  • 群晖NAS本地使用Docker搭建Home Assistant智能家居平台与远程访问
  • vue3的学习(1)
  • vscode安装rest client插件,提示XHR failed
  • 使用EF框架进行查询(Find、where、select、count)
  • 深度学习-VGG16原理和代码详解
  • 光影漫游者:科技感十足的圆形气膜场馆—轻空间
  • C++泛型库
  • 05.整合Axios+MockJs
  • Python中传参是按值传递还是按引用传递?
  • GO、KEGG等富集棒棒图