我有一个处理多部分表单的Servlet。该帖子实际上是由嵌入在页面中的Flash文件上传组件进行的。在某些浏览器中,Flash生成的POST不包含JSESSIONID,这使我无法在帖子期间从会话中加载某些信息。
Flash上传组件在特殊表单字段中包含Cookie和会话信息。使用此表单字段,我可以实际检索JSESSIONID值。问题是,我不知道如何使用这个JSESSIONID值手动加载该特定的会话。
编辑 – 基于ChssPly76的解决方案,我创建了以下HttpSessionListener实现:
@Override
public void sessionCreated(final HttpSessionEvent se) {
final HttpSession session = se.getSession();
final ServletContext context = session.getServletContext();
context.setAttribute(session.getId(), session);
}
@Override
public void sessionDestroyed(final HttpSessionEvent se) {
final HttpSession session = se.getSession();
final ServletContext context = session.getServletContext();
context.removeAttribute(session.getId());
}
它将所有会话添加到ServletContext作为其唯一ID所映射的属性。我可以在上下文中放置一个会话映射,但似乎是多余的。请对此决定发表任何想法。接下来,我将以下方法添加到我的servlet中以通过id来解析会话:
private HttpSession getSession(final String sessionId) {
final ServletContext context = getServletContext();
final HttpSession session = (HttpSession) context.getAttribute(sessionId);
return session;
}