Ich habe eine "Nachschlagen" HTML-Seite, die zusammen mit einer Java-HttpServlet-Klasse funktioniert, die einige Funktionalität behandelt und die Ergebnisse an eine JSP-Seite sendet.Wie man ein Sitzungsattribut am Leben erhält
Um die Suche durchzuführen, brauche ich ein Login-Ergebnis-Objekt, das ich in die Sitzung in einem anderen Servlet eingefügt habe.
Dies ist, was im Login-Servlet passiert:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// get attributes that were filled in on the login webpage
request.getAttribute("username");
request.getAttribute("password");
String username = request.getParameter("username");
String password = request.getParameter("password");
LoginManager loginManager = new LoginManager(username.trim(), password.trim());
if (loginManager.doLogin() == true) {
javax.servlet.http.HttpSession session = request.getSession();
session.setAttribute("loginResult", loginManager.getLoginResult());
session.setAttribute("binding", loginManager.getBinding());
response.sendRedirect("lookup.html");
Dies ist, was auf dem Servlet
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
javax.servlet.http.HttpSession session = request.getSession();
LoginResult lr = (LoginResult) session.getAttribute("loginResult");
if(lr == null)
{
throw new Exception("Your session has expired, please log in again");
}
// some look up code
RequestDispatcher dispatcher = request.getRequestDispatcher("result.jsp");
request.setAttribute("result", result);
request.setAttribute("question", question);
request.setAttribute("xml", xml);
dispatcher.forward(request, response);
In meiner jsp Seite wird eine Eingabeknopf aufblicken geschieht, die die folgenden: ONCLICK = "window.location.href = 'lookup.html'" />
Manchmal, wenn ich meine Ergebnisseite unkonzentriert lasse oder minimiere oder was auch immer, oder ich warte zu lange und klicke auf die Rückkehr zur Nachschlagenpag e es scheint, dass mein logingergebnis objekt == null. Also meiner Meinung nach scheint es abgelaufen zu sein. Obwohl ich dachte, dass der Apache Tomcat Server Sitzungen für 30 Minuten am Leben hält.
Irgendeine Vermutung, warum mein Sitzungsattribut verschwindet?
Ich denke, um einen sinnvollen Vorschlag zu machen, sollten Sie den Code veröffentlichen, der enthält, wie Sie das Sitzungsattribut erstellen und wie Sie es später verwenden. –
die Formulierung "Rückkehr zur Lookup-Seite" ist unklar. meinst du - du loggst ein, dann gehst du auf die Nachschlageseite, dann verlässt du die Seite für einige Zeit, und dann siehst du deine geöffnete Seite wieder (was ist die Nachschlageseite) und die Sitzung verschwindet? was meinst du mit "return" genau? –
Nach dem Einloggen gelangen Sie auf die Nachschlageseite. Von der Nachschlage-Seite können Sie etwas abfragen. Die Ergebnisse werden auf der Ergebnisseite angezeigt. Auf der Ergebnisseite können Sie zur Nachschlageseite zurückkehren. Solange die Sitzungsattribute existieren, können Sie erneut abfragen. Daher möchte ich, dass die Sitzung so lange dauert, wie der Browser eines Benutzers geöffnet ist. –