JAVA中Session

会话状态的维持是开发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("<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>");

  }

  }

  }

时间: 2024-10-12 13:23:46

JAVA中Session的相关文章

JAVA中SESSION和COOKIE的解释

为什么需要cookie: 因为HTTP是无状态的协议,所以我们在使用浏览器访问网站的时候,服务器是怎样来区别是哪个浏览器发送的请求呢,服务器是如何给不同的浏览器发送不同的信息,这就需要我们的cookie来解决问题了. cookie机制是采用了一种在客户端保存状态的方案,他是用户端的存储机制,当然他也需要用户端主动去开启cookie支持. session机制是采用一种在客户端和服务器之间保持状态的方案,这是怎样的一种感念呢?如果我们在服务器端保存一个用户访问的标识,那么这种单一的保持我们还是无法辨

java中session和application的用法

Session的用法 首先创建2个jsp文件t1.jsp  t2.jsp 在t1.jsp <% //设置session的键与值 session.setAttribute("abc", 0); %> 在t2.jsp中 用EL表达式获取session的值(注意:EL表达式只用于3.0以上的版本) ${abc} (3.0以下的版本就要用) int i = (Integer)session.getAttribute("abc"); out.println(&qu

Java中session与application的异同

客户端的session 其实是标记了你的请求来自哪个浏览器 问题1:永远都一样吗? 答:重启了浏览器,你的session id就改变了, 结果会导致,再无法取回原来在服务端保存的数据. 问题2:假设客户端的session id不变(浏览器不重启), 那么服务器会一直保存这个session的数据吗? 答:服务端(tomcat)如果20分钟,没有人动, 那么这个session就自动销毁. 对于application在整个项目中,变量是有且只有1个,所有客户端都共享同一个application对象.

Java中 重定向和转发的区别 、与Session

重定向和转发的区别: 重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程.与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求.因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL,而当使用转发时该URL会保持不变.重定向的速度比转发慢,因为浏览器还得发出一个新的请求.同时,由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用. 怎么选择

Java中如何使用session

几乎所有的Web开发语言都支持Session功能,Servlet也不例外. Servlet/JSP中的Session功能是通过作用域(scope)这个概念来实现的. 作用域分为四种,分别为: page 在当前页面有效(仅用于JSP中)request 在当前请求中有效session 在当前会话中有效application 在所有应用程序中有效 是不是看不太明白?page因为仅用于JSP中,这里只讲述其他三种作用域.首先要声明的一点,所谓“作用域”就是“信息共享的范围”,也就是说一个信息能够在多大的

Java中容易被你忽略的细节(一)

1.在一个程序当中代码段访问了同一个对象从单独的并发的线程当中,那么这个代码段叫"临界区" 怎么解决呢:使用同步的机制对临界区进行保护 同步的两种方式:同步块和同步方法 对于同步来说都是使用synchronized方法 每一个对象都有一个监视器,或者叫做锁. java用监视器机制实现了进程之间的异步执行 2.Struts框架基于MVC模式 Struts的工作流程: 在web应用启动时就会加载初始化ActionServlet,ActionServlet从 struts-config.xm

jsp中session的使用

Session的典型应用: 防止用户非法登录到某个页面. 网上商城的购物车 保存用户登录信息 注:多个请求要用的东西放在session中,多个会话之间要用的东西放在上下文中. 如何创建session? Servelt API 中有HttpSession接口,来封装session对象.用HttpServletRequest来获取会话对象. HttpSession  session=request.getSession(); 主要方法:1. getAttribute( String name )获取

Java中的多线程你只要看这一篇就够了

Java中的多线程你只要看这一篇就够了 引 如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其实只有一半对,因为反应"多角色"的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的"生产者,消费者模型". 很多人都对其中的一些概念不够明确,如同步.并发等等,让我

HTTP协议报文、工作原理及Java中的HTTP通信技术详解

一.web及网络基础       1.HTTP的历史            1.1.HTTP的概念:                 HTTP(Hyper Text Transfer Protocol,超文本传输协议)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器.                 它是一个应用层协议,承载于TCP之上.由请求和响应构成,是一个标准的客户端服务器模型            1.2.HTTP的发展历史: