Servlet Bei jedem Request wird eine neue Session erstellt.

jann

Mitglied
Hallo,

seit langem versuche ich ein hartnäckiges Problem zu lösen und hatte es zeitweise beeits aufgegeben, da ich auch nach intensivem Suchen im Netz keine Lösung gefunden habe.

Folgendes: Ich betreibe seit vielen Jahren ein Webanwendung, welche unter Tomcat 6 und JVM 1.6 wunderbar läuft (Konfiguration 1).

Da der Platz auf dem Server mittlerweile eng wird und die Performance auch schwächelt möchte ich gerne innerhalb des Server-Anbieters umziehen. Auf dem neuen Server wird dann Tomcat 8 mit einer JVM 1.7 arbeiten (Konfiguration 2).

Jetzt passiert es aber, dass exakt die gleiche Anwendung, welche unter Tomcat 6 mit JVM 1.6 problemlos läuft, auf dem neuen Server nicht mehr funktioniert.

Bei der Fehleranalyse habe ich festgestellt, dass bei jedem Request eine neue Session erstellt wird, was natürlich die Benutzung der Webanwendung unmöglich macht!

Ich kann das Verhalten der Anwendung unter beiden Konfigurationen auf meinem Rechner mit dem Debugger von Netbeans wunderbar reproduzieren.

Natürlich habe ich für jede Konfiguration einen eigenen Build angestoßen...

Mir scheint, dass es irgendeine nötige Veränderung in der Konfiguration von Tomcat geben muss, die ich aber leider nicht kenne.

Hat jemand eine Idee?

Vielen Dank im voraus, Jann
 

AndyJ

Bekanntes Mitglied
Vielleicht ist es der Session-Timeout. Den setzt man normalerweise in der web.xml und wenn der da nicht gesetzt wurde, dann wird der Default-Wert verwendet. Bei Tomcat is der glaube ich hier: CATALINA_BASE/conf/web.xml

Cheers,
Andy
 

jann

Mitglied
Hallo Andy,
vielen Dank für die Antwort. Leider scheint die Lösung nicht so trivial. Die Anwendung läuft ja unter der Konfiguration 1 wie erwartet bzw. das Sessionmanagement läuft Lehrbuchmäßig. Nur unter Konfiguration 2 eben nicht.

Ich habe den Umzug mittlerweile weit über ein Jahr vor mich hergeschoben, weil ich keine Lösung gefunden hatte. Gestern Abend habe ich aber einen Lösungsansatz auf stackoverflow.com gefunden, der bei einem ersten Test anscheinend zur Lösung führt.
Bei dem Ansatz wird die JSESSIONID aus dem Request gelesen und dann in die Response gegeben. Klingt unsinnig funktioniert aber. Mit etwas debuggen konnte ich nämlich feststellen, dass unter Konfiguration 2 die JSESSIONID nicht automatisch im Browser als Cookie abgelegt wurde, was natürlich zu meinen Problemen geführt hat.
Hier der Link: https://stackoverflow.com/a/35054198

Und das ist der Code, der nach der Anmeldung in die Anwendung die JSESSIONID in die Response schreibt und damit auch im Browser:

Java:
HttpSession session = request.getSession();
if (request.getParameter("JSESSIONID") != null) {
    Cookie userCookie = new Cookie("JSESSIONID", request.getParameter("JSESSIONID"));
    response.addCookie(userCookie);
} else {
    String sessionId = session.getId();
    Cookie userCookie = new Cookie("JSESSIONID", sessionId);
    response.addCookie(userCookie);
}

Mich wundert allerdings immer noch warum das Problem anscheinend nicht bei vielen Leuten auftritt - und vor allem warum es überhaupt auftritt...
 

AndyJ

Bekanntes Mitglied
Der Fehler muss ja nicht unbedingt beim Tomcat liegen, sondern kann auch vom Browser verursacht werden. Schau dir mal das an: https://www.wiztools.org/
Da kannst du dir den WizTools REST-Client runterladen. Anders als der Name annehmen laesst, kannst du damit jede Art Request zusammenbauen und an deinen Server senden - und hast die volle Kontrolle ueber alle Aspekte. Die Antwort ist ebenso ausfuehrlich. Vielleicht kannst du damit die Fehlerursache eingrenzen.

Cheers,
Andy
 

jann

Mitglied
Hallo Andy,
es hat nun etwas gedauert mit meiner Antwort...
Den Grund für dieses Verhalten konnte ich nicht finden aber es tritt bei verschiedenen Browsern auf unterschiedlichen Rechnern und Betriebssystemen auf. Wo früher automatisch eine neue SessionID erstellt und im Browser abgelegt wurde, muss ich es unter der Konfiguration 2 wirklich explizit machen, so wie im Codebeispiel dargestellt.
Ich habe diese Funktion jetzt an zentraler Stelle im Controller der Anwendung installiert und werde es jetzt so lassen. Vielleicht läuft mir irgendwann ja mal eine Erklärung über den Weg ;-)
Vielen Dank! Jann
 

Barista

Top Contributor
Im Jahr 2000 habe ich mal an einer ganz einfachen Web-Applikation mit JSP und Servlet mitgearbeitet.

Dort mussten wir allen Links die JSESSIONID als Parameter mitgeben.

In Forms wurde dafür ein hidden-Field verwendet.
 

jann

Mitglied
Hallo Barista,

ja, das kann man machen. Mein Problem ist aber ein anderes...
Jetzt habe ich aber eine Lösung gefunden (sh. Codebeispiel) - zwar nicht so ganz befriedigend, da ich die Ursache für das Nichtsetzen der JSESSIONID nicht kenne aber es funktioniert.

