У меня есть сервлет, который обрабатывает многострочный пост. Сообщение фактически создается компонентом загрузки 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:
private HttpSession getSession(final String sessionId) {
final ServletContext context = getServletContext();
final HttpSession session = (HttpSession) context.getAttribute(sessionId);
return session;
}