JAVA中Session的会话状态

 我来答
户如乐9318
2022-10-05 · TA获得超过6655个赞
知道小有建树答主
回答量:2559
采纳率:100%
帮助的人:139万
展开全部

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

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

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

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

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

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

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

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

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

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

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

  // *** SessionExample java

  import java io *;

  import java util *;

  import javax servlet *;

  import javax servlet *;

  //导入必要的软件包

  public class SessionExample extends HttpServlet

  {

  public void doGet(HttpServletRequest request HttpServletResponse response)

  throws IOException ServletException //实现doGet方法

  {

  response setContentType( text/ ); //设置HTTP头

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

  HttpSession session = request getSession(true);

  //得到session对象

  //打印HTML标记

  out println( <> );

  out println( <head> );

  out println( <meta equiv=\ Content Type\ content=\ text/; charset=gb \ > );

  out println( </head> );

  out println( <body> );

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

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

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

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

  out println( ID + session getId()+ <br> );

  //得到该session的id 并打印

  out println( Created: + created+ <br> );

  //打印session创建时间

  out println( Last Accessed: + accessed+ <br> );

  //打印最后访问时间

  session setAttribute( UID );

  //在session中添加变量UID=

  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();

  //由名字从 gan中得到值

  out println(name + = + value+ <br> ); //打印

  }

  out println( </body> ); //打印HTML标记

  out println( </> );

  }

  }

lishixinzhi/Article/program/Java/hx/201311/26058

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式