Servlet(session的使用)
Web服务器跟踪客户状态通常的方法:
建立含有跟踪的数据隐藏字段:
重写包含额外参数的URL
使用持续的session
使用Servlet API中的Session(会话)机制。
Session用于跟踪客户状态。Session指在一段时间内,单个客户与Web服务器的一连串相关的交互过程。在一个Session中,客户可能会多次请求同一个网页,也有可能请求访问各种不同的服务资源。
Session的运行机制:
当一个Session开始时,Servlet容器将创建一个HttpSession的对象,在HttpSession对象中可以存放客户状态的信息。
Servlet容器为HttpSession分配一个惟一的标识符,称为Session ID。Servlet容器把Session ID作为Cookie保存在客户的浏览器中。
每次客户发出Http请求时,Servlet容器可以从HttpServletRequest对象中读取Session ID,然后根据Session ID找到相应的HttpSession对象,从而获得与用户的状态信息。
session中常用的方法:
<body>
//得到一个session ID
session id:<%=session.getId() %>
//设置一个session ID存在的时间
<%session.setMaxInactiveInterval(10);%>
//判断是否有一个新的sessionID产生
<%=session.isNew() %>
</body>
Session的生命周期:当客户第一次访问Web应用中支持Session的某个网页时,就会开始一个新的session.
接下来当客户浏览这个Web应用的不同网页时,始终处于同一个session 中。
默认情况下JSP网页都是支持session的。
<%@ page session = "true"%>如果把“true”改成“false”这个网页就不支持session了。
Session生命周期结束的标志(只要生命周期结束,Servlet容器会将session所占有的资源释放掉):
客户端关闭浏览器:严格说不行,做不到这一点,可以做一点努力的办法是在所有的客户端页面里使用javascrip代码window。onclose来监听浏览器的关闭动作,然后再向服务器发送一个请求删除session。
Session过期:指当Session开始后,在一段时间内客户没有和Web服务器交互,这个session会失效。
服务器调用了HttpSession的invalidate()方法;
maillogin.jsp
<body>
<%
String username="";
if(!session.isNew())
{
username=(String)session.getAttribute("username");
if(null == username)
{
username="";
}
}
%>
<p>username ID:<%=session.getId() %></p>
<form action="mailCheck.jsp">
username:<input type="text" name="username" value="<%=username %>"><br>
<input type="submit" value="submit">
</form>
</body>
mailCheck.jsp
<body>
<%
String username=request.getParameter("username");
session.setAttribute("username",username);
%>
<a href=maillogin.jsp>转向登录</a><br>
<a href=maillogout.jsp>注销</a><br>
<p>当前用户:<%=username %></p>
<p>你的邮件有100封邮件</p>
</body>
maillogout.jsp
<body>
<%String username = (String)session.getAttribute("username");
session.invalidate();
%>
<%=username %>
<br>
<p>再见</p><br>
<a href="maillogin.jsp">重新登录</a>
</body>
补充:综合编程 , 其他综合 ,