在 java 中经常会看到各式各样的 session,但是每种 session 表示的类其实是不一样的。
1、javax.servlet.http.HttpSession
用的最多的是 HttpSession,也叫用户 session,主要用在 JavaWeb 开发中,session 共享,session 超时设置以及验证登录等
package javax.servlet.http;
import java.util.Enumeration;
import javax.servlet.ServletContext;
public interface HttpSession {
long getCreationTime();
String getId();
long getLastAccessedTime();
ServletContext getServletContext();
void setMaxInactiveInterval(int var1);
int getMaxInactiveInterval();
/** @deprecated */
@Deprecated
HttpSessionContext getSessionContext();
Object getAttribute(String var1);
/** @deprecated */
@Deprecated
Object getValue(String var1);
Enumeration<String> getAttributeNames();
/** @deprecated */
@Deprecated
String[] getValueNames();
void setAttribute(String var1, Object var2);
/** @deprecated */
@Deprecated
void putValue(String var1, Object var2);
void removeAttribute(String var1);
/** @deprecated */
@Deprecated
void removeValue(String var1);
void invalidate();
boolean isNew();
}
2、javax.websocket.Session
WebSocket 会话表示两个 Web 套接字端点之间的对话。 一旦 websocket 握手成功完成,websocket 实现就会为端点提供一个开放的 websocket 会话
。 端点可以通过 MessageHandler 来向会话传入消息,并且可以通过 RemoteEndpoint 对象将消息发送到会话的另一端
。
一旦会话关闭,它就不再可供应用程序使用,调用它的任何方法(close() 方法除外)都将导致抛出 IllegalStateException。 开发人员应该在 Endpoint.onClose(javax.websocket.Session, javax.websocket.CloseReason) 方法执行之前从会话中获取信息。
会话对象可以被多个线程调用
。 在这种情况下,实现必须确保会话可变属性的完整性。
package javax.websocket;
import java.io.Closeable;
import java.io.IOException;
import java.net.URI;
import java.security.Principal;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.websocket.MessageHandler.Partial;
import javax.websocket.MessageHandler.Whole;
import javax.websocket.RemoteEndpoint.Async;
import javax.websocket.RemoteEndpoint.Basic;
public interface Session extends Closeable {
WebSocketContainer getContainer();
void addMessageHandler(MessageHandler var1) throws IllegalStateException;
Set<MessageHandler> getMessageHandlers();
void removeMessageHandler(MessageHandler var1);
String getProtocolVersion();
String getNegotiatedSubprotocol();
List<Extension> getNegotiatedExtensions();
boolean isSecure();
boolean isOpen();
long getMaxIdleTimeout();
void setMaxIdleTimeout(long var1);
void setMaxBinaryMessageBufferSize(int var1);
int getMaxBinaryMessageBufferSize();
void setMaxTextMessageBufferSize(int var1);
int getMaxTextMessageBufferSize();
Async getAsyncRemote();
Basic getBasicRemote();
String getId();
void close() throws IOException;
void close(CloseReason var1) throws IOException;
URI getRequestURI();
Map<String, List<String>> getRequestParameterMap();
String getQueryString();
Map<String, String> getPathParameters();
Map<String, Object> getUserProperties();
Principal getUserPrincipal();
Set<Session> getOpenSessions();
<T> void addMessageHandler(Class<T> var1, Partial<T> var2) throws IllegalStateException;
<T> void addMessageHandler(Class<T> var1, Whole<T> var2) throws IllegalStateException;
}
3、hibernate 的 Session 接口
public interface Session extends Serializable
Java 应用程序与 Hibernate 之间的主要运行时接口,是抽象了持久化服务概念的核心抽象 API 类。
Session 的主要功能是提供对映射的实体类实例的创建、读取和删除操作
。实例可能以下面三种状态存在:
自由状态(transient):不曾进行持久化,未与任何 Session 相关联;
持久化状态(persistent):仅与一个 Session 相关联;
游离状态(detached):已经进行过持久化,但当前未与任何 Session 相关联;
Session 的生命周期绑定在一个物理的事务(tansaction)上面。
4、javax.jms.session
这个是用于消息队列发送时用到的 session,通过 session 可以获取到队列发送器,发送消息。