Java Web
9 Request&Response
文章目录
- Java Web
- 9 Request&Response
- 9.2 Request 对象
- 9.2.2 Request 获取请求数据
9.2 Request 对象
9.2.2 Request 获取请求数据
HTTP请求数据总共分为三部分内容,分别是请求行、请求头、请求体
【获取请求行数据】
请求行包含三块内容,分别是请求方式、请求资源路径、HTTP协议及版本
对于这三部分内容,request对象都提供了对应的API方法来获取
- 获取请求方式 【GET】
String getMethod()
- 获取虚拟目录(项目访问路径) 【/request-demo】
String getContextPath()
- 获取URL(统一资源定位符): 【 http://localhost:8080/request-demo/req1】
StringBuffer getRequestURL()
- 获取URI(统一资源标识符) 【/request-demo/req1】
String getRequestURI()
- 获取请求参数(GET方式): 【username=zhangsan&password=123】
String getQueryString()
[举个栗子]
package com.dingjiaxing.web;
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.IOException;
/**
* ClassName: RequestDemo1
* date: 2022/9/12 9:28
*
* @author DingJiaxiong
*/
@WebServlet("/req1")
public class RequestDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求方式
String method = req.getMethod();
System.out.println(method);
//获取虚拟目录(项目访问路径)
String contextPath = req.getContextPath();
System.out.println(contextPath);
//获取URL(统一资源定位符)
StringBuffer url = req.getRequestURL();
System.out.println(url.toString());
//获取URI(统一资源标识符)
String uri = req.getRequestURI();
System.out.println(uri);
//获取请求参数
String queryString = req.getQueryString();
System.out.println(queryString);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
启动服务
测试接口
【获取请求头数据】
对于请求头的数据,格式为key: value
根据请求头名称获取对应值的方法为
String getHeader(String name)
[举个栗子]
package com.dingjiaxing.web;
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.IOException;
/**
* ClassName: RequestDemo1
* date: 2022/9/12 9:28
*
* @author DingJiaxiong
*/
@WebServlet("/req1")
public class RequestDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求头:user-agent:浏览器的版本信息
String agent = req.getHeader("user-agent");
System.out.println(agent);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
【获取请求体数据】
浏览器在发送GET请求的时候是没有请求体的,所以需要把请求方式变更为POST,
请求体中的数据格
对于请求体中的数据,Request对象提供了如下两种方式来获取其中的数据
分别是:
- 获取字节输入流,如果前端发送的是字节数据,比如传递的是文件数据,则使用该方法
ServletInputStream getInputStream()
该方法可以获取字节
- 获取字符输入流,如果前端发送的是纯文本数据,则使用该方法
BufferedReader getReader()
[举个栗子]【当然其实也可以直接使用接口测试工具】
- 准备一个页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>获取请求体数据</title>
</head>
<body>
<!--
action: form 表单提交的请求地址
method:请求方式,指定为post
-->
<form action="/tomcat-demo/req1" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit">
</form>
</body>
</html>
- 在Servlet的doPost方法中获取数据
调用getReader()或者getInputStream()方法,因为目前前端传递的是纯文本数据,所以采用getReader()方法来获取
package com.dingjiaxing.web;
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;
/**
* ClassName: RequestDemo1
* date: 2022/9/12 9:28
*
* @author DingJiaxiong
*/
@WebServlet("/req1")
public class RequestDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
BufferedReader bufferedReader = req.getReader();
//读取数据
String line = bufferedReader.readLine();
System.out.println(line);
}
}
- 启动服务测试
注意:
BufferedReader流是通过request对象来获取的,当请求完成后request对象就会被销毁,
request对象被销毁后,BufferedReader流就会自动关闭,所以此处就不需要手动关闭流了。
【小结】
HTTP请求数据中包含了请求行、请求头和请求体,
针对这三部分内容,Request对象都提供了对应的API方法来获取对应的值:
- 请求行
- getMethod()获取请求方式
- getContextPath()获取项目访问路径
- getRequestURL()获取请求URL
- getRequestURI()获取请求URI
- getQueryString()获取GET请求方式的请求参数
- 请求头
- getHeader(String name)根据请求头名称获取其对应的值
- 请求体
- 注意: 浏览器发送的POST请求才有请求体
- 如果是纯文本数据:getReader()
- 如果是字节数据如文件数据:getInputStream()