JavaEE Servlet Session详解
2011-08-24 09:42
381 查看
Session
Session,也称会话状态,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。
以上引自:http://www.blogjava.net/gdws/archive/2010/07/02/325039.html
接下来具体说说Session中一些需要注意的地方:
1.客户端和服务器有对应的SessionID
2.客户端向服务器端发送SessionID的时候两种方式:
①使用cookie(内存cookie),如果浏览器禁掉cookie,就不能使用session(使用cookie实现的session)
②rewriten URL(URL重写来实现)。就是将一些 额外数据追加到表示会话的每个URL末尾,服务器在该标示符与其存储的有关的该会话的数据之间建立关联。URL后面加入SessionId,如hello.jsp?jsessionid=1234n
实现方法:response.encodeURL(request.getRequestURL().toString())
如果想安全的使用session(不论客户端是否禁止cookie),只能使用URL重写(大大增加编程负担),所以很多网站要求客户端打开cookie
3.Session不象Cookie拥有路径访问的问题,同一个application下的servlet/jsp可以共享同一个session, 前提示同一个客户端窗口.
request中关于session的主要方法:
HttpSession session = request.getSession(true);
getSession(boolean isNew):如果会话已经存在,则返回一个HttpSession,如果不存在并且isNew为true,则会新建一个HttpSession
getRequestedSessionId():返回随客户端请求到来的会话ID。可能与当前的会话ID相同,也可能不同。
isRequestedSessionIdFromCookie():当前的Session ID如果是从Cookie获得,为true
isRequestedSessionIdFromURL():当前Session ID如果是由URL获得,为true
isRequestedSessionIdValid():如果客户端的会话ID代表的是有效会话,则返回true。否则(比如,会话过期或根本不存在),返回false
HttpSession的常用方法:
getAttributeNames()
getAttribute()
getCreateTime()
getId()
getMaxInactiveInterval()
invalidate()
isNew()
setAttribute()
setMaxInactivateInterval()
Session,也称会话状态,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。
以上引自:http://www.blogjava.net/gdws/archive/2010/07/02/325039.html
接下来具体说说Session中一些需要注意的地方:
1.客户端和服务器有对应的SessionID
2.客户端向服务器端发送SessionID的时候两种方式:
①使用cookie(内存cookie),如果浏览器禁掉cookie,就不能使用session(使用cookie实现的session)
②rewriten URL(URL重写来实现)。就是将一些 额外数据追加到表示会话的每个URL末尾,服务器在该标示符与其存储的有关的该会话的数据之间建立关联。URL后面加入SessionId,如hello.jsp?jsessionid=1234n
实现方法:response.encodeURL(request.getRequestURL().toString())
如果想安全的使用session(不论客户端是否禁止cookie),只能使用URL重写(大大增加编程负担),所以很多网站要求客户端打开cookie
3.Session不象Cookie拥有路径访问的问题,同一个application下的servlet/jsp可以共享同一个session, 前提示同一个客户端窗口.
request中关于session的主要方法:
HttpSession session = request.getSession(true);
getSession(boolean isNew):如果会话已经存在,则返回一个HttpSession,如果不存在并且isNew为true,则会新建一个HttpSession
getRequestedSessionId():返回随客户端请求到来的会话ID。可能与当前的会话ID相同,也可能不同。
isRequestedSessionIdFromCookie():当前的Session ID如果是从Cookie获得,为true
isRequestedSessionIdFromURL():当前Session ID如果是由URL获得,为true
isRequestedSessionIdValid():如果客户端的会话ID代表的是有效会话,则返回true。否则(比如,会话过期或根本不存在),返回false
HttpSession的常用方法:
getAttributeNames()
getAttribute()
getCreateTime()
getId()
getMaxInactiveInterval()
invalidate()
isNew()
setAttribute()
setMaxInactivateInterval()
相关文章推荐
- javaEE session详解
- java web——Session/Cookie/Servlet 详解
- 【JavaWeb-19】Hibernate简介、入门案例、Session操作、2个配置文件详解
- EclipseIDEforJavaEE搭建servlet
- Java程序员从笨鸟到菜鸟之(八十三)细谈Spring(十二)OpenSessionInView详解及用法
- tomcat7 启动项目报错 java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()
- Javaweb之 servlet 开发详解1
- javaEE session及jsessionid的介绍
- JAVAWEB开发之HttpServletResponse和HttpServletRequest详解(上)(各种乱码、验证码、重定向和转发)
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之10.Web_工程结构 推荐
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之11.Servlet简介 推荐
- java之辨析Session Cookie Servletcontext
- java仿Servlet生成验证码实例详解
- Java:Session详解
- JavaWeb(EE)相对路径_绝对路径详解与得到相关路径
- javaEE mvc例子详解
- Java中的session详解
- Java中的session详解
- 【转】java:Session(会话)机制详解
- 关于javaEE中的session