简单介绍
首先我们先了解一下客户端与服务端之间信息如何传递:
从上图,我们可以看到:
- 客户端发送请求,而请求是以HTTP请求数据格式进行发送,因而Servlet就创建了一个Request类来封装这些接收数据
- 服务端给出响应,而响应是以HTTP响应数据格式进行发送,因而Servlet就创建了一个Response类来封装这些返回数据
简单来说:
- Request对象:获得请求数据
- Response对象:设置响应数据
Request介绍
我们在介绍Request之前,应当先了解一下Request的继承体系:
我们可以看到HttpServletRequest是基于ServletRequest接口创建的针对Http协议的请求对象接口
我们在使用Request对象时,也常常使用HttpServletRequest接口
Request获得请求数据
Request对象被创建的主要目的就是获得请求数据
我们将根据HTTP请求数据对象的三种格式分开介绍获得请求数据方法
- 请求行:
请求行格式:
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 |
- 请求头:
请求头格式:
User-Agent: Mozilla/5.0 Chrome/91.0.4472.106
请求头获得代码:
函数 | 解释 |
---|---|
String getHeader(String name) | 根据请求头名称,获得值 |
- 请求体:
请求体格式:
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. 获取字符输入流