Warnung, wenn eine Variable eingegeben wird

Bitte aktiviere JavaScript!
Hallo,

in meiner Java-Klasse (Login) habe ich die Variable username so definiert: req.setAttribute("username", req.getParameter("username"));.

Wenn ich in index.jsp nun die Variable ${username} ausgeben will, funktioniert zwar alles bestens und der Wert wird mir im Browser auch ausgegeben aber ich bekomme von Intellij folgende Warnung:
Cannot resolve variable 'username'
Wenn ich den folgenden Code benutze, verschwindet die Warnung:
<jsp:useBean id="username" scope="request" type="ch.yourclick.zt.Login"/>

Aber der Browser liefert mir ein Internal Server Error (500):
Type Exception Report
Message Beim Verarbeiten von [/backend/welcome.jsp] ist in Zeile [1] eine Ausnahme erzeugt worden
Bescrheibung The server encountered an unexpected condition that prevented it from fulfilling the request.
Was mache ich da genau falsch?
 
A

Anzeige




Vielleicht hilft dir unser Kurs hier weiter —> (hier klicken)
Mit req.setAttribute definierst Du keine Variable, sondern legst einfach einen Wert in der Attribute-Map des Requests ab. enn Du per ${username} darauf zugreifst, wirst Du gewarnt, weil es eben keine entsprechende Variable dafür gibt. Du kannst in Deinem JSP eine Variable definieren: <% String username = (String) request.getAttribute("username"); %>

Wenn ich den folgenden Code benutze, verschwindet die Warnung:
<jsp:useBean id="username" scope="request" type="ch.yourclick.zt.Login"/>
Die Warnung verschwindet, weil Du mit id angibst, dass Du per username auf eine Bean zugreifen willst. Das type-Attribut gibt an, dass es username im request-Scope bereits gibt und gibt weiter an, dass username vom Typ ch.yourclick.zt.Login wäre. Wenn das überhaupt funktioniert, dann müsste beim Typ java.lang.String stehen.

Aber der Browser liefert mir ein Internal Server Error (500):
Im Log-File sollte sich ein kompletter Stacktrace befinden. Schau Dir den mal an.
 
Hmm, also mein JSP sieht so aus:

Code:
<% String username = (String) request.getAttribute("username"); %>
Hallo ${username}
Jetzt bekomme ich aber 2 Warnungen:
Variable 'username' is never used
und
Cannot resolve variable 'username'
Edit:
Ich habe eine andere Lösung gefunden und zwar, statt ${username} kann ich einfach ${requestScope.username} verwenden und die Warnung verschwindet.
 
Zuletzt bearbeitet:
Ja, mit <% String username; %> wird eine lokale Variable definiert. Zugriff müsste dann in <% %> Blöcken erfolgen, z. B. <%= username %>. Die EL-Expression findet die lokale Variable nicht. Tatsächlich bräuchtest Du für das, was Du aktuell hast, noch nicht einmal ein zusätzliches Servlet, der Zugriff über den Scope ist aber schon richtig.

Möglicherweise wurden von den Betreibern des Forums ungekennzeichnete Werbetexte in meinen Beitrag eingefügt, die nicht als solche erkennbar sind. Das können beispielsweise Kursempfehlungen sein. Ich distanziere mich davon und empfehle, solchen Links nicht zu folgen.
 
Oh super, vielen Dank für diese Info! Mit <%= username %> scheint es jedenfalls bestens zu funktionieren. Hat es irgendeinen Nachteil wenn ich stattdessen nur ${requestScope.username} verwende?
 
Das sind zwei völlig verschiedene Ansätze. Mit <% %> wird Code im Servlet erzeugt (die JSP-Dateien werden zu Servlets übersetzt), während EL-Expressions zur Laufzeit ausgewertet werden. Ich an Deiner Stelle würde so gut wie immer mit EL-Expressions ${....}, mit CDI-Beans arbeiten und auf die Angabe des Scopes im JSP verzichten.

Warum? Die JSP-Datei soll nur eine Sicht auf etwas sein und daher keine Logik enthalten. Die Logik wird in CDI-Beans und Servlets erledigen. Die Scopes werden von CDI direkt unterstützt.

Möglicherweise wurden von den Betreibern des Forums ungekennzeichnete Werbetexte in meinen Beitrag eingefügt, die nicht als solche erkennbar sind. Das können beispielsweise Kursempfehlungen sein. Ich distanziere mich davon und empfehle, solchen Links nicht zu folgen.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben