在 Java Servlet 中,ServletRequest
和 ServletResponse
是两个重要的接口,分别代表客户端的请求和服务器的响应。通过它们可以获取到很多与请求和响应相关的信息,以下是详细介绍:
从 ServletRequest
中可以获取的信息
1. 请求的基本信息
- 请求方法 :获取客户端发送请求所使用的 HTTP 方法,如
GET
、POST
、PUT
、DELETE
等。
java
String method = request.getMethod();
- 请求的 URI:获取请求的统一资源标识符,包含请求的路径信息。
java
String uri = request.getRequestURI();
- 请求的 URL:获取完整的请求 URL,包括协议、主机名、端口号、请求路径等。
java
StringBuffer url = request.getRequestURL();
- 上下文路径:获取当前 Web 应用的上下文路径。
java
String contextPath = request.getContextPath();
2. 请求参数
- 单个参数值:通过参数名获取请求中传递的单个参数值。
java
String paramValue = request.getParameter("paramName");
- 多个参数值:如果一个参数有多个值(如复选框),可以获取参数值数组。
java
String[] paramValues = request.getParameterValues("paramName");
- 所有参数名:获取请求中所有参数的名称。
java
Enumeration<String> paramNames = request.getParameterNames();
while (paramNames.hasMoreElements()) {
String paramName = paramNames.nextElement();
// 处理参数名
}
3. 请求头信息
- 单个请求头值:通过请求头名称获取请求头的值。
java
String headerValue = request.getHeader("User-Agent");
- 所有请求头名称:获取请求中所有请求头的名称。
java
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
// 处理请求头名称
}
4. 请求的客户端信息
- 客户端 IP 地址:获取客户端的 IP 地址。
java
String clientIp = request.getRemoteAddr();
- 客户端端口号:获取客户端的端口号。
java
int clientPort = request.getRemotePort();
5. 请求的属性
- 在请求处理过程中,可以在
ServletRequest
中设置和获取属性,用于在不同的组件(如过滤器、Servlet、JSP)之间传递数据。
java
// 设置属性
request.setAttribute("attributeName", "attributeValue");
// 获取属性
Object attributeValue = request.getAttribute("attributeName");
6. 请求的输入流
- 如果请求体中包含二进制数据(如文件上传),可以通过输入流来读取请求体内容。
java
ServletInputStream inputStream = request.getInputStream();
从 ServletResponse
中可以设置和获取的信息
1. 响应状态码
- 设置响应的 HTTP 状态码,如 200 表示成功,404 表示未找到资源,500 表示服务器内部错误等。
java
response.setStatus(HttpServletResponse.SC_OK);
2. 响应头信息
- 设置单个响应头:通过响应头名称和值来设置响应头。
java
response.setHeader("Content-Type", "text/html; charset=UTF-8");
- 添加响应头 :如果需要添加多个相同名称的响应头,可以使用
addHeader
方法。
java
response.addHeader("Cache-Control", "no-cache");
3. 响应内容类型和字符编码
- 设置响应内容的 MIME 类型和字符编码。
java
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
4. 响应输出流
- 字符输出流:用于输出文本数据,如 HTML 页面、JSON 数据等。
java
PrintWriter out = response.getWriter();
out.println("<html><body>Hello, World!</body></html>");
- 二进制输出流:用于输出二进制数据,如图片、文件等。
java
ServletOutputStream outputStream = response.getOutputStream();
// 写入二进制数据
5. 重定向
- 将客户端重定向到另一个 URL。
java
response.sendRedirect("https://www.example.com");
综上所述,ServletRequest
和 ServletResponse
提供了丰富的方法来获取请求信息和设置响应信息,是 Servlet 编程中处理客户端请求和返回服务器响应的重要工具。
在 Java Servlet 里,HttpServletRequest
提供了对会话(HttpSession
)的操作方法。会话用于在多个请求之间跟踪用户状态,比如保存用户登录信息等。下面为你详细介绍在 request
里对会话的操作。
Resuqet
中的session
可以做什么
1. 获取会话对象
你可以通过 HttpServletRequest
的 getSession()
方法来获取会话对象,该方法有两个重载形式:
getSession(true)
或getSession()
若当前请求已经存在会话,就返回该会话;若不存在,就创建一个新的会话。
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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/example")
public class SessionExampleServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取会话,如果不存在则创建新会话
HttpSession session = request.getSession();
// 后续可以使用 session 对象进行操作
}
}
getSession(false)
若当前请求已经存在会话,就返回该会话;若不存在,就返回null
。
java
HttpSession session = request.getSession(false);
if (session != null) {
// 会话存在,进行相应操作
} else {
// 会话不存在,处理逻辑
}
2. 会话属性的操作
获取到会话对象之后,你能够对会话属性进行设置、获取和移除操作。
- 设置会话属性
使用setAttribute()
方法可以将会话属性名和属性值关联起来。
java
HttpSession session = request.getSession();
session.setAttribute("username", "john_doe");
- 获取会话属性
使用getAttribute()
方法依据属性名获取会话属性值。
java
HttpSession session = request.getSession();
String username = (String) session.getAttribute("username");
if (username != null) {
// 处理获取到的属性值
}
- 移除会话属性
使用removeAttribute()
方法可以依据属性名移除会话属性。
java
HttpSession session = request.getSession();
session.removeAttribute("username");
3. 会话的生命周期管理
- 获取会话的创建时间和最后访问时间
java
HttpSession session = request.getSession();
long creationTime = session.getCreationTime();
long lastAccessedTime = session.getLastAccessedTime();
- 设置会话的最大空闲时间
使用setMaxInactiveInterval()
方法可以设置会话的最大空闲时间(以秒为单位),超过这个时间会话会自动失效。
java
HttpSession session = request.getSession();
// 设置会话最大空闲时间为 30 分钟
session.setMaxInactiveInterval(30 * 60);
- 使会话立即失效
使用invalidate()
方法可以使会话立即失效。
java
HttpSession session = request.getSession();
session.invalidate();