HttpServletRequest请求对象的产生
概念:
浏览器--->Http协议--->服务器--->Servlet处理
处理流程图:
当 Servlet 容器将响应信息返回给客户端后,HttpServletRequest 对象和 HttpServletReponse 对象被销毁
HttpServletRequest的主要作用:
获取请求信息
HttpServletRequest接口当中的方法
一个完整的Http请求包括:
-
请求行
-
请求消息头
-
请求体
什么是HttpServletRequest请求:
-
在 Servlet API 中,定义了一个 HttpServletRequest 接口,它继承自 ServletRequest 接口。
-
HttpServletRequest 对象专门用于封装 HTTP 请求消息,简称 request 对象。
接口当中的这些方法也是为了分别获取Http请求的结构部分的:
获取请求行
获取消息头
获取 form 表单的数据
获取请求行信息
一个完整的Http请求请求行包括:
请求方法、请求资源名、请求路径等信息
返回值类型 | 方法声明 | 描述 |
---|---|---|
String | getMethod() | 该方法用于获取 HTTP 请求方式(如 GET、POST 等)。 |
String | getRequestURI() | 该方法用于获取请求行中的资源名称部分,即位于 URL 的主机和端口之后,参数部分之前的部分。 |
String | getQueryString() | 该方法用于获取请求行中的参数部分,也就是 URL 中“?”以后的所有内容。 |
String | getContextPath() | 返回当前 Servlet 所在的应用的名字(上下文)。对于默认(ROOT)上下文中的 Servlet,此方法返回空字符串""。 |
String | getServletPath() | 该方法用于获取 Servlet 所映射的路径。 |
String | getRemoteAddr() | 该方法用于获取客户端的 IP 地址。 |
String | getRemoteHost() | 该方法用于获取客户端的完整主机名,如果无法解析出客户机的完整主机名,则该方法将会返回客户端的 IP 地址。 |
示例代码:
package com.example.HttpServletRequestDemo;
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.io.PrintWriter;
/**
* 这是一个模拟HttpServletRequest获取请求行
* @since JDK 1.8
* @date 2021/09/17
* @author Lucifer
*/
获取请求头
HttpServletRequest接口定义了一系列用于获取Http请求头字段的方法:
返回值类型 | 方法声明 | 描述 |
---|---|---|
String | getHeader(String name) | 该方法用于获取一个指定头字段的值。 如果请求消息中包含多个指定名称的头字段,则该方法返回其中第一个头字段的值。 |
Enumeration | getHeaders(String name) | 该方法返回指定头字段的所有值的枚举集合, 在多数情况下,一个头字段名在请求消息中只出现一次,但有时可能会出现多次。 |
Enumeration | getHeaderNames() | 该方法返回请求头中所有头字段的枚举集合。 |
String | getContentType() | 该方法用于获取 Content-Type 头字段的值。 |
int | getContentLength() | 该方法用于获取 Content-Length 头字段的值 。 |
String | getCharacterEncoding() | 该方法用于返回请求消息的字符集编码 。 |
示例代码:
package com.example.HttpServletRequestDemo;
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.io.PrintWriter;
import java.util.Enumeration;
/**
* 定义接收请求头方法的Servlet类,用于处理Http请求头当中的一些数据
* @since JDK 1.8
* @date 2021/09/17
* @author Lucifer
*/
获取form
表单的数据
对于Post请求,请求内容是放在Body当中的。为了方便获取表单中的请求参数,ServletRequest 定义了一系列获取请求参数的方法
方法示例:
返回值类型 | 方法声明 | 功能描述 |
---|---|---|
String | getParameter(String name) | 返回指定参数名的参数值。 |
String [ ] | getParameterValues (String name) | 以字符串数组的形式返回指定参数名的所有参数值(HTTP 请求中可以有多个相同参数名的参数)。 |
Enumeration | getParameterNames() | 以枚举集合的形式返回请求中所有参数名。 |
Map | getParameterMap() | 用于将请求中的所有参数名和参数值装入一个 Map 对象中返回。 |
示例代码:
form
表单
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>This is a Practice</title>
</head>
<body>
<form action="/HttpServletRequestDemo_war_exploded/RequestParam" method="post">
<table border="1" width="80%">
<tr>
<td colspan="2" align="center">练习使用</td>
</tr>
<tr>
<td>Name:</td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td>Sex:</td>
<td>
<input type="radio" name="sex" value="male" />Boy
<input type="radio" name="sex" value="female" />Girl
</td>
</tr>
<tr>
<td>Choose Language:</td>
<td>
<input type="checkbox" name="language" value="Java" />Java
<input type="checkbox" name="language" value="Go" />Go
<input type