Servlet中request、response、session 用法

在 Java Servlet 中,ServletRequestServletResponse 是两个重要的接口,分别代表客户端的请求和服务器的响应。通过它们可以获取到很多与请求和响应相关的信息,以下是详细介绍:

ServletRequest 中可以获取的信息

1. 请求的基本信息

  • 请求方法 :获取客户端发送请求所使用的 HTTP 方法,如 GETPOSTPUTDELETE 等。
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");

综上所述,ServletRequestServletResponse 提供了丰富的方法来获取请求信息和设置响应信息,是 Servlet 编程中处理客户端请求和返回服务器响应的重要工具。

在 Java Servlet 里,HttpServletRequest 提供了对会话(HttpSession)的操作方法。会话用于在多个请求之间跟踪用户状态,比如保存用户登录信息等。下面为你详细介绍在 request 里对会话的操作。

Resuqet中的session可以做什么

1. 获取会话对象

你可以通过 HttpServletRequestgetSession() 方法来获取会话对象,该方法有两个重载形式:

  • 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();
相关推荐
星星不打輰14 小时前
Servlet案例下载文件,图片验证码
servlet
magic 2452 天前
Servlet与HTTP协议实战解析
java·servlet·intellij-idea
magic 2452 天前
Servlet注解与使用模板方法设计模式优化oa项目
java·servlet·tomcat
magic 2452 天前
Servlet-http协议、模版方法设计模式、HttpServlet源码分析
java·servlet·tomcat·html·intellij-idea
遇见火星3 天前
自动化发布工具CI/CD实践Jenkins部署与配置教程
servlet·ci/cd·自动化·jenkins·自动化发布
珹洺4 天前
Java-servlet(九)前端会话,会话管理与Cookie和HttpSession全解析
android·java·服务器·开发语言·前端·数据库·servlet
无始无终9934 天前
Java 8 Stream API
java·spring boot·spring·servlet
述雾学java4 天前
Servlet、HttpServletRequest、HttpServletResponse、静态与动态网页、jsp、重定向与转发
java·开发语言·servlet·java基础
我最厉害。,。6 天前
-JavaEE 应用&Servlet 路由技术&JDBC&Mybatis 数据库&生命周期
servlet·java-ee·mybatis