Java Web Request

Request 对象的作用是与客户端交互,接收客户端发送的信息。

一、Request 是什么?

1. 工作流程

Java Servlet - 执行流程

2. Request 对象

当客户端向服务器端发送请求时,服务器为本次请求创建 Request 对象,并传递给 Servlet。

Request 对象中封装着请求信息。

二、常用方法

1. 获取请求行信息

方法 描述
String getMethod() 获取 HTTP 请求方式
String getContextPath() 获取项目路径
String getServletPath() 获取 Servlet 路径
String getRequestURI() 获取 URI 路径
String getRequestURL() 获取 URL 路径
String getQueryString() 获取 GET 方法的请求参数
String getProtocol() 获取协议名称及版本
String getRemoteAddr() 获取客户端的 IP 地址

假设请求行:

1
GET /Project/demo1?name=zhangsan HTTP/1.1

则应用各个方法的结果为:

1
2
3
4
5
6
7
8
getMethod()       --  GET
getContextPath() -- /Project
getServletPath() -- /demo1
getRequestURI() -- /Project/demo1
getRequestURL() -- http://localhost/Project/demo1
getQueryString() -- name=zhangsan
getProtocol() -- HTTP/1.1
getRemoteAddr() -- 客户端的IP地址

2. 获取请求头信息

方法 描述
String getHeader(String name) 获取请求头名称对应的参数值
Enumeration getHeaderNames() 获取包含所有请求头名称的枚举

3. 获取请求体信息

只有 POST 方法,才有请求体,并且以流的方式封装

获取步骤:

  • 获取流对象
    • BufferedReader getReader():获取字符输入流
    • ServletInputStream getInputStream():获取字节输入流
  • 从流中拿取数据

4. 编码方式

方法 说明
String getCharacterEncoding() 获取请求主体的编码方式
void setCharacterEncoding(String type) 设置请求主体的编码方式

5. 获取参数的通用方法

Java 对上述方法进行了封装,提供了适用于多种请求方式的参数获取方法

方法 说明
String getParameter(String name) 获取参数名称对应的参数值
String[] getParameterValues(String name) 获取参数名称对应的参数值数组
Enumeration getParameterNames() 获取包含所有参数名称的枚举
Map getParameterMap() 获取包含所有参数的 Map 集合

6. BeanUtils

BeanUtils 可以用于简化获取请求参数的操作,它可以将包含请求参数的 map 集合中的数据存储进对象之中。

1
BeanUtils.populate(对象, map);
1
2
3
4
5
6
7
8
// 1. 获取所有请求参数
Map<String, String[]> map = request.getParameterMap();

// 2. 创建实例对象,以User对象为例
User user = new User()

// 3. 使用BeanUtils封装
BeanUtils.populate(user, map);

三、请求转发

Java 请求转发与重定向

参考