Java-Code in JSP vermeiden: 3 leistungsstarke JSP 2-Ansätze

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Leb wohl, Spaghetti-Code: So entfernen Sie Java endgültig aus JSP

\n\n

Wenn Sie jemals eine alte JSP-Datei geöffnet und ein Durcheinander aus HTML, <% %>-Scriptlets und Java-Logik gesehen haben, kennen Sie dieses Gefühl. Die Vermischung von Präsentation und Geschäftslogik verwandelt die Projektwartung in die Hölle. Die Frage "How can I avoid Java code in JSP files, using JSP 2?" auf Stack Overflow hat tausende Aufrufe – und das aus gutem Grund.

\n\n

Die gute Nachricht: JSP 2 (Java Server Pages Version 2) hat uns die Werkzeuge gegeben, um Scriptlets für immer zu vergessen. In diesem Artikel zeige ich drei praktische Ansätze, die Ihre JSPs in saubere, lesbare Vorlagen verwandeln. Kein Blabla – nur Code und Praxis.

\n\n

Warum sind Scriptlets böse? Die Sicht eines Entwicklers

\n\n

Scriptlets (diese <% ... %>-Teile) verletzen das Hauptprinzip von MVC: die Trennung von Logik und Darstellung. Hier sind drei Gründe, warum Sie sie loswerden sollten:

\n\n
    \n
  • Schwierige Wartung. Wenn JSPs SQL-Abfragen und Bedingungen enthalten, kann ein Designer nicht sicher das Layout bearbeiten.
  • \n
  • Schwer zu testen. Die Logik innerhalb von JSPs kann nicht mit Unit-Tests getestet werden.
  • \n
  • Schlechte Lesbarkeit. Der Code wird zu "Spaghetti", bei dem Java mit HTML vermischt ist.
  • \n
\n\n

JSP 2 bietet elegante Alternativen. Lassen Sie uns diese anhand einer realen Aufgabe analysieren: Ausgabe einer Benutzerliste aus der Datenbank.

\n\n

Ansatz 1: Expression Language (EL) – Ihr neuer Freund

\n\n

Expression Language (EL) ermöglicht den Zugriff auf Java-Objekte direkt in JSP, ohne eine einzige Zeile Java-Code. Die Syntax ${...} ist intuitiv verständlich.

\n\n

Vorher (mit Java-Code):

\n\n
<% \n    User user = (User) request.getAttribute("user"); \n    out.println("Hallo, " + user.getName());\n%>
\n\n

Nachher (mit EL):

\n\n
<p>Hallo, ${user.name}</p>
\n\n

EL ruft automatisch Getter auf. Wenn user.getName() einen String zurückgibt, wird er in HTML eingesetzt. Wenn das Objekt null ist, gibt EL einfach nichts aus (ohne NullPointerException).

\n\n

Wo verwenden: Zur Ausgabe von Daten aus request-, session-, application-Scope oder Anfrageparametern.

\n\n

Ansatz 2: JSTL (JSP Standard Tag Library) – Schleifen und Bedingungen ohne Java

\n\n

JSTL ist eine Sammlung vorgefertigter Tags, die 90% der typischen Aufgaben abdecken: Schleifen, Bedingungen, Formatierung, Arbeit mit URLs. Zum Einbinden fügen Sie einfach die Abhängigkeit in pom.xml (Maven) hinzu oder laden das JAR herunter.

\n\n

Beispiel: Ausgabe einer Benutzerliste in einer Tabelle.

\n\n

Vorher (Scriptlets):

\n\n
<table>\n    <%\n        List<User> users = (List<User>) request.getAttribute("users");\n        for (User u : users) {\n    %>\n        <tr><td><%= u.getName() %></td><td><%= u.getEmail() %></td></tr>\n    <%\n        }\n    %>\n</table>
\n\n

Nachher (JSTL + EL):

\n\n
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>\n<table>\n    <c:forEach var="u" items="${users}">\n        <tr>\n            <td>${u.name}</td>\n            <td>${u.email}</td>\n        </tr>\n    </c:forEach>\n</table>
\n\n

Beachten Sie: Keine einzige Zeile Java! Das Tag <c:forEach> funktioniert wie eine foreach-Schleife, und ${u.name} ist ein EL-Ausdruck. Der Code ist lesbar und sicher geworden.

\n\n

Weitere nützliche JSTL-Tags:

\n
    \n
  • <c:if test="${condition}"> – bedingte Ausgabe
  • \n
  • <c:choose> – Analog zu switch
  • \n
  • <c:set var="x" value="..." /> – Variable erstellen
  • \n
  • <fmt:formatDate> – Datumsformatierung
  • \n
\n\n

Ansatz 3: Custom Tags (benutzerdefinierte Tags)

Blogs

Buchempfehlungen