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

相关推荐
打码人的日常分享3 分钟前
企业人力资源管理,人事档案管理,绩效考核,五险一金,招聘培训,薪酬管理一体化管理系统(源码)
java·数据库·python·需求分析·规格说明书
27669582923 分钟前
京东e卡滑块 分析
java·javascript·python·node.js·go·滑块·京东
爱写代码的刚子5 分钟前
C++知识总结
java·开发语言·c++
冷琴199613 分钟前
基于java+springboot的酒店预定网站、酒店客房管理系统
java·开发语言·spring boot
daiyang123...39 分钟前
IT 行业的就业情况
java
爬山算法1 小时前
Maven(6)如何使用Maven进行项目构建?
java·maven
.生产的驴1 小时前
Electron Vue框架环境搭建 Vue3环境搭建
java·前端·vue.js·spring boot·后端·electron·ecmascript
爱学的小涛1 小时前
【NIO基础】基于 NIO 中的组件实现对文件的操作(文件编程),FileChannel 详解
java·开发语言·笔记·后端·nio
吹老师个人app编程教学1 小时前
详解Java中的BIO、NIO、AIO
java·开发语言·nio
爱学的小涛1 小时前
【NIO基础】NIO(非阻塞 I/O)和 IO(传统 I/O)的区别,以及 NIO 的三大组件详解
java·开发语言·笔记·后端·nio