一、什么是HTTP协议
HTTP协议:规定了浏览器和服务器端的数据交互的格式
1、HTTP的特性
(1)基于请求和响应模型
必须要先有请求,后有响应
请求和响应必须成对出现
(2)简单快捷
因为发送请求的时候只需要发送请求方式和请求路径即可
2、HTTP的版本
HTTP1.0:短链接
HTTP1.1:长链接
二、HTTP协议的抓包分析
1、分析HTTP协议
(1)准备工作
创建页面
http://localhost:8080/web01/demo1.html
安装HTTPWatch(IE)或者使用谷歌、火狐的F12工具
(2)请求部分
*************GET请求(只有请求行、请求头)*************
GET /web01/demo2.html?name=aaa&sex=man HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Referer: http://localhost:8080/web01/demo1.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: Pycharm-8dbeb98c=1f31b81e-d44c-45f8-95c1-2b06c10aea65
*************POST请求(请求行、请求头、请求体)*************
POST /web01/demo2.html HTTP/1.1
主机
Host: localhost:8080
Connection: keep-alive
Content-Length: 18
Cache-Control: max-age=0
Origin: http://localhost:8080
Upgrade-Insecure-Requests: 1
内容的类型
Content-Type: application/x-www-form-urlencoded
客户端浏览器的类型
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
Sec-Fetch-User: ?1
接收的数据格式
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
请求的来源
Referer: http://localhost:8080/web01/demo1.html
支持压缩的格式
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: Pycharm-8dbeb98c=1f31b81e-d44c-45f8-95c1-2b06c10aea65
name=bbb&sex=woman
(3)响应部分(响应行、响应头、响应体)
HTTP/1.1 200
Accept-Ranges: bytes
ETag: W/"145-1584323671836"
Last-Modified: Mon, 16 Mar 2020 01:54:31 GMT
Content-Type: text/html
Content-Length: 145
Date: Mon, 16 Mar 2020 01:59:05 GMT
Success!!!
三、HTTP协议之请求部分
1、请求行(红色)
(1)请求方式
请求方式有很多种,常用两种:GET和POST
GET和POST的区别?
GET:请求的参数会显示到地址栏,通常是有大小的限制,没有请求体
POST:请求的参数不会显示到地址栏,POST没有大小的限制,有请求体(请求参数),只有表单设置了method="post"才是post请求
(2)请求路径
(3)协议版本
2、请求头(蓝色)
(1)请求头的格式一般都是一个key对应一个value的,但也有一个key对应多个value的情况
(2)记住一些请求头:
Referer:代表网页的来源(防盗链)
User-Agent:获得客户端浏览器的类型
3、请求体(紫色)
只有POST请求方式才有请求体,而且请求体是POST方式的请求参数
四、HTTP协议之响应部分
1、响应行(红色)
协议版本
状态码
200:代表响应成功
302:需要进行重定向操作
304:需要查找本地缓存
404:请求资源不存在
500:服务器内部错误
状态码描述
2、响应头(蓝色)
通常一个key对应一个value,也有一个key对应多个value
记住响应头:
Location:重定向的路径
Refresh:定时刷新
Content-Disposition:文件下载的时候使用(不用浏览器默认的方式打开,而是用下载的方式打开)
3、响应体(紫色)
就是展示到浏览器上的页面代码
五、Servlet的概述与入门
1、什么是Servlet
Servlet其实就是一个运行在Web服务器上的小的Java程序,用于处理从Web客户端发送的请求,并且对请求作出响应
2、使用Servlet
编写一个Java类实现Servlet的接口
配置Servlet
3、Servlet的入门
创建包和类
实现Servlet的接口
在web.xml中配置这个类
访问Servlet
http://localhost:8080/web01/hello
4、Servlet的执行流程
六、Servlet的实现关系
1、基本的实现关系
Servlet接口
GenericServlet类:通用的Servlet,是一个无协议无关的Servlet
HttpServlet类:Http专用的Servlet
2、关系实现的概述
SUN设计之初,是想以后的互联网不单单只使用http协议,如果使用其它协议,都可以通过GenericServlet实现。HttpServlet是一个与协议相关的Servlet,是专门用来处理HTTP协议的请求的。通常编写一个Servlet时,一般都会让这个Servlet继承HttpServlet,并重写service方法
在service方法内部根据请求方式不同,会去执行不同的doXxx的方法(例如GET请求执行doGet方法、POST请求执行doPost方法)
所以往往继承了HttpServlet之后,不需要再重写service方法了,只需重写doGet和doPost方法即可。往往请求要处理的内容代码都是一致的,所以需要让doGet和doPost相互调用,可以简化编程
七、使用Eclipse开发Servlet
1、新建Servlet
2、完成Servlet的配置