HttpServletRequest
是 Java Servlet API 中的一个接口,表示 HTTP 请求对象。它封装了客户端(如浏览器)发送到服务器的请求信息,并提供了访问这些信息的方法。
1. 基本概念
- 作用 :
HttpServletRequest
提供了一种机制,用于在服务器端处理客户端发起的 HTTP 请求。 - 来源 :
当客户端(例如浏览器)向服务器发送一个 HTTP 请求时,Servlet 容器(如 Tomcat)会将该请求封装为一个HttpServletRequest
对象,并将其传递给 Servlet 的service()
或doGet()
/doPost()
方法。 - 生命周期 :
HttpServletRequest
对象的作用范围仅限于当前请求的生命周期。一旦请求完成,该对象会被销毁。
2. 核心功能
HttpServletRequest
提供了许多方法来获取请求中的信息。以下是常用的功能分类:
(1) 获取请求行信息
getMethod()
:返回请求的 HTTP 方法(如GET
、POST
等)。getRequestURI()
:返回请求的 URI(统一资源标识符)。getQueryString()
:返回请求的查询字符串(即 URL 中?
后面的部分)。getProtocol()
:返回请求使用的协议(如HTTP/1.1
)。
(2) 获取请求头信息
getHeader(String name)
:根据指定的头名称获取对应的值。getHeaders(String name)
:返回指定头名称的所有值(多值头)。getHeaderNames()
:返回所有头名称的枚举集合。
(3) 获取请求参数
getParameter(String name)
:根据参数名获取单个参数值(适用于表单提交或查询字符串)。getParameterValues(String name)
:获取指定参数名的所有值(适用于多选框等场景)。getParameterMap()
:返回所有参数的键值对映射(Map<String, String[]>
)。
(4) 获取客户端信息
getRemoteAddr()
:返回客户端的 IP 地址。getRemoteHost()
:返回客户端的主机名。getRemotePort()
:返回客户端的端口号。
(5) 获取会话信息
getSession()
:返回与当前请求关联的会话(HttpSession
对象)。如果会话不存在,则创建一个新的会话。getSession(boolean create)
:如果create
为true
,则创建新会话;否则返回现有会话(如果存在)。
(6) 处理输入流
getInputStream()
:获取请求体的输入流(适用于文件上传或二进制数据)。getReader()
:以字符流的方式读取请求体。
3. 示例代码
以下是一个简单的示例,展示如何使用 HttpServletRequest
来处理请求:
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;
@WebServlet("/example")
public class ExampleServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取请求方法
String method = request.getMethod();
System.out.println("Request Method: " + method);
// 获取请求 URI
String uri = request.getRequestURI();
System.out.println("Request URI: " + uri);
// 获取查询参数
String param = request.getParameter("name");
System.out.println("Query Parameter 'name': " + param);
// 获取客户端 IP 地址
String clientIP = request.getRemoteAddr();
System.out.println("Client IP Address: " + clientIP);
// 设置响应内容
response.setContentType("text/plain");
response.getWriter().write("Hello, " + (param != null ? param : "World"));
}
}
4. 工作原理
- 客户端发送请求 :
- 浏览器通过 HTTP 协议向服务器发送请求,包括请求行、请求头和请求体。
- Servlet 容器解析请求 :
- Servlet 容器(如 Tomcat)解析 HTTP 请求,并将其封装为
HttpServletRequest
对象。
- Servlet 容器(如 Tomcat)解析 HTTP 请求,并将其封装为
- Servlet 处理请求 :
- 开发者通过
HttpServletRequest
接口提供的方法访问请求数据,并生成响应。
- 开发者通过
- 响应返回客户端 :
- Servlet 使用
HttpServletResponse
对象构造响应,并将其返回给客户端。
- Servlet 使用
5. 注意事项
- 线程安全性 :
HttpServletRequest
对象是每个请求独享的,因此它是线程安全的。
- 作用范围 :
HttpServletRequest
的作用范围仅限于当前请求。不要尝试在其他线程中使用它。
- 编码问题 :
- 如果请求包含非 ASCII 字符(如中文),可能需要设置字符编码(如
request.setCharacterEncoding("UTF-8")
)。
- 如果请求包含非 ASCII 字符(如中文),可能需要设置字符编码(如
6. 总结
HttpServletRequest
是 Java Web 开发中处理 HTTP 请求的核心接口之一。它提供了丰富的功能,帮助开发者轻松获取请求中的各种信息,如请求方法、参数、头信息、客户端 IP 等。结合 HttpServletResponse
,可以实现完整的请求-响应流程。