Servlet Session基本概念和使用方法

简介: Session是Web开发中的一种机制,用于在服务器端跟踪和管理用户的状态信息。它允许服务器在用户访问网站期间存储和检索与特定用户相关的数据。当用户访问服务器时,服务器会为每个用户创建一个唯一的会话,并为该会话分配一个唯一的会话标识符(Session ID)。这个会话标识符通常通过Cookie在客户端保存,但也可以通过URL参数或其他方式传递。通过会话标识符,服务器能够识别特定用户的请求,并在会话中存储和检索数据。通过使用Session,服务器可以在用户的整个访问过程中保持用户状态,并且可以在不同的页面和请求之间共享数据。这对于实现用户认证、数据共享、购物车管理等功能非常有用。需要注意的

Session介绍

Session是Web开发中的一种机制,用于在服务器端跟踪和管理用户的状态信息。它允许服务器在用户访问网站期间存储和检索与特定用户相关的数据。

当用户访问服务器时,服务器会为每个用户创建一个唯一的会话,并为该会话分配一个唯一的会话标识符(Session ID)。这个会话标识符通常通过Cookie在客户端保存,但也可以通过URL参数或其他方式传递。通过会话标识符,服务器能够识别特定用户的请求,并在会话中存储和检索数据。

通过使用Session,服务器可以在用户的整个访问过程中保持用户状态,并且可以在不同的页面和请求之间共享数据。这对于实现用户认证、数据共享、购物车管理等功能非常有用。

需要注意的是,Session数据存储在服务器端的内存或其他持久化存储中,因此会对服务器的资源消耗和性能产生影响。

Session使用步骤

  1. 获取Session对象: 在Servlet中,可以使用HttpServletRequest对象的getSession()方法来获取当前请求的Session对象。如果Session不存在,该方法将创建一个新的Session。
HttpSession session = request.getSession();
  1. 存储数据: 可以使用Session对象的setAttribute()方法将数据存储在Session中。这个方法接受两个参数,第一个参数是数据的名称(键),第二个参数是要存储的数据(值)。
session.setAttribute("username", "John");
  1. 获取数据: 可以使用Session对象的getAttribute()方法来获取Session中存储的数据。该方法接受一个参数,即要获取的数据的名称(键),并返回相应的值。
String username = (String) session.getAttribute("username");
  1. 删除数据: 可以使用Session对象的removeAttribute()方法来从Session中删除特定的数据。
session.removeAttribute("username");
  1. 设置Session过期时间: 可以通过setMaxInactiveInterval()方法设置Session的过期时间(以秒为单位)。如果在指定的时间内没有对Session进行访问,Session将过期并被销毁。
session.setMaxInactiveInterval(1800); // 设置为30分钟
  1. 销毁Session: 可以使用Session对象的invalidate()方法手动销毁Session,并释放所有与Session相关的资源。
session.invalidate();

这些是使用Servlet Session的基本方法。通过存储和获取Session数据,可以在不同的HTTP请求之间传递和共享用户信息。请注意,Servlet Session是在服务器端存储数据的,客户端只会收到一个Session ID,而不会直接访问Session数据。

Session示例

演示了如何存储和获取用户的登录状态

LoginServlet

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/login")
    public class LoginServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            // 检查用户名和密码是否有效(在此处添加验证逻辑)
            if (isValidUser(username, password)) {
                // 创建Cookie对象
                Cookie userCookie = new Cookie("username", username);
                // 设置Cookie的生命周期(这里设置为1小时)
                userCookie.setMaxAge(60);
                // 将Cookie添加到响应中
                response.addCookie(userCookie);
                Cookie[] cookies = request.getCookies();
                response.setContentType("text/html");
                PrintWriter out = response.getWriter();
                out.println("<html>");
                out.println("<body>");
                out.println("<h3>欢迎, " + username + "!</h3>");
                out.println("</body>");
                out.println("</html>");
            } else {
                response.setContentType("text/html");
                PrintWriter out = response.getWriter();
                out.println("<html>");
                out.println("<body>");
                out.println("<h3>登录失败,请检查用户名和密码。</h3>");
                out.println("</body>");
                out.println("</html>");
            }
            if ("A".equals(username) && "123".equals(password)) {
                HttpSession session = request.getSession();
                session.setAttribute("username", username);
                // 重定向到登录成功页面
                response.sendRedirect("success.jsp");
            } else {
                // 重定向到登录失败页面
                response.sendRedirect("failure.jsp");
            }
        }
        // 获取所有的Cookie
        private boolean isValidUser(String username, String password) {
            // 在此处进行用户名和密码的验证,可以连接数据库或使用硬编码的方式进行验证
            // 返回true表示验证通过,返回false表示验证失败
            // 这里只是一个示例,实际应用中应该使用更安全的验证方式
            return "A".equals(username) && "123".equals(password);
        }
    }

success.jsp

<!DOCTYPE html>
<html>
  <head>
    <title>Login Success</title>
  </head>
  <body>
    <h1>Welcome, <%= session.getAttribute("username") %>!</h1>
    <p>登录成功页面</p>
  </body>
</html>

failure.jsp

<!DOCTYPE html>
<html>
<head>
    <title>Login Failure</title>
</head>
<body>
<h1>Login Failed</h1>
<p>登录失败页面</p>
</body>
</html>
目录
相关文章
|
26天前
|
缓存 Java Spring
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
文章比较了在Servlet和Spring Boot中获取Cookie、Session和Header的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。
103 3
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
|
5月前
|
存储 前端开发 小程序
表白墙完善(数据库,前端,后端Servlet),再谈Cookie和Session。以及一个关于Cookie的练习小程序
表白墙完善(数据库,前端,后端Servlet),再谈Cookie和Session。以及一个关于Cookie的练习小程序
|
2月前
|
存储 安全 搜索推荐
探索研究Servlet Session 跟踪
【9月更文挑战第27天】
16 0
|
6月前
|
应用服务中间件
Servlet 教程 之 Servlet Session 跟踪 4
Servlet教程讲解了如何进行Session跟踪,HTTP协议本身无状态,但可通过以下方式维持会话:删除特定属性、整个Session或设定超时时间(使用setMaxInactiveInterval())。此外,可使用logout注销用户,或在web.xml配置全局超时。在Servlet中,getMaxInactiveInterval()返回Session超时(以秒计),例如,web.xml设为15分钟,则返回900。
35 0
|
XML 开发框架 Java
Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)
Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)
|
存储 设计模式 JavaScript
掌握JavaWeb开发的必备技能:Servlet、JSP、Cookie、Session、EL、JSTL详解 ~~~~B站老杜--Servlet-JSP-课堂笔记(三)
当某个特殊的事件发生(特殊的事件发生其实就是某个时机到了。)之后,被web服务器自动调用。 思考一个业务场景
78 0
|
缓存 前端开发 Java
掌握JavaWeb开发的必备技能:Servlet、JSP、Cookie、Session、EL、JSTL详解 ~~~~B站老杜--Servlet-JSP-课堂笔记(二)
我们只需要service方法,其他方法大部分情况下是不需要使用的。代码很丑陋。 适配器设计模式Adapter
65 0
|
前端开发 Java 应用服务中间件
掌握JavaWeb开发的必备技能:Servlet、JSP、Cookie、Session、EL、JSTL详解 ~~~~B站老杜--Servlet-JSP-课堂笔记(一)
对于一个动态的web应用来说,一个请求和响应的过程有多少个角色参与,角色和角色之间有多少个协议
77 0
|
XML 监控 Java
Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)4
Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)4
|
存储 安全 Java
Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)3
Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)3