⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 right10_2_3.htm

📁 清华大学JAVA教程
💻 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(&quot;uid&quot;);<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(&quot;text/html&quot;); <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(&quot;&lt;html&gt;&quot;);<br>                    out.println(&quot;&lt;head&gt;&quot;);<br>                    out.println(&quot;&lt;meta http-equiv=\&quot;Content-Type\&quot;               content=\&quot;text/html; charset=gb2312\&quot;&gt;&quot;);<br>                    out.println(&quot;&lt;/head&gt;&quot;);<br>                    out.println(&quot;&lt;body&gt;&quot;);</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(&quot;ID &quot; + session.getId()+&quot;&lt;br&gt;&quot;);	              <br>                                <font color="339900">//得到该session的id,并打印</font><br>                    out.println(&quot;Created: &quot; + created+&quot;&lt;br&gt;&quot;);<br>                                <font color="339900">//打印session创建时间</font><br>                    out.println(&quot;Last Accessed: &quot; + accessed+&quot;&lt;br&gt;&quot;);	              <br>                                <font color="339900">//打印最后访问时间</font></p>            <p class="pt9-black">       session.setAttribute(&quot;UID&quot;,&quot;12345678&quot;);               <br>                                <font color="339900">//在session中添加变量UID=12345678</font><br>                    session.setAttribute(&quot;Name&quot;,&quot;Tom&quot;); <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 + &quot; = &quot; + value+&quot;&lt;br&gt;&quot;);	              <font color="339900">//打印</font><br>                    }<br>                    out.println(&quot;&lt;/body&gt;&quot;); <font color="339900">//打印HTML标记</font><br>                    out.println(&quot;&lt;/html&gt;&quot;);<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 + -