会话状态的维持是开发Web应用所必须面对的问题,有多种方法可以来解决这个问题,如使用Cookies,hidden类型的表单域,或直接把状态信息加到URL中等,还有Servlet本身提供了一个HttpSession接口来支持会话状态的维持,在这里我们主要介绍基于这个接口的会话状态的管理。

Session的发明是为了填补HTTP协议的局限。请注意HTTP协议是如何工作的--用户发出请求,服务器作出响应,这种用户端和服务器端的联系就是离散的,非连续的。HTTP协议不能提供允许服务器跟踪用户请求的功能。在服务器端完成响应用户的请求之后,服务器不能继续与该浏览器继续保持连接。从服务器这端来看,每一个请求都是独立的,因此HTTP协议被认为是无状态协议,当用户在多个主页间切换时,服务器无法知道他的身份。 Session的出现就是为了弥补这个局限。利用Session,您就可以当一个用户在多个主页间切换的时候也能保存他的信息。这样很多以前根本无法去做的事情就变得简单多了。

在访问者从到达某个特定的主页到离开为止的那段时间,每个访问者都会单独获得一个Session。

Java Servlet定义了一个HttpSession接口,实现的Session的功能,在Servlet中使用Session的过程如下:

(1) 使用HttpServletRequest的getSession方法得到当前存在的session,如果当前没有定义session,则创建一个新的session,还可以使用方法getSession(true)

(2) 写session变量。可以使用方法HttpSession.setAttribute(name,value)来向Session中存储一个信息。也可以使用HttpSession.putValue(name,value),但这个方法已经过时了。

(3)读Session变量。可以使用方法HttpSession.getAttribute(name)来读取Session中的一个变量值,如果name是一个没有定义的变量,那么返回的是null。需要注意的是,从getAttribute读出的变量类型是Object,必须使用强制类型转换,比如:

String uid = (String) session.getAttribute("uid");

也可以使用HttpSession.getValue(name),但是这个方法也已经过时了。

(4) 关闭session,当时用完session后,可以使用session.invalidate()方法关闭session。但是这并不是严格要求的。因为,Servlet引擎在一段时间之后,自动关闭seesion。

下面举一个简单的例子说明session的使用

//97色色 SessionExample.java

import java.io.*;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

//导入必要的软件包

public class SessionExample extends HttpServlet

