HTTP 是一种"无状态"协议,这意味着每次客户端检索网页时,客户端打开一个单独的连接到 Web 服务器,服务器会自动不保留之前客户端请求的任何记录。
HttpSession对象:
Servlet 还提供了 HttpSession 接口,该接口提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式。
HttpSession对象的获取:getSession()方法
HttpSession session=request.getSession();
HttpSession对象重要的方法:
1.public void setAttribute(String name,object value)
该方法绑定一个名为name的value对象到session会话
2.public object getAttribute(String name)
该方法从该session中获取名为name的对象
3.public Enumeration getAttributeNames()
该方法获取该session中所有对象的名称,返回一个枚举
4.public long getCreationTime()
该方法获取session会话创建的时间,以毫秒为单位
5.public long getLastAccessedTime()
该方法获取该session结束的时间,以毫秒为单位
6.public boolean isNew()
客户端还不知道该 session 会话,或者如果客户选择不参入该 session 会话,则该方法返回 true。
7.public void removeAttribute(String name)
该方法从session中移除名为name的对象
Session实例:
package MyServlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* Created by 1192126986 on 2017/1/19.
*/
@WebServlet(name = "SessionTrack")
public class SessionTrack extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取HttpSession对象
HttpSession session=request.getSession(true);
//Session会话创建时间
Date createTime=new Date(session.getCreationTime());
//Session会话结束时间
Date lastAccessTime=new Date(session.getLastAccessedTime());
//创建日期格式化对象
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM--dd HH:mm:ss");
String title = "Servlet Session 实例";
//创建visitCountKey键和visitCount值对
Integer visitCount=new Integer(0);
String visitCountKey=new String("visitCount");
//创建userIDKey键和userID值对
String userID=new String("userID");
String uesrIDKey=new String("userID");
//如果页面有新的访问者
if(session.isNew()){
title="Servlet Session 实例";
//添加名称为userIDKey的对象uesrID到session会话
session.setAttribute(uesrIDKey,userID);
}else{
//获取名称为visitCountKey的对象
visitCount=(Integer) session.getAttribute("visitCountKey");
visitCount+=1;
//获取名称为uesrIDKey的对象
userID=(String)session.getAttribute("userIDKey");
}
session.setAttribute("visitCountKey",visitCount);
// 设置响应内容类型
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String docType = "<!DOCTYPE html>\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor=\"#f0f0f0\">\n" +
"<h1 align=\"center\">" + title + "</h1>\n" +
"<h2 align=\"center\">Session 信息</h2>\n" +
"<table border=\"1\" align=\"center\">\n" +
"<tr bgcolor=\"#949494\">\n" +
" <th>Session 信息</th><th>值</th></tr>\n" +
"<tr>\n" +
" <td>id</td>\n" +
" <td>" + session.getId() + "</td></tr>\n" +
"<tr>\n" +
" <td>创建时间</td>\n" +
" <td>" + df.format(createTime) +
" </td></tr>\n" +
"<tr>\n" +
" <td>最后访问时间</td>\n" +
" <td>" + df.format(lastAccessTime) +
" </td></tr>\n" +
"<tr>\n" +
" <td>用户 ID</td>\n" +
" <td>" + userID +
" </td></tr>\n" +
"<tr>\n" +
" <td>访问统计:</td>\n" +
" <td>" + visitCount + "</td></tr>\n" +
"</table>\n" +
"</body></html>");
}
}
删除Session会话:
1.移除一个session属性:public void removeArrtribute(String name)删除与特定键关联的值
2.删除整个session会话:public void invalidate()
3.设置session会话过期时间:public void setMaxInactiveInterval(int interval)