`ServletRequest` 是 Java Servlet API 中的接口,用于提供对客户端发起的请求的访问。它代表一个客户端的请求,并包含了请求的信息,例如请求头、请求参数、请求体等。
以下是 `ServletRequest` 接口的一些主要属性和方法的解析:
属性:
1. 无特定属性:`ServletRequest` 接口并未定义任何属性,它主要通过方法提供对请求信息的访问。
方法:
1. `Object getAttribute(String name)`: 返回指定名称的请求属性。这些属性通常是由 `ServletRequest` 的不同实现(例如 `HttpServletRequest`)设置的,并用于在请求范围内共享数据。
2. `Enumeration
3. `String getCharacterEncoding()`: 返回请求体的字符编码。对于 `POST` 请求,如果请求体包含文本数据,则可以通过该方法获取字符编码。
4. `int getContentLength()`: 返回请求体的长度(以字节为单位)。适用于 `POST` 请求,用于确定请求体的大小。
5. `long getContentLengthLong()`: 类似于 `getContentLength()` 方法,但返回类型为 `long`,用于获取请求体的长度。
6. `String getContentType()`: 返回请求体的 MIME 类型。适用于 `POST` 请求,用于确定请求体中数据的类型。
7. `DispatcherType getDispatcherType()`: 返回请求调度类型。它表示请求是通过 `REQUEST`、`INCLUDE`、`FORWARD`、`ASYNC` 或 `ERROR` 调度的。
8. `ServletInputStream getInputStream() throws IOException`: 获取请求体的输入流。通过该流,可以读取请求体中的数据,例如处理上传文件等。
9. `String getLocalAddr()`: 返回服务器的 IP 地址,对于接收到的请求而言,就是服务器的 IP 地址。
10. `String getLocalName()`: 返回服务器的主机名,对于接收到的请求而言,就是服务器的主机名。
11. `int getLocalPort()`: 返回服务器的端口号,对于接收到的请求而言,就是服务器的端口号。
12. `Locale getLocale()`: 返回客户端的首选区域设置。通过此方法,可以了解客户端使用的语言和地区。
13. `Enumeration
14. `String getParameter(String name)`: 返回指定名称的请求参数的值。对于 `GET` 请求,请求参数通常是通过 URL 查询字符串传递的。
15. `Map
16. `Enumeration
17. `String[] getParameterValues(String name)`: 返回指定名称的请求参数的多个值。对于一个参数名称可能对应多个值的情况,可以使用此方法获取全部的值。
18. `String getProtocol()`: 返回请求使用的协议和版本,例如 "HTTP/1.1"。
19. `BufferedReader getReader() throws IOException`: 获取请求体的字符输入流。通过此流,可以读取请求体中的字符数据。
20. `String getRemoteAddr()`: 返回发送请求的客户端的 IP 地址。
21. `String getRemoteHost()`: 返回发送请求的客户端的主机名。
22. `int getRemotePort()`: 返回发送请求的客户端的端口号。
23. `RequestDispatcher getRequestDispatcher(String path)`: 返回用于在服务器内部转发请求和响应的 `RequestDispatcher` 对象。
24. `String getScheme()`: 返回用于请求的协议名称,例如 "http" 或 "https"。
25. `String getServerName()`: 返回接收到请求的服务器的主机名。
26. `int getServerPort()`: 返回接收到请求的服务器的端口号。
27. `ServletContext getServletContext()`: 返回与当前请求关联的 `ServletContext` 对象。
28. `boolean isAsyncStarted()`: 返回当前请求是否已经启动异步处理。
29. `boolean isAsyncSupported()`: 返回是否支持异步处理。
30. `boolean isSecure()`: 返回请求是否使用安全通道,例如通过 HTTPS 连接。
31. `void removeAttribute(String name)`: 从请求中移除指定名称的属性。
32. `void setAttribute(String name, Object o)`: 在请求中设置一个属性,以便在请求范围内共享数据。
33. `AsyncContext startAsync() throws IllegalStateException`: 启动异步处理。
34. `AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse) throws IllegalStateException`: 启动异步处理,并指定异步处理的请求和响应对象。
这些方法允许开发人员在 Java Web 应用程序中访问和处理客户端请求的各个方面,从而实现动态的、交互式的 Web 应用程序。需要注意的是,`ServletRequest` 接口的具体实现类是 `HttpServletRequest`。因此,实际开发中,通常会使用 `HttpServletRequest` 来访问更具体和更丰富的请求信息。