2012-04-05 12 views
11

Allgemeine Frage über Java-Servlets und die beste Möglichkeit, Anfragen zu bearbeiten. Wenn ich meine Methode doGet von einem Remote-Server-Anforderung getroffen:Java-Servlet - Sitzungsbereinigung (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? 
} 

Nachdem ich die Anfrage an meinem Ende verarbeiten und meine Ausgabe an den Anforderer erzeugen, möchte ich im Grunde „kill“ ihre Sitzung. Momentan verweilt diese Sitzung und verschlingt so Speicher. Sobald das Maximum erreicht ist, sind alle anderen Anrufe abgelaufen.

Ich versuchte, ein Http Objekt erstellen das Request-Objekt verwenden, bekam aber die gleichen Ergebnisse:

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

Ich habe den Eindruck, dass Ihr konkretes Problem muss entfernen in einer anderen Art und Weise gelöst werden. – BalusC

+0

Wahrscheinlich. Das ultimative Ziel ist es, eine Sitzung in meinem Sitzungspool zu beenden, nachdem ihre Anfrage bearbeitet wurde. Ob das das Anforderungsobjekt löscht oder nicht, oder ein Sitzungsobjekt für diese Sitzung erstellt wird, um es zu löschen, bin ich nicht sicher. – user82302124

Antwort

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

ist die richtige Art und Weise, wie die vorgeschlagene zu gehen Dokumentation. Eine neue Sitzung wird erstellt, sobald eine neue Anfrage gesendet wird.

Sie haben erwähnt, dass Ihre Sitzungen noch Speicher belegen. Haben Sie andere Referenzen auf diese Objekte in der Sitzung?

Sie könnten auch einen Blick haben wollen: Servlet Session behavior and Session.invalidate

2

Versuchen mit

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

Wenn Sie Session nicht Verhalten d.h wollen, Zustand zwischen mehreren Anfragen haben. Warum möchten Sie überhaupt eine Sitzung erstellen/verwenden? Erstellen Sie keine Sitzung oder speichern Sie nichts in der Sitzung.

Um sicherzustellen, dass der Code keine Sitzung verwendet, schreiben Sie einen Anforderungswrapper, der die Methoden getSession() überschreibt.

5

können Sie ein Attribut aus einer Sitzung mit

session.removeAttribute("attribute name"); 
Verwandte Themen