Frage

Ich bin neu bei JEE und das verwirrt mich.Entsprechend HttpSession.html#setMaxInactiveInterval(int Intervall) Dokumentation

Ein interval Wert von zero oder weniger zeigt an, dass die Die Sitzung sollte niemals eine Zeitüberschreitung aufweisen.

aber laut meinem Lehrbuch (das schon ein paar Jahre alt ist – daher gehe ich davon aus, dass es nicht immer richtig ist) sollte die Verwendung von Null als Argument zu einem sofortigen Timeout der Sitzung führen.

Dieser Code

public class Test extends HttpServlet {

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");

        PrintWriter out = response.getWriter();

        HttpSession session = request.getSession();
        session.setAttribute("foo", 42);
        session.setMaxInactiveInterval(0);

        out.println(session.getAttribute("foo"));//problem here

    }
}

Die Verwendung bei Glassfish 4.0 scheint die Theorie aus dem Lehrbuch zu bestätigen und nicht aus einer neueren offiziellen Dokumentation, da sie zurückkehrt HTTP-Status 500 – Interner Serverfehler mit Fehlermeldung

java.lang.IllegalStateException: getAttribute: Session already invalidated

Was geht hier vor sich?Ist dieser Glassfish 4.0-Fehler oder die Dokumentation falsch?Oder gibt es vielleicht eine dritte Option?


PS.Dieser Code funktioniert wie er sollte mit negativen Werten (Sitzung wird nicht ungültig gemacht) und ich verwende -1 anstatt 0 in meinem Code.Mich interessiert nur, was los ist 0.

War es hilfreich?

Lösung

Der Servlet-Spezifikation Kapitel über Sitzungs-Timeouts besagt

Wenn der Zeitraum für eine Sitzung auf -1 festgelegt ist, läuft die Sitzung nie ab.

GlasshFish scheint das also abgedeckt zu haben.Ich kann in der Spezifikation keinen Hinweis finden, der besagt, dass dasselbe für einen Wert von gelten sollte 0 mit setMaxInactiveInterval().Allerdings heißt es

Der session-config Definiert die Sitzungsparameter für diese Webanwendung.Das Unterelement session-timeout Definiert das Standard -Sitzungsintervall für alle in dieser Webanwendung erstellten Sitzungen.Die angegebene Auszeit muss in einer ganzen Anzahl von Minuten ausgedrückt werden. Wenn das Timeout 0 oder weniger beträgt, Der Container stellt sicher, dass das Standardverhalten von Sitzungen niemals zum Zeitpunkt kommt.Wenn dieses Element nicht angegeben ist, muss der Container seine Standardzeit festlegen.

Andere Tipps

Dies ist bereits eine Zeitüberschreitung und ungültig

session.setMaxInactiveInterval(0); // mean inactive immediately

Das ist also die richtige Fehlermeldung.(Weitere Informationen finden Sie im Hauptbuch.)

Sie versuchen, auf einen Objektwert zuzugreifen, der nicht vorhanden ist.es ist bereits zerstört

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top