9.17JavaWeb之HttpServletRequest接口
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 
                    
                     
                    
                 
                    
                