📄 right10_2_3.htm
字号:
<html><head><title>JAVA编程语言</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><link rel="stylesheet" href="../../../css/text.css" type="text/css"></head><body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" ><table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td valign="top"> <table width="90%" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#FFFFFF"> <tr> <td valign="top"> <p class="pt9-black"> 会话状态的维持是开发Web应用所必须面对的问题,有多种方法可以来解决这个问题,如使用Cookies,hidden类型的表单域,或直接把状态信息加到URL中等,还有Servlet本身提供了一个HttpSession接口来支持会话状态的维持,在这里我们主要介绍基于这个接口的会话状态的管理。<br> <br> Session的发明是为了填补HTTP协议的局限。请注意HTTP协议是如何工作的--用户发出请求,服务器作出响应,这种用户端和服务器端的联系就是离散的,非连续的。HTTP协议不能提供允许服务器跟踪用户请求的功能。在服务器端完成响应用户的请求之后,服务器不能继续与该浏览器继续保持连接。从服务器这端来看,每一个请求都是独立的,因此HTTP协议被认为是无状态协议,当用户在多个主页间切换时,服务器无法知道他的身份。Session的出现就是为了弥补这个局限。利用Session,您就可以当一个用户在多个主页间切换的时候也能保存他的信息。这样很多以前根本无法去做的事情就变得简单多了。<br> <br> 在访问者从到达某个特定的主页到离开为止的那段时间,每个访问者都会单独获得一个Session。<br> Java Servlet定义了一个HttpSession接口,实现的Session的功能,在Servlet中使用Session的过程如下:<br> <br> (1) 使用HttpServletRequest的getSession方法得到当前存在的session,如果当前没有定义session,则创建一个新的session,还可以使用方法getSession(true)<br> <br> (2) 写session变量。可以使用方法HttpSession.setAttribute(name,value)来向Session中存储一个信息。也可以使用HttpSession.putValue(name,value),但这个方法已经过时了。<br> <br> (3) 读Session变量。可以使用方法HttpSession.getAttribute(name)来读取Session中的一个变量值,如果name是一个没有定义的变量,那么返回的是null。需要注意的是,从getAttribute读出的变量类型是Object,必须使用强制类型转换,比如:<br> String uid = (String) session.getAttribute("uid");<br> 也可以使用HttpSession.getValue(name),但是这个方法也已经过时了。<br> <br> (4) 关闭session,当时用完session后,可以使用session.invalidate()方法关闭session。但是这并不是严格要求的。因为,Servlet引擎在一段时间之后,自动关闭seesion。<br> <br> 下面举一个简单的例子说明session的使用<br> <font color="339900">// SessionExample.java</font><br> import java.io.*;<br> import java.util.*;<br> import javax.servlet.*;<br> import javax.servlet.http.*;<br> <font color="339900">//导入必要的软件包</font><br> public class SessionExample extends HttpServlet <br> {<br> public void doGet(HttpServletRequest request, HttpServletResponse response)<br> throws IOException, ServletException<font color="339900"> //实现doGet方法</font><br> {<br> response.setContentType("text/html"); <font color="339900">//设置HTTP头</font><br> PrintWriter out = response.getWriter(); <font color="339900">//得到输出Writer</font><br> HttpSession session = request.getSession(true); <br> <font color="339900">//得到session对象</font></p> <p> <span class="pt9-black"> //打印HTML标记<br> out.println("<html>");<br> out.println("<head>");<br> out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">");<br> out.println("</head>");<br> out.println("<body>");</span></p> <p class="pt9-black"> Date created = new Date(session.getCreationTime()); <br> <font color="339900">//得到session对象创建的时间</font><br> Date accessed = new Date(session.getLastAccessedTime());<br> <font color="339900">//得到最后访问该session对象的时间</font><br> out.println("ID " + session.getId()+"<br>"); <br> <font color="339900">//得到该session的id,并打印</font><br> out.println("Created: " + created+"<br>");<br> <font color="339900">//打印session创建时间</font><br> out.println("Last Accessed: " + accessed+"<br>"); <br> <font color="339900">//打印最后访问时间</font></p> <p class="pt9-black"> session.setAttribute("UID","12345678"); <br> <font color="339900">//在session中添加变量UID=12345678</font><br> session.setAttribute("Name","Tom"); <br> <font color="339900">//在session中添加变量Name=Tom</font></p> <p><span class="pt9-black"><br> Enumeration e = session.getAttributeNames(); <br> <font color="339900">//得到session中变量名的枚举对象</font><br> while (e.hasMoreElements()) { <font color="339900">//遍历每一个变量</font><br> String name = (String)e.nextElement(); <font color="339900">//首先得到名字</font><br> String value = session.getAttribute(name).toString(); <br> <font color="339900">//由名字从session中得到值</font><br> out.println(name + " = " + value+"<br>"); <font color="339900">//打印</font><br> }<br> out.println("</body>"); <font color="339900">//打印HTML标记</font><br> out.println("</html>");<br> }<br> }<br> }<br> <br> 该Servlet运行的结果是:<br> <img src="../../../images/tu/ch10/10_2_3.gif" width="440" height="167"> <br> <br> 有了Session对象,Web应用程序就可以在服务器端保存客户的状态,这对构建Web应用的重要性读者在以后的实践中会逐步有所体会。正像前面提到的,Session只是一个概念,可以有多种实现方法,在这里我们就不过多的介绍了。因为Servlet本身就是实用性很强的内容,各种各样的技巧,实现方案,不胜枚举。而且很多相关内容也不只是Servlet的专利,本讲在这里只能做简单的介绍,使读者对Servlet有一个概念上的认识。有兴趣的读者可以参考相关书籍。<br> </span> </p> </td> </tr> </table> </td> </tr></table></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -