• JavaWeb核心篇——Request和Response


    简单介绍

    首先我们先了解一下客户端与服务端之间信息如何传递:

    从上图,我们可以看到:

    • 客户端发送请求,而请求是以HTTP请求数据格式进行发送,因而Servlet就创建了一个Request类来封装这些接收数据
    • 服务端给出响应,而响应是以HTTP响应数据格式进行发送,因而Servlet就创建了一个Response类来封装这些返回数据

    简单来说:

    • Request对象:获得请求数据
    • Response对象:设置响应数据

    Request介绍

    我们在介绍Request之前,应当先了解一下Request的继承体系:

    我们可以看到HttpServletRequest是基于ServletRequest接口创建的针对Http协议的请求对象接口

    我们在使用Request对象时,也常常使用HttpServletRequest接口

    Request获得请求数据

    Request对象被创建的主要目的就是获得请求数据

    我们将根据HTTP请求数据对象的三种格式分开介绍获得请求数据方法

    1. 请求行:

    请求行格式:

    GET/request-demo/req1?username=zhangsan HTTP/1.1

    请求行获得代码:

    函数 解释
    String getMethod() 获得请求方式(GET/POST)
    String getContextPath() 获得虚拟目录(项目访问路径):/request-demo
    StringBuffer getRequestURL() 获得URL(统一资源定位符): http://localhost:8080/request-demo/req1
    String getRequestURI() 获得URI(统一资源标识符):/request-demo/req1
    String getQueryString 获得请求参数(GET方法):username=zhangsan HTTP/1.1
    1. 请求头:

    请求头格式:

    User-Agent: Mozilla/5.0 Chrome/91.0.4472.106

    请求头获得代码:

    函数 解释
    String getHeader(String name) 根据请求头名称,获得值
    1. 请求体:

    请求体格式:

    username=superbaby&password=123456

    请求体获得代码:

    函数 解释
    ServletInputStream getInputStream() 获得字节输入流
    BufferedReader getReader() 获得字符输入流

    最后给出代码展示:

    package com.itheima.web.request;
    
    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.BufferedReader;
    import java.io.IOException;
    
    /**
     * request 获取请求数据
     */
    @WebServlet("/req1")
    public class RequestDemo1 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // String getMethod():获取请求方式: GET
            String method = req.getMethod();
            System.out.println(method);//GET
            // String getContextPath():获取虚拟目录(项目访问路径):/request-demo
            String contextPath = req.getContextPath();
            System.out.println(contextPath);
            // StringBuffer getRequestURL(): 获取URL(统一资源定位符):http://localhost:8080/request-demo/req1
            StringBuffer url = req.getRequestURL();
            System.out.println(url.toString());
            // String getRequestURI():获取URI(统一资源标识符): /request-demo/req1
            String uri = req.getRequestURI();
            System.out.println(uri);
            // String getQueryString():获取请求参数(GET方式): username=zhangsan
            String queryString = req.getQueryString();
            System.out.println(queryString);
    
    
            //------------
            // 获取请求头:user-agent: 浏览器的版本信息
            String agent = req.getHeader("user-agent");
            System.out.println(agent);
    
    
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //获取post 请求体:请求参数
    
            //1. 获取字符输入流
            Buf
  • 相关阅读:
    Redis (持续更新…)
    大数据学习(17)-mapreduce task详解
    Jetson nano 系统安装
    Pytorch下张量的形状操作(详细)
    脏数据绕过waf,Yakit爆破base64编码密码,ssh无密码登录受害主机
    【公司UI自动化学习】
    博客园最新的在线编辑器,快捷键一览
    B053 项目部署
    设计模式七大原则
    MyBatisPlus-多记录操作及逻辑删除
  • 原文地址:https://blog.csdn.net/AS011x/article/details/126776855