2012-04-05 9 views
11

Javaサーブレットに関する一般的な質問と、リクエストを処理する最善の方法。私は、リモートサーバー要求から私のdoGetメソッドをヒットした場合:私は最後にリクエストを処理し、要求者に私の出力を生成した後Javaサーブレット - セッションクリーンアップ(HttpServletRequest)

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    .... 
    <do work here> 
    .... 
    kill(request); 
} 

private void kill(HttpServletRequest request) { 
//How do I kill the user session here? 
} 

、私は基本的に彼らのセッションを「殺す」にしたいです。現在、そのセッションは残っているので、メモリを食いつぶす。その後、最大に達すると、他のすべてのコールがタイムアウトになります。

私は、リクエストオブジェクトを使用してHttpSessionオブジェクトを作成しようとしたが、同じ結果を得た:

HttpSession session = request.getSession(); 
session.invalidate(); 
+1

を使用してセッションから属性を削除することができます。おそらく、 – BalusC

+0

。最終的な目標は、リクエストを処理した後にセッションプール内のセッションを終了したいということです。それがリクエストオブジェクトを強制終了しても、セッションオブジェクトを作成してそのセッションを削除しても、わかりません。 – user82302124

答えて

20
HttpSession session = request.getSession(false); 
if (session != null) { 
    session.invalidate(); 
} 

で試しによって示唆されているように行くための適切な方法でありますドキュメンテーション。新しい要求を送信すると、新しいセッションが作成されます。

セッションがまだメモリを占有しているとお伝えしました。セッション上でこれらのオブジェクトへの他の参照はありますか?

あなたはまた、見ていたいかもしれません:あなたは、複数の要求の間で状態を有する、すなわちセッションの振る舞いをたくない場合はServlet Session behavior and Session.invalidate

2

session = request.getSession(false); // so if no session is active no session is created 
if (session != null) 
    session.setMaxInactiveInterval(1); // so it expires immediatly 
1

を。どうしてあなたはセッションを作成/使用したいのですか?セッションを作成したり、セッションに何も保存したりしないでください。

コードがセッションを使用していないことを確認するには、getSession()メソッドをオーバーライドするリクエストラッパーを作成します。

5

あなたは私があなたの具体的な問題は別の方法で解決する必要のある印象を持って

session.removeAttribute("attribute name"); 
関連する問題