request内置对象中的属性只在当次请求中有效,如果要使属性在客户端跳转后仍然有效就要使用session内置对象了,session内置对象的类型是HTTPSession,
常见的方法有:
public void setAttribute(String name,Object value);保存属性
public Object getAttribute(String name);根据属性名取得值
public void removeValue(String name);根据属性名移除对应的值
public boolean isNew();判断当前用户是否是第一次访问
public void invalidate();销毁当前session,一般用于实现注销功能
public String getId();取得session的编号,和JSESSIONID cookie相同
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession httpSession = req.getSession();
String sessionId = httpSession.getId();
System.out.println(sessionId);
}
![在这里插入图片描述](https://img-blog.cs## 标题dnimg.cn/20190602210458514.png)
设置session的超时时间,在Tomcat/conf/web.xml中设置,默认30分钟
<!-- ==================== Default Session Config ===================== -->
<session-config>
<session-timeout>60</session-timeout>
</session-config>
session工作机制
当第一次调用getSession()时就创建了session对象,并且会为该对象分配一个id,将这个id保存在session对象中,在复制一个副本以cookie的形式保存到浏览器,
在以后再次调用getSession()方法的时候会将客户端传递的cookie进行遍历判断,
如果有JSESSIONID并且能和服务端的id匹配则不再生成新的session,而是直接返回该对象
如果直接访问servlet,不调用getSession()方法是不会生成session内置对象
访问JSP页面时也会产生session对象,访问JSP页面时会将jsp转换成java源码文件,再转换成.class文件,转换后的字节码文件就是一种特殊的servlet,默认调用getSession()方法