目录
1. 核心方法
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,在实际开发中,二者通常不做严格区分。
2. 对于方法⑥ ⑦ ⑧,均是对query string的键和值的解析操作。
query string 本质上是键值对,一般都是要根据key获取value,很少把query string作为一个整体来使用,方法⑤ getQueryString获取到的是一长串键值对。
3. 对于方法⑨ 和⑩,分别获取到的是HTTP请求头部分(header)的键值对的所有键,和根据key获取value;
4. 对于方法 ⑪ ⑫ ⑬,都是对方法⑩:getHeader方法的简单封装,都可以通过getHeader实现。
由于CharacterEncoding,ContentType和ContentLength属性非常常用,故而单拎出来;
5. 对于方法 ⑭,通过getInputStream可以获取到一个流对象,进一步读取该流对象,就可以得到整个请求的body;
在java中表示一个不定长的数据时,经常会使用流对象,从而实现非必须一次性处理完所有数据,并更好地兼容二进制;
6. 以上方法均为get系列方法,即用于读;没有set系列方法,即不能写;
因为当前获取到的HttpServletRequest的数据都是由客户端发来的,这些内容已经确定了,程序员不应该修改。
2. 简单方法使用实例
包括① ② ③ ④ ⑤ ⑨等方法
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 {@Overrideprotected 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标签用法,请查看下文:
【JavaEE】_HTML常用标签-CSDN博客
使用postman向当前webapp发送一个get请求:
查看响应:
也可通过浏览器发送请求并获取响应:
可也在URL中指定query string,就可以从响应页面获取到query string了: