Java Servlet API 使用 Session 来跟踪会话和管理会话内的状态.利用Session服务器可以把一个客户的所有请求联系在一起,并记住客户的操作状态.当客户第一次连接到服务器的时候,服务器会为其建立一个Session并分配客户一个唯一的标识(Session ID)
客户通过浏览器访问. 一个浏览器的进程就是一个会话.
编写一个会话信息输出类.
package
com.cao.util;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.http.HttpSession;
public class OutputSessionInfo ... {
public static void printSessionInfo(PrintWriter out ,HttpSession session)...{
out.print("<table border=1>");
out.print("<tr>");
out.print("<td>会话的状态</td>");
if(session.isNew())...{
out.print("<td>新的会话</td>");
}else...{
out.print("<td>旧的会话</td>");
}
out.print("</tr>");
out.print("<tr>");
out.print("<td>会话Id</td>");
out.print("<td>"+session.getId()+"</td>");
out.print("</tr>");
out.print("<tr>");
out.print("<td>创建时间</td>");
out.print("<td>"+new Date(session.getCreationTime())+"</td>");
out.print("</tr>");
out.print("<tr>");
out.print("<td>上次访问的时间</td>");
out.print("<td>"+new Date(session.getLastAccessedTime())+"</td>");
out.print("</tr>");
out.print("<tr>");
out.print("<td>最大不活动时间间隔</td>");
out.print("<td>"+session.getMaxInactiveInterval()+"</td>");
out.print("</tr>");
out.print("</table>");
}
}
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.http.HttpSession;
public class OutputSessionInfo ... {
public static void printSessionInfo(PrintWriter out ,HttpSession session)...{
out.print("<table border=1>");
out.print("<tr>");
out.print("<td>会话的状态</td>");
if(session.isNew())...{
out.print("<td>新的会话</td>");
}else...{
out.print("<td>旧的会话</td>");
}
out.print("</tr>");
out.print("<tr>");
out.print("<td>会话Id</td>");
out.print("<td>"+session.getId()+"</td>");
out.print("</tr>");
out.print("<tr>");
out.print("<td>创建时间</td>");
out.print("<td>"+new Date(session.getCreationTime())+"</td>");
out.print("</tr>");
out.print("<tr>");
out.print("<td>上次访问的时间</td>");
out.print("<td>"+new Date(session.getLastAccessedTime())+"</td>");
out.print("</tr>");
out.print("<tr>");
out.print("<td>最大不活动时间间隔</td>");
out.print("<td>"+session.getMaxInactiveInterval()+"</td>");
out.print("</tr>");
out.print("</table>");
}
}
写一个 测试的 jsp 页面
<%
@ page language
=
"
java
"
import
=
"
java.util.*
"
pageEncoding
=
"
UTF-8
"
%>
< jsp:directive.page import = " com.cao.util.OutputSessionInfo " />
< html >
< body >
< form action = " loginCheck " method = " post " >
用户名:
<%
String user = session.getAttribute( " user " ) == null ? null :session.getAttribute( " user " ).toString();
if (user == null ) ... {
%>
<input type="text" name="user" />
<br />
<%
} else ... {
%>
<input type="text" name="user" value="<%=user%>" />
<br />
<%
}
OutputSessionInfo.printSessionInfo(response.getWriter(),session);
%>
密码:
< input type = " text " name = " pwd " />
< input type = " submit " value = " 提交 " />
</ form >
</ body >
</ html >
< jsp:directive.page import = " com.cao.util.OutputSessionInfo " />
< html >
< body >
< form action = " loginCheck " method = " post " >
用户名:
<%
String user = session.getAttribute( " user " ) == null ? null :session.getAttribute( " user " ).toString();
if (user == null ) ... {
%>
<input type="text" name="user" />
<br />
<%
} else ... {
%>
<input type="text" name="user" value="<%=user%>" />
<br />
<%
}
OutputSessionInfo.printSessionInfo(response.getWriter(),session);
%>
密码:
< input type = " text " name = " pwd " />
< input type = " submit " value = " 提交 " />
</ form >
</ body >
</ html >
当第一次访问时的结果是
当刷新后 的结果是
从对比结果我们不难发现 浏览器 第一次请求产生了一个新的会话,并且分配了一个会话Id
当再次发送一次请求时 会话 ID 并没有改变.
我们现在再重新开一个浏览器看看结果
我们发现这时产生了一个新的会话, 和一个新的会话Id
基于session的这些特性 .所以session 应用在保存如 购物车 ,会员信息,统计在线人数 等地方.