Request获取请求数据实例

本文介绍了Request对象在处理HTTP请求时的角色,包括原理、继承结构、数据格式和获取请求数据的方法。详细讲解了如何获取请求行数据如请求方式、虚拟目录、Servlet路径等,并演示了通过Postman进行GET和POST请求时,如何获取请求头和请求体的数据。

Table of Contents

原理

继承体系

数据格式

获取请求数据

获取请求行数据

获取请求头数据

Post方式获取请求体


 

原理

Request是tomcat创建的对象,请求过来的时候,tomcat创建Request封装请求,实际上是RequestFacade

继承体系

HttpServletRequest接口继承ServletRequest接口,

 RequestFacade实现了HttpServletRequest

数据格式

  • 请求行
  • 请求头
  • 请求空行
  • 请求体

获取请求数据

获取请求行数据

  • 获取请求方式:String getMethod()
  • 获取虚拟目录:String getContextPath()
  • 获取Servlet路径:String getServletPath()
  • 获取get方式请求参数:String getQueryString()
  • 获取请求URI:String getRequestURI()
  • 获取请求URL:StringBuffer getRequestURL()
  • 获取协议版本:String getProtocol()
  • 获取客户机的IP地址:String getRemoteAddr()
package com.lingaolu.request;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;

/**
 * @author 林高禄
 * @create 2020-07-07-10:52
 */
@WebServlet("/requestDemo1")
public class RequestDemo1 extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("请求方式: "+request.getMethod());
        System.out.println("虚拟目录: "+request.getContextPath());
        System.out.println("Servlet路径: "+request.getServletPath());
        System.out.println("get方式请求参数: "+request.getQueryString());
        System.out.println("请求URI: "+request.getRequestURI());
        System.out.println("请求URL: "+request.getRequestURL().toString());
        System.out.println("协议及版本:"+request.getProtocol());
        System.out.println("客户机的IP地址: "+request.getRemoteAddr());

    }
}

Postman请求访问

 

后台输出

请求方式: GET
虚拟目录: /myRequest
Servlet路径: /requestDemo1
get方式请求参数: name=lin&age=23
请求URI: /myRequest/requestDemo1
请求URL: http://localhost:8080/myRequest/requestDemo1
协议及版本:HTTP/1.1
客户机的IP地址: 0:0:0:0:0:0:0:1

获取请求头数据

  • Enumeration<String> getHeaderNames():获取所有的请求头名称
  • String getHeader(String var1):通过请求头的名称获取请求头的值
package com.lingaolu.request;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.Enumeration;

/**
 * @author 林高禄
 * @create 2020-07-07-10:52
 */
@WebServlet("/requestDemo2")
public class RequestDemo2 extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Enumeration<String> headerNames = request.getHeaderNames();
        while(headerNames.hasMoreElements()){
            String name = headerNames.nextElement();
            String header = request.getHeader(name);
            System.out.println(name+" :"+header);
        }

    }
}

通过Postman请求

后台输出

cache-control :no-cache
postman-token :95bc6857-e84c-4073-86bb-9a8e5dedd6a2
user-agent :PostmanRuntime/7.6.0
accept :*/*
host :localhost:8080
accept-encoding :gzip, deflate
connection :keep-aliv

Post方式获取请求体

  • BufferedReader getReader():获取字符输入流,只能操作字符数据
  • ServletInputStream getInputStream():获取字节输入流,可以操作所有类型选数据
package com.lingaolu.request;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.BufferedReader;
import java.io.IOException;

/**
 * @author 林高禄
 * @create 2020-07-07-10:52
 */
@WebServlet("/requestDemo1")
public class RequestDemo1 extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        BufferedReader reader = request.getReader();
        String line = null;
        while((line = reader.readLine())!= null){
            System.out.println(line);
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("请求方式: "+request.getMethod());
        System.out.println("虚拟目录: "+request.getContextPath());
        System.out.println("Servlet路径: "+request.getServletPath());
        System.out.println("get方式请求参数: "+request.getQueryString());
        System.out.println("请求URI: "+request.getRequestURI());
        System.out.println("请求URL: "+request.getRequestURL().toString());
        System.out.println("协议及版本:"+request.getProtocol());
        System.out.println("客户机的IP地址: "+request.getRemoteAddr());

    }
}

用Postman请求

后台输出:

name=lin&age=27

可见,get请求和post请求,获取请求参数的方式不一样,下面就介绍一种异样的方式

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林高禄

你打不打赏,我都会一直写博客

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值