- 能够使用工具查看HTTP协议内容
- 能够理解HTTP协议请求内容
- 能够使用Request对象获取HTTP协议请求内容(重点)
- 能够处理HTTP请求参数的乱码问题 (重点)
- 能够使用Request域对象 (重点)
HTTP协议作用
HTTP协议就是用来传输HTML的。
默认端口号:80,可以省略。
注:8080是Tomcat的端口号
HTTPS是在HTTP的基础上加密的一种协议,更加安全,但传输效率相对要低一些。 它的端口号是:443
HTTP协议的特点:
- 简单快速:浏览器向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、POST。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的响应后,即断开连接。采用这种方式可以节省传输时间。
- 无状态:HTTP协议是无状态协议。无状态是指协议对于业务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的响应就较快。
查看浏览器与服务器的通讯,按F12打开窗口
请求的组成
注:GET方法没有请求体,它的数据在请求行中传递
小结
请求由哪三个组成部分?分别是?
- 请求行
- 请求头:多个键和值组成
- 请求体:发送数据,只有POST才有。
请求信息的组成:请求行
目标
- 请求行的格式
- POST和GET请求的区别
请求行组成
三个部分:POST /login HTTP/1.1
请求方式 请求URI 协议和版本
关于HTTP1.0与1.1的区别
现在1.0已经淘汰,我们使用1.1的版本,HTTP是一个传输层的协议,是运行在TCP协议之上的。1.0是每次请求以后都会关闭TCP连接。HTTP1.1在同一时间对于同一个域名的请求数量有限制,超过限制就会阻塞请求。
POST与GET的区别
POST方式 | GET方式 | |
---|---|---|
地址栏 | 不会,因为参数在请求体中传输 | 会显示提交参数值,因为参数是在请求行中传输 |
大小 | 理论上没有限制数据传输的大小 | 受浏览器限制,最大1024字节 |
安全性 | 相对比较安全 | 相对安全性低 |
缓存 | 邮寄,将客户端的数据发送给服务器 | 拿,表示浏览器从服务器去获取数据,可以使用缓存。 如果浏览器端之前已经访问过服务器上静态资源,下次访问它使用缓存,不再访问服务器。 通过状态码可以判断:如果是200表示从服务器得到数据,如果是304表示使用缓存。 |
小结
-
请求行由哪三个组成部分?
请求的方式 URI 协议和版本
-
GET方法和POST方法传递数据有什么区别?
- 哪个使用缓存?GET
- 哪个数据传输没有限制:POST
- POST在哪里发送数据:在请求体中
请求信息的组成:请求头、请求体
常用请求头
请求体
- GET:没有请求体
- POST:数据在请求体中发送
请求的方法:与请求行有关的方法
与请求行相关的方法
什么是HttpServletRequest对象
概述:这是一个接口,Oracle并没有对它进行具体的实现,由Tomcat等第三方Web容器厂商去实现它的类。我们只需要学习接口中的方法就可以了。
请求行相关的方法
需求
创建一个RequestLineServlet,用于获取请求行中相关信息的方法,并且输出到网页上。
效果
代码
package com.itheima.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "Demo1RequestLineServlet", urlPatterns = "/demo1")
public class Demo1RequestLineServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("请求对象:" + request);
//得到请求的方式:get或post
System.out.println("请求的方式:" + request.getMethod());
//uri 统一资源标识符:只是一个名字不能直接访问
System.out.println("得到请求的URI:" + request.getRequestURI());
//url 统一资源定位符:一个可以直接访问的地址
System.out.println("得到请求的URL:" + request.getRequestURL());
System.out.println("得到协议和版本:" + request.getProtocol());
//上下文地址:
System.out.println("得到当前项目的访问地址:" + request.getContextPath());
//默认是使用ipv6的格式: 0:0:0:0:0:0:0:1,ipv4本地是:127.0.0.1
System.out.println("得到客户端的IP地址:" + request.getRemoteAddr());
System.out.println("得到当前Servlet的访问地址:" + request.getServletPath());
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException