【JavaEE】_HttpServletRequest类

目录

[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,在实际开发中,二者通常不做严格区分。

  1. 对于方法⑥ ⑦ ⑧,均是对query string的键和值的解析操作。

query string 本质上是键值对,一般都是要根据key获取value,很少把query string作为一个整体来使用,方法⑤ getQueryString获取到的是一长串键值对。

  1. 对于方法⑨ 和⑩,分别获取到的是HTTP请求头部分(header)的键值对的所有键,和根据key获取value;

  2. 对于方法 ⑪ ⑫ ⑬,都是对方法⑩:getHeader方法的简单封装,都可以通过getHeader实现。

由于CharacterEncoding,ContentType和ContentLength属性非常常用,故而单拎出来;

  1. 对于方法 ⑭,通过getInputStream可以获取到一个流对象,进一步读取该流对象,就可以得到整个请求的body;

在java中表示一个不定长的数据时,经常会使用流对象,从而实现非必须一次性处理完所有数据,并更好地兼容二进制;

  1. 以上方法均为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标签用法,请查看下文:

【JavaEE】_HTML常用标签-CSDN博客

使用postman向当前webapp发送一个get请求:

查看响应:

也可通过浏览器发送请求并获取响应:

可也在URL中指定query string,就可以从响应页面获取到query string了:

相关推荐
新手小袁_J23 分钟前
JDK11下载安装和配置超详细过程
java·spring cloud·jdk·maven·mybatis·jdk11
呆呆小雅24 分钟前
C#关键字volatile
java·redis·c#
Monly2124 分钟前
Java(若依):修改Tomcat的版本
java·开发语言·tomcat
Ttang2327 分钟前
Tomcat原理(6)——tomcat完整实现
java·tomcat
钱多多_qdd37 分钟前
spring cache源码解析(四)——从@EnableCaching开始来阅读源码
java·spring boot·spring
waicsdn_haha39 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
Q_19284999061 小时前
基于Spring Boot的摄影器材租赁回收系统
java·spring boot·后端
Code_流苏1 小时前
VSCode搭建Java开发环境 2024保姆级安装教程(Java环境搭建+VSCode安装+运行测试+背景图设置)
java·ide·vscode·搭建·java开发环境
禁默2 小时前
深入浅出:AWT的基本组件及其应用
java·开发语言·界面编程
Cachel wood2 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架