Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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:
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.
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"); %>
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.
Edit:
Ich habe eine andere Lösung gefunden und zwar, statt ${username} kann ich einfach ${requestScope.username} verwenden und die Warnung verschwindet.
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.