session和cookie
文章目录
session工作机制
当第一次调用getSession()就创建了session对象,并且会为f该对象分配一个id,将这个id保存到session对象中,再复制一个副本以cookie的方式保存到浏览器
在以后再次调用getSession()方法的时候会将客户端传递的cookie进行遍历,如果有JESSIONID并且能和服务器端的id匹配则不再生成新的session内置对象,而是直接返回该对象
如果直接访问一个servlet,在servlet中不调用getSession()方法是不会生成新的session内置对象的
package com.xie;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
public class EmpServlet extends HttpServlet{
public void getCookie(HttpServletRequest req, HttpServletResponse resp) {
//调用getSession()方法
req.getSession();
Cookie [] ck = req.getCookies();
//遍历数组
if (ck!=null) {
for (Cookie cookie : ck) {
System.out.println(cookie.getName()+"="+cookie.getValue());
}
}
}
}
还有一种情况会产生session内置对象,访问jsp页面的时候会产生该对象。
之所以访问jsp页面能创建session对象,原因是jsp其实也是一个特殊的Servlet,而且在这个特殊的servlet中默认调用了getSession()方法
当你访问一个jsp页面的时候,会将jsp转换成一个*.java源码文件,之后再将该类转换为*.calss文件,其实转换后的*.class文件就是一个特殊的servlet,而且在该servlet中调用getSession()方法