{

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException //实现doGet方法

{

response.setContentType("text/html"); //设置HTTP头

PrintWriter out = response.getWriter(); //得到输出97gan

HttpSession session = request.getSession(true);

//得到session对象

//打印HTML标记

out.println("");

out.println("

");

out.println("");

out.println("");

out.println("

");

Date created = new Date(session.getCreationTime());

//得到session对象创建的时间

Date accessed = new Date(session.getLastAccessedTime());

//得到最后访问该session对象的时间

out.println("ID " + session.getId()+"
");

//得到该session的id,并打印

out.println("Created: " + created+"
");

//打印session创建时间

out.println("Last Accessed: " + accessed+"
");

//打印最后访问时间

session.setAttribute("UID","12345678");

//在session中添加变量UID=12345678

session.setAttribute("Name","Tom");

//在session中添加变量Name=Tom

Enumeration e = session.getAttributeNames();

//得到session中变量名的枚举对象

while (e.hasMoreElements()) { //遍历每一个变量

String name = (String)e.nextElement(); //首先得到名字

String value = session.getAttribute(name).toString();

//由名字从97gan中得到值

out.println(name + " = " + value+"
"); //打印

}

out.println(""); //打印HTML标记

out.println("");

}

}

}

java+session+存在哪_JAVA中Session相关推荐

  1. java中session的作用_java中session的工作原理是什么?和Cookies有何区别?

    现在大家学习的东西和以前大不相同了,越来越多的人倾向于去学习高新技术以获得更好的发展.java是很多人的第一选择.java中的知识还是很多的,今天就来为大家介绍一下. 首先来说一下java中sessi ...

  2. java session 生命周期_Java中httpsession生命周期

    Java中httpsession生命周期 HttpSession会话范围是某个用户从首次访问服务器开始,到该用户关闭浏览器结束,那么从用户访问到退出浏览器它的生命周期过程如下: 1. 当浏览器A向服务 ...

  3. java中cookie怎么用_java 中session和cookie的使用

    这里讲session和cookie放在一起写, 不是说他们之间有什么关系,仅最近一个项目中同时用到.偷懒,放一起整理下 Session: Session的发明是为了填补HTTP协议的局限.请注意HTT ...

  4. java中session对象登录_JavaWeb中Session对象的学习笔记

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

  5. PHP开启session的函数,ThinkPHP中session函数详解

    在PHP中使用$_SESSION来操作session,而ThinkPHP提供了session的封装函数session().单单这一个函数就实现了session的增删改查的功能.下面我们分别来看其应用与 ...

  6. php session位置,关于PHP中Session文件过多的问题及session文件保存位置

    PHP的默认机制:每一次php请求,会有1/100的概率(默认值)触发"session回收".如果"session回收"发生,那就会检查/tmp/sess_*的 ...

  7. PHP中session什么意思_PHP中Session的概念

    PHP中Session的概念 更新时间:2006年10月09日 00:00:00   作者: 什么是Session呢?Session直接翻译成中文比较困难,一般都译成时域.在计算机专业术语中,Sess ...

  8. php 类初始化 session判断,thinkphp3.x中session方法的用法分析

    本文实例讲述了thinkphp3.x中session方法的用法.分享给大家供大家参考,具体如下: 一.Session方法用于Session 设置.获取.删除和管理操作. Session 用于Sessi ...

  9. java可以多重继承吗_Java中的多重继承与组合vs继承

    java可以多重继承吗 有时我写了几篇有关Java继承,接口和组成的文章. 在这篇文章中,我们将研究多重继承,然后了解组成优于继承的好处. Java中的多重继承 多重继承是创建具有多个超类的单个类的能 ...

最新文章

  1. Linux DNS (2)搭建DNS服务器
  2. Android系统匿名共享内存Ashmem(Anonymous Shared Memory)简要介绍和学习计划
  3. 米家电磁炉显示e10_米家电磁炉e10故障怎么回事
  4. 6年级学Python,高中学AI?这6本书,助你找回输掉的起跑线
  5. dismiss android,[转]Android对话框中dismiss和cancel、hide的区别
  6. linux发展前景2018,2018 年 Linux 的 8 个发展预测
  7. csrss.exe系统进程介绍
  8. Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)
  9. 大数据_Flink_Java版_数据处理_流处理API_Transform(3)_Reduce聚合算子---Flink工作笔记0031
  10. Android开发笔记(四十三)点击事件
  11. 解决visual studio换行(回车键)不能代码补全问题
  12. linux下复制catalog信息指令,基於Linux下catalog方式的 Oracle 備份策略(RMAN)
  13. 后疫情时代,人工智能发展的四大趋势
  14. android将手机能当蓝牙耳机使用吗,如何将Android手机作为蓝牙耳机?
  15. STM32自学笔记-8-红外遥控
  16. MATLAB创建三对角线矩阵-211103
  17. Beyond Compare4破解方法
  18. 用FPGA产生正弦信号
  19. 水管工游戏(啊哈算法)
  20. SqlServer的基本使用

热门文章

  1. windows 2008 远程桌面如何设置允许多用户登录?
  2. java上转型对象特点_Java 浅析三大特性之一继承
  3. qt c语言socket,c – Qt双向客户端服务器使用QTcpSocket和QTcpServer
  4. 掘金浏览器插件安装图文教程
  5. web----tcp三次握手
  6. 【收藏】C# WinForm开发系列 - DataGridView 使用方法集锦 - 宁波.Net技术讨论区
  7. python time模块
  8. JAVA四则运算(读写文件)
  9. QT安装配置是注意事项
  10. 中科大开源镜像使用帮助列表