Table of Contents
原理
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请求,获取请求参数的方式不一样,下面就介绍一种异样的方式
本文介绍了Request对象在处理HTTP请求时的角色,包括原理、继承结构、数据格式和获取请求数据的方法。详细讲解了如何获取请求行数据如请求方式、虚拟目录、Servlet路径等,并演示了通过Postman进行GET和POST请求时,如何获取请求头和请求体的数据。





2849

被折叠的 条评论
为什么被折叠?