Gruß, Jann
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
borobudur Servlet Business-Logik wird bei jedem Request neu erstellt Web Tier 13
BuckRogers JPA Datenbankabfrage bei jedem Request?! Web Tier 6
E Java Servlet doPost request, Mehrere Parameter mit demselben Namen aus Tabellenzeilen Web Tier 2
M XML http request zeigt die eigene Website als response Web Tier 2
M request.getUserPrincipal() Typecasting Web Tier 1
S JSF CommandButton soll keine Request starten! Web Tier 2
X Managed Bean Scope zwischen Request und Session gesucht Web Tier 6
S JSF Request länger haltbar machen *grins* oder injection.. Web Tier 6
lukas24680 Servlet pro Request Web Tier 2
7 kein Absatz mittels request.getParameter()?? Web Tier 8
S Ajax Request verhindert forward? Web Tier 8
ruutaiokwu request.getParameter() Web Tier 3
J Request weiterleiten Web Tier 6
K Struts request Zugriff Web Tier 4
I Beim zurück-Link wird immer ein Request ausgeführt Web Tier 5
F Problem mit der Methode request.getRemotePort() Web Tier 2
F Object Request Web Tier 6
L Umlaute von Formular mit request holen Web Tier 16
P request.getParameter("name") von Formular auf JSP-Seite leer Web Tier 5
P Rausfinden, wo request herkam Web Tier 4
R Request Parameter kopieren und setzen Web Tier 3
S Per HTTP Request auf Ressourcen innerhalb eines JARs zugreif Web Tier 4
L JSF Request Scope und createValueBinding() Web Tier 1
D request.contextPath in Java-Klasse ausführen Web Tier 5
E Problem mit request.getParameter Web Tier 5
F richfaches:datascroller mit request-scope Web Tier 6
F JSF: Beans in Session oder Request? Web Tier 4
L Set<T> Attribut eines Objektes wird zu null in thymeleaf Web Tier 2
C JSP data wird nicht angezeigt Web Tier 6
P JSF (Primefaces) SelectOneMenu Value auf Array wird nicht gesetzt Web Tier 0
W Tabelle wird nicht aktualisiert Web Tier 8
A JSF String wird nicht angezeigt Web Tier 2
S JSF CSS wird gefunden aber inhaltlich nicht angewendet Web Tier 2
R get-methode der Managed-Bean wird immer 3 mal ausgeführt Web Tier 4
R JSF ManagedProperty wird nicht erstellt Web Tier 1
G JSF Radio Button ValueChangeListener Wert wird nicht übernommen Web Tier 2
M fileUploadListener geht nicht wenn Element zur Laufzeit gerendert wird Web Tier 2
T JSF Primefaces beim öffnen eines p:dialog wird eine neue View ManagedBean erstellt Web Tier 2
nrg Java-Code in Taglib wird nicht richtig ausgeführt. Web Tier 7
F JSF CSS Verschachtelung wird nicht abgebildet Web Tier 2
F.S.WhiTeY Servlet Servlet wird nicht angesprochen Web Tier 3
D JSF a4j:support wird nicht gefunden Web Tier 2
H JSP, Eclipse, Tomcat - Java Klasse wird nicht gefunden Web Tier 8
T JSF wird nicht ausgeführt Web Tier 4
aze JSF CommandButton:Action wird nicht ausgeführt Web Tier 2
H JSF ActionListener wird ausgeführt, aber ändert den Wert nicht. Web Tier 7
L JSF Beispiel wird nicht ausgeführt Web Tier 2
T JSF Eigener Converter wird nur für Eingabekomponenten aufgerufen? Web Tier 3
M JSF Button - Methode wird nicht aufgerufen Web Tier 4
L einfache JSF-Seite wird nicht angezeigt Web Tier 8
B JSF HtmlCommandButton --- Action wird nicht aufgerufen Web Tier 2
N JSF [Maven] Seam 2.2, Richfaces 3.3 - a4j wird nicht umgewandelt Web Tier 6
P JSF AJAX render wird nicht ausgeführt Web Tier 4
X Seite wird mit AJAX neu geladen Web Tier 4
P Servlet wird nicht gefunden - HTTP Error 503 Web Tier 7
S JSF Primefaces Thema, Css wird geladen, nur die Bilder nicht, bzw Resource wird nicht aufgelöst Web Tier 5
J JSF JSF2.0 template wird nicht gerendert!? Web Tier 2
C GWT: RPC wird nicht gefunden Web Tier 3
E JSP ist es noch aktuell oder wird heute was anderes genutzt? Web Tier 3
D [JSF] Lifecycle Methode wird mehrfach aufgerufen Web Tier 4
J JSF Custom Component ValueExpression wird nur als String erkannt Web Tier 2
E init() wird mehrmals aufgerufen Web Tier 4
L [RichFaces] Applikation wird mit NullPointerException beendet Web Tier 5
E CSS wird nach RequestDispatcher.redirect nicht mehr geladen Web Tier 7
V JSF: dataTable Getter wird nie aufgerufen Web Tier 6
megachucky JSF - JSTL Library wird nicht gefunden Web Tier 4
Z Servlet Response HTTP-Status 200 wird nicht übertragen Web Tier 3
K [gelöst] JSF-Seite wird nicht angezeigt Web Tier 3
H JSF Seite wird plain angezeigt Web Tier 3
N URL bei WebApp wird immer laenger Web Tier 5
G JSP/JSF Inputtext rerender wenn Value geändert wird Web Tier 2
I servlet: init wird auch nach ServletException aufgerufen Web Tier 3

Ähnliche Java Themen

Neue Themen


Oben