| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> Java知识库 -> 如何在 Java Web 应用程序中使用 Session -> 正文阅读 |
|
|
[Java知识库]如何在 Java Web 应用程序中使用 Session |
|
在本 Java Web 教程中,您将通过有用的代码示例了解 Java Web 应用程序开发中的会话管理。让我们开始定义会话。 表中的内容: 1. 什么是会话? ? 1. 什么是会话?就万维网而言,会话表示单个用户访问网站的时间段。当用户请求第一页时,会话开始。在会话期间,用户可以查看任意数量的页面。如果用户在给定的时间内(超时)没有请求任何页面,则会话结束。会话超时因服务器配置而异——通常为 15 到 30 分钟。 由于 HTTP 协议是无状态的,服务器可以通过 cookie、URL 重写或隐藏表单字段跟踪会话——以跨不同请求识别单个用户。使用 cookie 的会话跟踪是主要机制。如果用户的 Web 浏览器不支持 cookie,则可以使用 URL 重写或隐藏表单字段。 在 Web 开发中,程序员使用会话机制来管理仅在特定会话中持续存在的用户信息,例如身份验证状态、用户名或需要跨请求共享的任何数据。
|
|
1
2
3
4
5
6
|
protected void doGet(HttpServletRequest request, HttpServletResponse response)
????????throws ServletException, IOException {
????HttpSession session = request.getSession();
?????
????// work with the session...
}
|
请注意HttpServletRequest。getSession()方法返回与请求关联的当前会话,如果请求没有会话,则创建一个新会话。这意味着返回的HttpSession对象始终不为空。
要获取会话而不创建新会话(如果不存在),您可以在HttpServletRequest上使用调用getSession(false):
|
1
2
3
4
5
6
7
|
HttpSession session = request.getSession(false);
if (session !=?null) {
????// a session exists
?????
}?else {
????// no session
}
|
在这种情况下,如果不存在会话,则返回值可以为 null - 因此需要 if-else 检查可空性。这也意味着getSession()等同于getSession(true)。
供您参考,以下 Java Servlet 打印当前会话的会话 ID、创建时间和上次访问时间:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package net.codejava;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
@WebServlet("/test_session")
public class TestSessionServlet?extends HttpServlet {
????private static final long serialVersionUID = 1L;
????public TestSessionServlet() {
????????super();
????}
????protected void doGet(HttpServletRequest request, HttpServletResponse response)
????????????throws ServletException, IOException {
?????????
????????HttpSession session = request.getSession();
?????????
????????PrintWriter writer = response.getWriter();
????????writer.println("Session ID: " + session.getId());
????????writer.println("Creation Time: " +?new Date(session.getCreationTime()));
????????writer. println("Last Accessed Time: " +?new Date(session.getLastAccessedTime()));
????}
}
|
您可以运行此 servlet 进行测试。结果将如下所示:

?
在会话中存储值:
要在会话中存储值,请使用HttpSession对象的setAttribute(key, value)方法。例如,以下语句存储用户的用户名:
|
1
|
session.setAttribute("username",?"Daniel Tran");
|
这里,键是用户名,值是Daniel Tran。会话中存储的数据由服务器管理,会话结束时将被删除。
您可以在会话中存储任何类型的对象。例如,以下代码在会话中存储一个学生对象列表:
|
1
2
|
List<Student> students = studentDao.getStudents();
session.setAttribute("listStudent", students);
|
?
笔记:
每个用户都与不同的HttpSession对象相关联,因此为用户 #1 存储的值与为用户 #2 存储的值不同 - 尽管密钥相同。
如果键已经与一个值相关联,那么旧值将被新值替换。因此,您可以使用setAttribute()方法来更新会话中的值。
?
要从会话中获取值,请使用HttpSession对象的getAttribute(key)方法。例如,以下代码从会话中获取用户名属性的值:
|
1
|
String username = (String) session.getAttribute("username");
|
我们需要转换为String类型,因为getAttribute()方法总是返回Object类型的值。
以下语句从会话中读取List集合:
|
1
|
List<Student> listStudents = (List<Student>) session.getAttribute("listStudent");
|
请注意,如果在会话中找不到给定的键,?getAttribute(key)方法将返回空值。
?
在 JSP 中,要读取和显示存储在会话中的属性值,只需使用 EL(表达式语言),如下所示:
|
1
2
3
4
5
6
|
<%@ page language="java" %>
<html>
<body>???
????<p>Username: ${username}</p>
</body>
</html>
|
在这里,JSP 处理器将在可能的范围(包括会话)中找到属性用户名。?或者您可以在表达式中明确指定会话范围:
|
1
|
<p>Username: ${sessionScope['username']}</p>
|
?
要从会话中删除与键关联的值,请使用removeAttribute(key)方法。例如:
|
1
|
session.removeAttribute("username");
|
此语句删除与属性用户名关联的值。
如果用户在给定的时间内空闲(没有发出任何请求),他的会话就会过期——这意味着绑定到他的会话的所有数据都将从服务器中删除——会话被销毁。每个服务器都有不同的全局会话超时默认值,例如 Apache Tomcat 中的 30 分钟。
您可以通过修改其 Web 部署描述符文件 ( web.xml?)为单个 Web 应用程序设置会话超时。例如:
|
1
2
3
4
5
6
7
8
|
<?xml version="1.0" encoding="UTF-8"?>
<web-app...>
???
??<session-config>
????<session-timeout>15</session-timeout>
??</session-config>
???
</web-app>
|
这会覆盖服务器设置的全局会话超时,并将会话超时设置为 15 分钟。
您可以像这样以编程方式为单个会话设置超时值:
|
1
|
session.setMaxInactiveInterval(300);
|
这会将当前会话的超时设置为 300 秒。
阅读这篇文章,了解有关在 Java 中设置会话超时的更多详细信息。
默认情况下,只有在用户空闲一段时间后才会销毁会话。如果您想立即销毁单个会话,请像这样调用invalidate()方法:
|
1
|
session.invalidate();
|
这将删除绑定到会话的任何对象并将其销毁。
?
API参考:
?
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年12日历 | -2025/12/21 10:31:05- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |