目录
[1. 核心方法](#1. 核心方法)
[2. 简单方法使用实例](#2. 简单方法使用实例)
HttpServletRequest表示一个HTTP请求;
1. 核心方法
|----------------------------------------------|--------------------------------------------------------|
| 方法 | 描述 |
| ① String getProtocal() | 返回请求协议的名称和版本 |
| ② String getMethod() | 返回请求的HTTP方法的名称,如GET、POST或PUT |
| ③ String getRequestURI() | 从协议名称直到HTTP请求的第一行的查询字符串中,返回该请求的URL的一部分 |
| ④ String getContexPath() | 返回指示请求上下文的请求URI部分 (返回第一级路径) |
| ⑤ String getQueryString() | 返回包含在路径后的请求URL中的查询字符串(?后的参数) (返回键值对部分) |
| ⑥ Enumeration getParameterNames() | 返回一个String对象的枚举,包含在该请求中包含的参数的名称; (获取到所有的key) |
| ⑦String getParameter(String name) | 以字符串形式返回请求参数的值,或者如果参数不存在则返回null (根据key获取value) |
| ⑧ String[] getParameterValues(String name) | 返回一个字符串对象的数组,包含所有给定的请求参数的值, 如果参数不存在则返回null (一个key有多个值) |
| ⑨ Enumeration getHeaderNames() | 返回一个枚举,包含在该请求中包含的所有头名 |
| ⑩ String getHeader(String name) | 以字符串形式返回指定的请求头的值 |
| ⑪ String getCharacter Encoding() | 返回请求主题中使用的字符编码的名称 |
| ⑫ String getContentType() | 返回请求主题的MIME类型,如果不知道类型则返回null |
| ⑬ int getContentLength() | 以字节为单位返回请求主体的长度,并提供输入流,或者如果长度未知则返回-1 |
| ⑭InputStream getInputStream() | 用于读取请求的body内容,返回一个InputStream对象 |
注:1. 对于方法③ :getRequestURI方法请注意为URI而非URL,
URI:唯一资源标识符,类似于身份证号码;
URL:唯一资源定位符/地址符,类似于户口本地址;
因为URL与URI的核心词都是唯一,常会使用URL来作为URI,在实际开发中,二者通常不做严格区分。
- 对于方法⑥ ⑦ ⑧,均是对query string的键和值的解析操作。
query string 本质上是键值对,一般都是要根据key获取value,很少把query string作为一个整体来使用,方法⑤ getQueryString获取到的是一长串键值对。
-
对于方法⑨ 和⑩,分别获取到的是HTTP请求头部分(header)的键值对的所有键,和根据key获取value;
-
对于方法 ⑪ ⑫ ⑬,都是对方法⑩:getHeader方法的简单封装,都可以通过getHeader实现。
由于CharacterEncoding,ContentType和ContentLength属性非常常用,故而单拎出来;
- 对于方法 ⑭,通过getInputStream可以获取到一个流对象,进一步读取该流对象,就可以得到整个请求的body;
在java中表示一个不定长的数据时,经常会使用流对象,从而实现非必须一次性处理完所有数据,并更好地兼容二进制;
- 以上方法均为get系列方法,即用于读;没有set系列方法,即不能写;
因为当前获取到的HttpServletRequest的数据都是由客户端发来的,这些内容已经确定了,程序员不应该修改。
2. 简单方法使用实例
包括① ② ③ ④ ⑤ ⑨等方法
java
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;
import java.util.Enumeration;
@WebServlet("/Show")
public class ShowRequestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 调用API,把得到的结果构造成一个字符串,统一返回给客户端
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(req.getProtocol());
stringBuilder.append("<br>");
stringBuilder.append(req.getMethod());
stringBuilder.append("<br>");
stringBuilder.append(req.getRequestURI());
stringBuilder.append("<br>");
stringBuilder.append(req.getContextPath());
stringBuilder.append("<br>");
stringBuilder.append(req.getQueryString());
stringBuilder.append("<br>");
// header部分
Enumeration<String> headerNames = req.getHeaderNames();
while(headerNames.hasMoreElements()){
String key = headerNames.nextElement();
String value = req.getHeader(key);
stringBuilder.append(key+": "+ value+"<br>");
}
// 将以上内容整体返回给客户端
resp.setContentType("text/html; charset=utf8");
resp.getWriter().write(stringBuilder.toString());
}
}
注:1. 在html中,<br>标签用于实现换行功能,若需更多常用html标签用法,请查看下文:
使用postman向当前webapp发送一个get请求:
查看响应:
也可通过浏览器发送请求并获取响应:
可也在URL中指定query string,就可以从响应页面获取到query string了: