`
Acmey
  • 浏览: 53922 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

JAVA中Session的会话状态

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

  Session的发明是为了填补HTTP协议的局限。请注意HTTP协议是如何工作的--用户发出请求,服务器作出响应,这种用户端和服务器97色色端的联系就是离散的,非连续的。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("<html>");

  out.println("<head>");

  out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">");

  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","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+"<br>"); //打印

  }

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

  out.println("</html>");

  }

  }

  }
分享到:
评论

相关推荐

    Java 使用HttpClient保持SESSION状态

    以上就是在Java中使用HttpClient保持SESSION状态的基本流程。在实际项目中,可能还需要处理重定向、超时、错误处理等复杂情况。注意,对于HTTPS站点,可能需要配置SSLContext和TrustManager,以允许HttpClient信任自...

    shiro的session中的会话管理

    在传统的Web应用中,session信息通常存储在服务器的内存中,每个用户的登录状态只在请求的服务器上可见。然而,在分布式环境中,用户可能与不同的服务器交互,这就需要一种机制来确保所有服务器都能访问和更新同一份...

    java中使用session模拟用户登陆

    在Java Web开发中,Session是服务器端用于跟踪用户状态的一种机制。当用户通过用户名和密码登录系统后,服务器需要一种方式来识别这个已验证的用户,以便在后续的请求中提供个性化的服务,例如访问权限控制。这时,...

    Java关于session的详细解释

    在Java Web开发中,Session是一种常用的技术,用于跟踪用户的会话状态。简单来说,Session就是服务器为特定用户分配的一块内存区域,用来存储该用户在与服务器交互过程中产生的各种信息(如登录状态、购物车商品等)...

    java_session共享配置.jar

    Java_session共享配置主要涉及到Web应用中的会话管理,特别是如何在多服务器环境下保持用户会话的一致性。这里提到的几个jar文件是实现这一目标的关键组件。下面将详细讲解每个文件的作用及其背后的原理。 首先,`...

    java中使用session购物车的简单例子

    在Java Web开发中,Session是HTTP协议中一种用于在客户端和服务器之间保持状态的重要机制。在本例中,“java中使用session购物车的简单例子”是通过Servlet技术实现的一个应用场景,旨在帮助开发者理解如何利用...

    java session

    在Web开发中,`Java Session`是用于跟踪用户会话的一种机制。它主要用于处理客户端与服务器之间的交互过程中所产生的状态信息,例如用户的登录状态、购物车信息等。在Java Web应用中,主要通过`javax.servlet....

    JAVA的SESSION精准统计

    在Java Web开发中,Session是服务器用来跟踪用户状态的一种机制。每个用户在访问网站时,服务器会为其创建一个唯一的Session ID,存储在客户端的Cookie中,每次请求时通过这个ID来识别用户。"JAVA的SESSION精准统计...

    httpclient如何保持session会话模拟登录后的操作

    本篇文章将深入探讨如何使用HTTPClient来实现session会话的保持,并在模拟登录后执行后续的操作。 首先,了解HTTP协议的基础知识是非常重要的。HTTP协议是无状态的,这意味着每次请求之间没有任何关联。为了保持...

    spring session实现分布式会话管理

    在传统的 Web 应用中,Session 是在单个服务器上创建和管理的,当应用部署在多台服务器上时,会话信息无法跨服务器共享,导致用户在切换服务器时丢失会话状态。分布式会话管理就是为了解决这个问题,使得用户的会话...

    Java Web 会话 聊天室

    - **HttpSession接口**:Java Web中的HttpSession接口是用于管理用户会话的主要工具。在聊天室中,每个用户登录后都会创建一个会话,以便服务器能识别并跟踪用户状态,如用户名、在线状态等。 - **会话持久化**:...

    nginx+tomcat7+memcached session会话保持

    本文将详细介绍如何在Nginx、Tomcat7和Memcached的环境下实现会话保持,确保用户在多台服务器之间切换时仍能保持其会话状态。 首先,我们要理解会话保持的重要性。在分布式系统中,用户可能与集群中的任何一台...

    java基础会话与状态讲解

    ### Java基础会话与状态详解 #### 一、会话管理概述 在Web开发中,会话管理是一项关键的技术,特别是在Java Web应用中。会话指的是用户与服务器之间的一系列交互活动,通常从用户打开浏览器并请求某个Web资源开始...

    Java EJB中有、无状态SessionBean的两个例子.rar

    有状态SessionBean能够保持与特定客户端的会话状态。这意味着当一个客户端与SSB交互时,该Bean可以记住之前的状态信息。例如,如果一个购物车应用使用SSB,那么Bean可以跟踪用户的购物选择,直到用户完成购买。这种...

    Java EJB中有、无状态SessionBean的两个例子

    Java EJB中有、无状态SessionBean的两个例子,的无状态SessionBean可,会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;  在有状态SessionBean中,用累加...

    Tomcat+Redis集群实现session会话共享

    "Tomcat+Redis集群实现session会话共享"这一主题,正是关注如何在使用Tomcat作为应用服务器的环境中,通过集成Redis缓存系统来构建一个高效的、高可用的会话共享解决方案。 首先,我们来理解一下`session`。在Web...

    JAVA之cookie与session

    **Cookie** 与 **Session** 是两种在 Web 开发中用于跟踪用户会话的重要技术。它们的主要目标是在客户端和服务端之间保持状态。 - **Cookie** 机制采用了客户端保持状态的方案。这意味着用户的浏览器将存储特定的...

    Java中设置session的详细解释

    综上所述,Java中的Session机制是Web开发中重要的状态保持工具,它帮助开发者在HTTP无状态的环境中实现用户会话跟踪,为用户提供连续的服务体验。理解和熟练运用Session对于构建复杂的Web应用程序至关重要。

Global site tag (gtag.js) - Google Analytics