session 是记录服务器会话的一个对象,他可以跟踪用户从登陆到关闭浏览器一系列动作,具体的创建代码
public void addSession(HttpServletRequest request,String key,String value){
HttpSession session = request.getSession();
session.setAttribute(key, value);
}
通过 HttpServletRequest 对象获取session 对象, 对应的tomcat 下的org.apache.catalina.connector.RequestFacade 的 getSession()方法
@Override
public HttpSession getSession() {
if (request == null) {
throw new IllegalStateException(
sm.getString("requestFacade.nullRequest"));
}
return getSession(true);
}
调用 getSession(create) 方法
@Override
//create 参数就是是否创建session 如果false,服务器中不存在对应的session,则返回null
public HttpSession getSession(boolean create) {
if (request == null) {
throw new IllegalStateException(
sm.getString("requestFacade.nullRequest"));
}
if (SecurityUtil.isPackageProtectionEnabled()){
return AccessController.
doPrivileged(new GetSessionPrivilegedAction(create));
} else {
return request.getSession(create);
}
}
将获取session转交给org.apache.catalina.connector.Request 类处理,RequestFacade 是Request 类的一个门面类,他包装了Request 的方法调用,对外开放,隐藏了Request 的实现细节,
调用了 Request 类的getSession(create) 方法
@Override
public HttpSession getSession(boolean create) {
//处理获取session
Session session = doGetSession(create);
if (session == null) {
return null;
}
return sessi