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();
相关推荐
wfsm1 天前
flowable使用01
java·前端·servlet
六件套是我2 天前
redission实现延时队列
android·java·servlet
非典型代码3 天前
Jenkins发不出邮件
运维·servlet·jenkins
佐杰3 天前
Jenkins安装部署
运维·servlet·jenkins
chxii4 天前
Spring Boot 中,内嵌的 Servlet 容器(也称为嵌入式 Web 服务器)
spring boot·servlet
BUG?不,是彩蛋!4 天前
Maven-Java 项目到底解决了什么痛点?
java·servlet·maven
CS Beginner8 天前
【搭建】个人博客网站的搭建
java·前端·学习·servlet·log4j·mybatis
一只小透明啊啊啊啊11 天前
Java Web 开发的核心组件:Servlet, JSP,Filter,Listener
java·前端·servlet
芙蓉王真的好111 天前
优化 Jenkins 构建脚本:避免 pnpm lockfile 相关报错的关键配置
spring·servlet·jenkins
要站在顶端11 天前
Jenkins Pipeline 多job依赖、触发多Job、并行执行及制品下载
运维·servlet·jenkins