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

JavaWeb基础-HTTP协议、请求协议、响应协议

一. 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.age
        System.out.println("获取请求参数" +request.getParameter("name"));
        System.out.println("获取请求参数" +request.getParameter("age"));

        //5.获取请求头-Accept
        System.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>");
    }
}

  

        注意:响应状态码 和 响应头如果没有特殊要求的话,通常不手动设定。服务器会根据请求处理的逻辑,自动设置响应状态码和响应头

相关文章:

  • 【凸优化】分式规划
  • 编程题记录2
  • 如何解决微服务调用链性能问题(优化 JVM 配置,降低 Full GC 频率)
  • SpringCould微服务架构之Docker(1)
  • 【解决】XCode不支持旧版本的iOS设备
  • Spring Boot项目快速创建-开发流程(笔记)
  • MySQL颠覆版系列————MySQL新特性(开启数据库的新纪元)上篇
  • 【AI部署】Ollama与vLLM深度对比:大模型部署框架的技术演进与实践指南
  • [c语言日寄]数据输入
  • 【论文#目标检测】You Only Look Once: Unified, Real-Time Object Detection
  • unity开发效率提升笔记
  • 系统掌握scikit-learn:核心功能与实践指南
  • AIGC 新势力:探秘海螺 AI 与蓝耘 MaaS 平台的协同创新之旅
  • 内网渗透技术 Docker逃逸技术(提权)研究 CSMSF
  • 【YOLO项目】毕设大作业之疲劳驾驶检测
  • 【开源宝藏】30天学会CSS - DAY5 第五课 脉冲动画
  • 安装unsloth
  • 第三天 开始Unity Shader的学习之旅之第二天的补充
  • 5G智慧工厂专网部署:IPLOOK助力制造业数字化转型
  • 我爱学算法之——滑动窗口攻克子数组和子串难题(中)
  • 没有握手,采用翻译:俄乌三年来首次直接会谈成效如何?
  • 美联储计划裁员约10%
  • 自强!助残!全国200个集体和260名个人受到表彰
  • “16+8”“生酮饮食”,网红减肥法究竟靠谱吗?
  • 梅花奖在上海|舞剧《朱鹮》,剧里剧外都是生命的赞歌
  • 美F-35险被胡塞武装击中,损失增大让行动成“烂尾仗”