会话状态的维持是开发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>");
}
}
}
相关推荐
java中使用session购物车的简单例子,本代码是基于servlet的简单实例,帮助理解session原理。
java中使用session模拟用户登陆
Java关于session的详细解释,TXT文件,仅供学习参考,如用于商业用途,后果自负。
java中session源码Java字节码检测演示 关于Java字节码检测的主题的演示。 这是我公司内每周知识共享会议的准备。 工具 Java 11 Java助手 Gradle 储存库结构 它由四个文件夹part1 , part2 , part3和presentation 。...
java下面session问题
JAVA的SESSION精准统计 消除了SESSION可以为负数的BUG... 更加精准
java中session源码Lambdas Eric Steegmans教授的Java会话中BeJUG Lambda的源代码
全面理解session机制,对开发过程中session的使用提供知识!
java中session源码
commons-pool2-2.3.jar jedis-2.8.0.jar kuanrf-tomcat-redis-session-manage-1.0.jar 内有配置说明
JAVA SESSION 监听器 有效监听服务器SESSION情况,当前登录用户等
NULL 博文链接:https://piranha.iteye.com/blog/2119924
JAVA通过Session和Cookie实现网站自动登录的技术
具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。 同时我们也看到,由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以session 机制可能...
java后台请求http,区分get和post,一般是用来抓取带有登陆权限网站的数据,后台先登录,保持session,再请求数据URL
java通过session和cookie实现网站的自动登录
Java中设置session的详细解释,适合任何人事学习使用
用servlet作为控制器,session来储存登录时间和点击页面次数。如有不足请提出。
java中cookie,session,验证码的应用实例
主要介绍了java设置session过期时间的实现方法,以实例形式详细讲述了具体实现过程,非常具有参考借鉴价值,需要的朋友可以参考下