マルチパートフォームの投稿を処理するサーブレットがあります。投稿は、実際にはページに埋め込まれた 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());
}
これにより、すべてのセッションが一意の ID によってマップされた属性としてServletContextに追加されます。代わりにセッションのマップをコンテキストに入れることもできますが、冗長に思えます。この決定についての考えを投稿してください。次に、次のメソッドをサーブレットに追加して、セッションを ID で解決します。
private HttpSession getSession(final String sessionId) {
final ServletContext context = getServletContext();
final HttpSession session = (HttpSession) context.getAttribute(sessionId);
return session;
}