一. HTTP协议
1. HTTP协议:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则
2. HTTP协议特点:
① 基于TCP协议:面向链接,安全
② 基于请求-响应模型的:一次请求对应一次响应
③ HTTP协议是无状态的协议:对于事物处理没有记忆能力,每次请求-响应都是独立的(缺点:多次请求间数据不能共享;优点:速度快)
二. HTTP-请求协议
1. 请求数据格式
请求方式-get:请求参数在请求行中,没有请求体(如:localhost:8080/hello?name=卡莎);get请求大写在浏览器中是有限制的。
请求方式-post:请求参数在请求体中;post请求大小是没有限制的
2. 请求数据获取
(1) web服务器(Tomcat)对HTTP协议的请求数据进行解析,并进行了封装(HttpServletRequest),在调用Controller方法的时候传递给了该方法。这样,就使得程序员不必直接对协议进行操作,web开发更加便捷
package com.example;import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class RequestController {@RequestMapping("/request")public String request(HttpServletRequest request){//1.获取请求方式System.out.println("获取请求方式" + request.getMethod());//2.获取URL地址System.out.println("获取URL地址" +request.getRequestURL());System.out.println("获取URI地址" +request.getRequestURI());//3.获取请求协议System.out.println("获取请求协议" +request.getProtocol());//4.获取请求参数-name.ageSystem.out.println("获取请求参数" +request.getParameter("name"));System.out.println("获取请求参数" +request.getParameter("age"));//5.获取请求头-AcceptSystem.out.println("获取请求头Accept" +request.getHeader("Accept"));return "OK";}
}
三. HTTP-响应协议
1. 响应数据格式
2. 响应数据设置
1. web服务器对HTTP协议的响应数据进行了封装(HttpServletResponse),并在调用Controller方法的时候传递给了该方法。这样就使得程序员不必直接对协议进行操作,让Web开发更加便捷
package com.example;import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.IOException;@RestController
public class ResponseController {/** 方式一 原始HttpServletResponse* */@RequestMapping("/response")public void response(HttpServletResponse response) throws IOException {//1.设置响应状态码response.setStatus(HttpServletResponse.SC_OK);//2.设置响应头response.setHeader("Content-Type","text/html");//3.设置响应体response.getWriter().write("<h1>Hello Response</h1>");}/** 方式二:spring 设置响应数据* */@RequestMapping("/response2")public ResponseEntity<String> responseEntity() {//链式编程return ResponseEntity.status(HttpServletResponse.SC_OK).header("Content-Type","text/html").body("<h1>Hello ResponseEntity</h1>");}
}
注意:响应状态码 和 响应头如果没有特殊要求的话,通常不手动设定。服务器会根据请求处理的逻辑,自动设置响应状态码和响应头