HTTP协议
概念
http协议称为超文本传输协议,是客户端与服务器通信的一种标准。客户端和服务器都遵循http协议,就能从彼此发送的信息中提取自己想要的数据。
特点
1、http协议遵循的是请求/响应模式
2、http协议是一种无状态的协议
当请求/响应完成以后,客户端和服务器的连接会断开。所以,服务器无法知道两次请求的用户是否为同一个用户。
3、http协议占用80端口
工作流程
1、客户端和服务器建立连接
2、客户端发送http请求
3、服务器产生http响应
4、关闭连接
请求信息
http协议的请求信息分为:请求行、请求头、空行、消息体
请求行:描述请求方式,请求URL路径、http协议版本
请求头:以键值对方式描述客户端相关的信息
空行:标识请求头的结束
消息体:(POST)描述客户端请求的表单数据
请求方式
http协议请求方式有8种:
GET,POST,HEAD,OPTIONS,PUT,DELETE,TRACE,CONNECT; 其中 GET、POST是最常用的两种。
GET请求
1、浏览器输入URL路径为GET请求
2、用户点击超链接为GET请求
3、用户提交表单,默认为GET请求,method属性为GET时,也就是GET请求
POST请求
GET和POST的区别
1、流格式的区别:
GET请求:只有请求行、请求头、空行;会将表单数据附加在URL后面。
POST请求:有请求行、请求头、空行、消息体;在消息体中附加表单数据。
2、传输性能的区别
GET请求:不能传输大数据,只能传输小文本数据。
POST请求:可以传输大数据,同时可以传输文本数据,以及二进制数据;数据的传输相对安全。
3、用途的区别
GET请求:用于服务器资源查找。
POST请求:用于数据的传输。
响应信息
http协议的响应信息分为四部分:状态行、响应头、空行、消息体。
状态行:描述http协议版本、状态码、响应描述。
响应头:以键值对方式描述服务器相关的信息。
空行:标识响应头的结束。
消息体:服务器发送给客户端的具体数据。
状态码
http协议状态有5种:
100-199:表示客户端请求服务器在进行中。
200-299:表示客户端请求成功。
300-399:表示资源移走,请求新的地址。
400-499:表示客户端引发的错误。
500-599:表示服务器端引发的错误。
MIME类型
MIME类型用于服务器端发送数据给客户端时,告诉客户端浏览器以什么格式来解析响应信息体内容。
常见的MIME类型
text/html:html网页数据
Image/jpeg:JPG 图片数据
application/json:json 格式数据
text/xml:xml 格式数据
传统的 WEB服务器的缺陷:
传统的 WEB服务器在接收到客户端请求后,只能将静态的html信息发送给客户端,极大的影响了响应信息的灵活性。
解决方案:
在传统的 WEB服务器接收到客户端请求后,交由辅助应用进行处理。辅助应用可以利用数据库做为存储介质,将请求信息进行处理后,动态的产生响应信息。
java 利用 WEB容器 + Servlet 方式做为辅助应用解决方案的。
WEB容器
在java中,WEB容器完成底层操作。预留Servlet接口,交给开发者书写业务操作。WEB容器调用Servlet业务方法,动态产生响应信息。
作用
WEB容器的作用:
1、通讯支持
WEB 容器需要将请求信息和响应信息封装成请求对象和响应对象,以便更好的接收和发送数据。
2、Servlet生命周期管理
Servlet是WEB 容器预留给开发者的接口。开发者实现了Servlet接口后,可以书写相关的业务处理操作。Servlet实现类对象的产生、销毁、方法调用,全部由WEB容器管理。
3、线程支持
由于服务器需要接收多个客户端的同时访问,WEB容器采用多线程来进行多任务处理。
线程创建、启动、运行、同步等,都由WEB容器管理。
4、JSP支持
由于是WEB 容器编写 JSP 引擎,对 JSP 页面进行翻译。
5、处理安全性
tomcat
tomcat 源自于 apache 软件基金会 Jakarta 项目。tomcat 是一款免费的、开源的、性能稳定、技术成熟的 WEB 容器产品。
在 maven 工程中,导入tomcat:
org.apache.tomcat.embed tomcat-embed-core 9.0.36
Servlet 的 API 结构
在 Servlet 规范中,Servlet 是业务接口,预留 service 方法,交给开发者书写业务操作。ServletConfig 为配置接口。GenericServlet 同时实现了 Servlet、ServletConfig 两个接口,并重写了大部分方法,但是没有实现 service() 。该方法应该由 GenericServlet 的子类,根据协议的特点分别实现。HttpServlet 继承了 GenericServlet,根据 Http 协议的特点,重写了 service() ,根据不同的请求方式调用doXX() 。