【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了:

相关推荐
所待.3837 分钟前
JavaEE之线程初阶(上)
java·java-ee
Winston Wood11 分钟前
Java线程池详解
java·线程池·多线程·性能
手握风云-16 分钟前
数据结构(Java版)第二期:包装类和泛型
java·开发语言·数据结构
喵叔哟35 分钟前
重构代码中引入外部方法和引入本地扩展的区别
java·开发语言·重构
尘浮生41 分钟前
Java项目实战II基于微信小程序的电影院买票选座系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
郑祎亦1 小时前
Spring Boot 项目 myblog 整理
spring boot·后端·java-ee·maven·mybatis
不是二师兄的八戒1 小时前
本地 PHP 和 Java 开发环境 Docker 化与配置开机自启
java·docker·php
爱编程的小生1 小时前
Easyexcel(2-文件读取)
java·excel
带多刺的玫瑰2 小时前
Leecode刷题C语言之统计不是特殊数字的数字数量
java·c语言·算法
计算机毕设指导62 小时前
基于 SpringBoot 的作业管理系统【附源码】
java·vue.js·spring boot·后端·mysql·spring·intellij-idea