it-swarm.com.de

Wie verwende ich eine Sitzung in JSP-Seiten, um Informationen zu erhalten?

Ich habe eine JSP-Seite zum Bearbeiten einiger Benutzerinformationen. Wenn sich ein Benutzer auf der Website anmeldet, behalte ich die Informationen in der Sitzung und versuche dann auf meiner Bearbeitungsseite Folgendes:

<%! String username=session.getAttribute("username"); %>
<form action="editinfo" method="post">
    <table>
        <tr>
            <td>Username: </td><td> <input type="text" value="<%=username %>" /> </td>
        </tr>
    </table>
</form>

es wird jedoch der Fehler ausgegeben, dass die Sitzung nicht aufgelöst werden kann. Was kann ich tun?

42
yrazlik

JSP implizit Objekte wie session, request usw. sind in JSP-Deklarationstags <%! %> Nicht verfügbar.

Sie können es direkt in Ihrem Ausdruck als verwenden

<td>Username: </td>
<td><input type="text" value="<%= session.getAttribute("username") %>" /></td>

Auf der anderen Seite ist die Verwendung von Scriptlets in JSP längst veraltet. Die Verwendung von ELAusdruckssprache) und JSTL-Tags wird dringend empfohlen. Zum Beispiel könnten Sie hier EL als verwenden

<td>Username: </td>
<td><input type="text" value="${username}" /></td>

Das Beste daran ist, dass die Bereichsauflösung automatisch erfolgt. Also, hier --- (Benutzername könnte kommen von Seite oder Anfrage oder Sitzung oder Anwendung Bereiche in dieser Reihenfolge. Wenn Sie dies für eine bestimmte Instanz aufgrund einer Namenskollision überschreiben müssen, können Sie den Bereich explizit als angeben

<td><input type="text" value="${requestScope.username}" /></td> or,
<td><input type="text" value="${sessionScope.username}" /></td> or,
<td><input type="text" value="${applicationScope.username}" /></td>
92
Ravi Thapliyal

Verwenden

<% String username = (String)request.getSession().getAttribute(...); %>

Beachten Sie, dass Ihre Verwendung von <%! ... %> Auf Klassenebene übersetzt wird, die Anforderung jedoch nur in der service() -Methode des übersetzten Servlets verfügbar ist.

Sehen Sie, wie JSP-Code in ein Servlet übersetzt wird.

9
Uooo

Der Grund für den Kompilierungsfehler ist, dass Sie versuchen, im Deklarationsblock (<%! %>) wo es nicht verfügbar ist. Alle impliziten Objekte von jsp sind nur in der Dienstmethode verfügbar. Der Code deklarativer Blöcke geht außerhalb der Dienstmethode.

Ich würde Ihnen raten, EL zu verwenden. Es ist ein vereinfachter Ansatz.

${sessionScope.username} würde Ihnen die gewünschte Ausgabe geben.

8
Darshan Mehta

Angenommen, Sie möchten ID auf einer anderen Webseite verwenden, dann können Sie dies mit folgendem Code-Snippet tun:

String id=(String)session.getAttribute("uid");

Hier ist uid das Attribut, in dem Sie die ID zuvor gespeichert haben. Sie können es einstellen durch:

session.setAttribute("uid",id);
0
Surya S