HttpSession的使用

2024-01-05 03:04
文章标签 使用 httpsession

本文主要是介绍HttpSession的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 HttpSession 概述

在 Java Servlet API 中引入 session 机制来跟踪客户的状态。session 指的是在一段时间内,单个客户与 Web 服务器的一连串相关的交互过程。在一个 session 中,客户可能会多次请求访问同一个网页,也有可能请求访问各种不同的服务器资源。

在 Servlet API 中定义了 javax.servlet.http.HttpSession 接口,Servlet 容器必须实现这个接口。当一个 session 开始时,Servlet 容器创建一个 HttpSession 对象,并同时在内存中为其开辟一个空间,在 HttpSession 对象中可以存放客户状态的信息(例如购物车)。Servlet容器为 HttpSession 分配一个唯一标识符,称为 SessionID。Servlet 容器把 SessionID 保存在客户的浏览器中。每次客户发出 HTTP 请求时,Servlet 容器可以从 HttpRequest 对象中读取SessionID,然后根据 SessionID 找到相应的 HttpSession 对象,从而获取客户的状态信息。

Session 的运行机制如下图所示。

2 HttpSession 的创建与使用

(1)创建

Servlet 中的 HttpServletRequest 对象为我们提供了以下两种创建和获取 HttpSession 对象的方法:

HttpSession session=request.getSession(boolean value);HttpSession session=request.getSession();

那么这两种方法有什么区别呢?

在第一种方法中,布尔值为 true 时,如果存在与当前请求关联的会话,就返回该会话。否则创建一个新的会话,并把该会话返回。布尔值为 false 时,如果存在与当前请求关联的会话,就返回该会话。否则返回 null,不再创建会话。

第二种方法等同于第一种方法中的布尔参数值为 true 时的情况。

(2)使用

在 javax.servlet.http.HttpSession 接口中定义的方法,我们常用的是有关进行数据存取的方法。

session.setAttribute(String name,Object value) ;session.getAttribute(String name);

setAttribute(String name,Object value)是把一个对象 value 保存在 HttpSession 对象中,并为其指定引用名称为 name。当我们想使用已经存储在 session 中的数据时,我们可以使用 session.getAttribute(String name)方法,把数据取出来。其中 name 为我们在存入数据时,指定的引用名称。值得注意的是,session.getAttribute(String name)方法的返回值是 Object类型,所以在取出数据时,我们要对其进行数据类型转换,而且必须与我们存入的数据类型一致。如 String value=(String)session.getAttribute(String name);

3 HttpSession 对象的存在周期

3.1 HttpSession 对象的创建

当客户端浏览器第一次访问服务器时,服务器为每个浏览器创建不同的 HttpSession 对象。在服务器端使用 request.getSession()方法来获得 HttpSession 对象,并以此来使用HttpSession 接口为我们提供的方法。

3.2 HttpSession 对象的使用

在创建 HttpSession 对象后,使用该对象进行数据的存取,以进行数据的传递。在此过程中我们常用的方法如下。

(1)void setAttribute(String name,Object value ):进行数据的保存。

(2)Object getAttribute( String name):进行数据的读取。

3.3 HttpSession 对象的结束

在以下 3 种情况下,可以结束 session。

(1)关闭浏览器,关闭 session。

(2)调用 HttpSession 的 invalidate()方法,删除 HttpSession 对象和数据。

(3)两次访问时间间隔大于 session 定义的非活动时间间隔。

在 session 结束时,服务器会清空当前浏览器相关的数据信息。

4 HttpSession 实现新闻系统的用户登录

UserServlet 为处理用户注册以及登录的 Servlet,其代码如下:

package com.example.demo;public class UserServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponseresponse)throws ServletException, IOException {//设置编码格式 // response.setContentType("text/html;charset=UTF-8"); // request.setCharacterEncoding("utf-8"); //接收用户信息 String userName = request.getParameter("username");String password = request.getParameter("password");String email = request.getParameter("email");String method = request.getParameter("method");//调用 Service 方法进行业务逻辑处理 UserServiceImpl userService = new UserServiceImpl();UserDao userDao = new UserDaoImpl();userService.setUserDao(userDao);boolean bLogin = false;User user = new User();user.setUserName(userName);user.setPassword(password);if (method != null && method.equals("addUser")){user.setEmail(email);user.setUserType(Constants.USER_TYPE_COMMON);bLogin = userService.addUser(user);}else{bLogin = userService.isLogin(userName, password);System.out.println("blogin="+bLogin);}if (bLogin){request.getSession().setAttribute("admin",userName);request.getSession().setAttribute("user",user);}//响应页面 request.getRequestDispatcher("index.jsp").forward(request,response);// response.sendRedirect("index.jsp"); }protected void doPost(HttpServletRequest request, HttpServletResponseresponse) throws ServletException, IOException {doGet(request, response);}
}

以上代码的黑体部分就是 HttpSession 的使用,用户登录成功后,将用户信息保存到会话中。

这篇关于HttpSession的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/571455

相关文章

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected