JavaServer Pages (JSP) ist eine Java-Standardtechnologie, mit der Sie dynamische, datengesteuerte Seiten für Ihre Java-Webanwendungen schreiben können. JSP basiert auf der Java-Servlet-Spezifikation. Die beiden Technologien arbeiten normalerweise zusammen, insbesondere in älteren Java-Webanwendungen., Aus Sicht der Codierung besteht der offensichtlichste Unterschied zwischen ihnen darin, dass Sie mit Servlets Java-Code schreiben und dann clientseitiges Markup (wie HTML) in diesen Code einbetten, während Sie mit JSP mit dem clientseitigen Skript oder Markup beginnen und dann JSP-Tags einbetten, um Ihre Seite mit dem Java-Backend zu verbinden.
JSP ist auch eng mit JSF (JavaServer Faces) verwandt, einer Java-Spezifikation zum Erstellen von MVC-Webanwendungen (Model-View-Controller). JSP ist eine relativ einfachere und ältere Technologie als JSF, der Standard für Java-Webframeworks wie Eclipse Mojarra, MyFaces und PrimeFaces., Während es nicht ungewöhnlich ist, dass JSP als Frontend für ältere JSF-Anwendungen verwendet wird, ist Facelets die bevorzugte Ansichtstechnologie für moderne JSF-Implementierungen.
Während JSP möglicherweise nicht die erste Wahl für das Erstellen dynamischer Webseiten ist, handelt es sich um eine Kern-Java-Webtechnologie. JSP-Seiten sind relativ schnell und einfach zu erstellen und interagieren nahtlos mit Java-Servlets in einem Servlet-Container wie Tomcat. Sie werden auf JSP in älteren Java-Webanwendungen stoßen, und von Zeit zu Zeit finden Sie es möglicherweise nützlich, um einfache, dynamische Java-Webseiten zu erstellen., Als Java-Entwickler sollten Sie zumindest mit JSP vertraut sein.
Dieser Artikel wird eine kurze Einführung in JavaServer-Seiten, einschließlich der JSP Standard Tag Library (JSTL). Beispiele zeigen, wie Sie eine einfache HTML-Seite schreiben, JSP-Tags einbetten, um eine Verbindung zu einem Java-Servlet herzustellen, und die Seite in einem Servlet-Container ausführen.
Weitere Informationen zu Java Servlets und JavaServer Faces finden Sie in früheren Artikeln dieser Serie.
Schreiben von JSP-Seiten
Eine einfache JSP-Seite (.jsp) besteht aus HTML-Markup mit JSP-Tags eingebettet., Wenn die Datei auf dem Server verarbeitet wird, wird der HTML-Code als Anwendungsansicht, eine Webseite, gerendert. Die eingebetteten JSP-Tags werden verwendet, um serverseitigen Code und Daten aufzurufen. Das Diagramm in Abbildung 1 zeigt die Interaktion zwischen HTML, JSP und dem Webanwendungsserver.
Listing 1 zeigt eine einfache JSP-Seite.
Auflistung 1., Eine einfache JSP-Seite
<html> <body> <p>${2 * 2} should equal 4</p> </body></html>
In Listing 1 sehen Sie einen HTML-Block, der einen JSP-Ausdruck enthält, der eine Anweisung an den Java-Server ist geschrieben mit Expression Language (EL). Im Ausdruck “ „ist die“${}
“ die JSP-Syntax zum Interpolieren von Code in HTML. Bei der Ausführung gibt die JSP die Ergebnisse der Ausführung aus, die sich im Ausdruck befinden. In diesem Fall ist die Ausgabe die Nummer 4.
JSP im Servlet-Container
JSP-Seiten müssen in einem Java-Servlet-Container bereitgestellt werden., Um eine Java-Webanwendung basierend auf JSP und Servlets bereitzustellen, werden Sie Ihr Paket .jsp-Dateien, Java-Code, und Anwendungsmetadaten in einem .war-Datei, die eine einfache .zip-Datei mit einer herkömmlichen Struktur für Webanwendungen.
Sobald Sie die JSP in Ihren Servlet-Container geladen haben, wird sie in ein Servlet kompiliert. JSPs – und Java-Servlets weisen ähnliche Eigenschaften auf, einschließlich der Möglichkeit, auf Anforderungsobjekte zuzugreifen und darauf zu reagieren. Apache Tomcat 9x ist die Referenzimplementierung für die Servlet 4.0-und JSP 2.3-Spezifikationen. (Beachten Sie, dass updates zwischen JSP 2.,2 und 2.3 sind relativ gering.)
Beispiel-App für JSP
Wir verwenden eine Beispielanwendung in Tomcat, um Sie mit JavaServer-Seiten zu beginnen. Wenn Sie Tomcat noch nicht installiert haben, navigieren Sie zur Tomcat-Downloadseite und wählen Sie die Tomcat-Installation für Ihr Betriebssystem aus. Zum Zeitpunkt des Schreibens ist Tomcat 9 die aktuelle Version, die mit Servlet 4.0 und JSP 2.3 kompatibel ist.
Sie können Tomcat als Windows-Dienst installieren oder über die Befehlszeile mit /bin/catalina.sh start
oder /bin/catalina.bat
ausführen., Starten Sie Tomcat in jedem Fall und gehen Sie dann zu localhost:8080
, um die in Abbildung 2 gezeigte Tomcat-Begrüßungsseite anzuzeigen.
Implizite Objekte in Tomcat
Klicken Sie auf der Tomcat-Begrüßungsseite auf den Link Beispiele und dann auf JSP-Beispiele.
Als nächstes öffnen Sie die impliziten Objekte ausführen Web-Anwendung. Abbildung 3 zeigt die Ausgabe für diese Anwendung. Nehmen Sie sich eine Minute Zeit, um diese Ausgabe zu studieren.
Anforderungsparameter
Implizite Objekte sind integrierte Objekte, auf die über eine JSP-Seite zugegriffen werden kann. Als Webseitenentwickler verwenden Sie diese Objekte, um Zugriff auf Anforderungsparameter zu erstellen, bei denen es sich um die Daten handelt, die vom Browser beim Ausgeben einer HTTP-Anforderung gesendet werden. Betrachten Sie die Browser-URL für implizite Objekte:
This example is a very simple introduction to using JSP tags to access server-side request parameters. In this case, the JSP page uses the built-in (implicit) object called param
to access the web application’s request parameters. The param
object is available inside the JSP expression syntax that you saw in Listing 1.
In that example, we used an expression to do some math: ${2 * 2}
, which output 4
.
In this example, the expression is used to access an object and a field on that object: ${param.foo}
.
JSP in a web application
On the Implicit Objects page, click the back arrow, followed by the Source link. This will lead you to the JSP code for the Implicit Objects web app, which is shown in Listing 2.
Listing 2. JSP code for the Implicit Objects web app
JSP functions
A JSP function encapsulates a chunk of reusable functionality. In this case, the functionality is to escape XML. JSP offers a variety of functions, and you can also create functions yourself. To use a function, you import its library into your JSP page, then call the function.
In Listing 2, the escapeXML
function is included with the line:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
Die Syntax ist ziemlich klar: Sie importiert die erforderlichen Funktionen und weist ihnen ein Präfix zu (in diesem Fall“ fn“), das in allen folgenden Ausdrücken verwendet werden kann.,
Die JSP Standard Tag Library (JSTL)
Die Zeile import
ruft in Listing 2 taglib
auf, was die Abkürzung für Tag library oder (in diesem Fall) JSP Standard Tag Library (JSTL) ist. Tag-Bibliotheken definieren wiederverwendbare Funktionsbits für JSP. JSTL ist die Standard-Tag-Bibliothek, die eine Sammlung von Taglibs enthält, die mit jeder Servlet-und JSP-Implementierung, einschließlich Tomcat, geliefert werden.
Die Bibliothek „functions“ ist nur eine der in JSTL enthaltenen Taglibs., Eine weitere gängige Taglib ist diecore
– Bibliothek, die Sie importieren, indem Sie Folgendes aufrufen:
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
Wie „fn“ ist die Bezeichnung „c“ konventionell und wird auf den meisten JSP-Seiten angezeigt.
Sichern von JSP-Seiten
Ein Beispiel-Tag aus der Kernbibliothek ist
<c:out value = "${'<div>'}"/>
, das das <div>
– Tag ausgibt, wobei das XML bereits maskiert ist. Diese Funktion ist wichtig, da die Ausgabe von Inhalten direkt auf eine Webseite über ${variable}
die Tür zu Skriptinjektionsangriffen öffnet., Diese einfache Funktion wird verwendet, um Webseiten vor solchen Angriffen zu schützen.
Die Kernbibliothek enthält auch verschiedene Tags für die Iteration und Flusskontrolle (wie IF/ELSE-Behandlung).
Aufruf von Taglibs in JSP-Seiten
Nachdem Sie nun die JSP-Grundlagen im Griff haben, nehmen wir eine Änderung an der Beispielanwendung vor. Suchen Sie zum Starten die implizite Objekt-App in Ihrer Tomcat-Installation. Der Pfad lautet: apache-tomcat-8.5.33/webapps/examples/jsp/jsp2/el
.,
Öffnen Sie diese Datei und suchen Sie die functions
include:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
Fügen Sie direkt unter dieser Zeile eine neue Zeile hinzu:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Drücken Sie Return und fügen Sie eine weitere neue Zeile hinzu:
<c:out value = "${'This is a test of the JSTL Core Library'}"/>
Laden Sie nun die Seite unter http://localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=barneu.
Sie sollten Ihre Updates in der Ausgabe widerspiegeln.
Layout einer JSP-Webanwendung
Tomcat folgt dem Standardlayout für Java-Servlet-und JSP-Seiten., Die allgemeine Struktur ist ein Ordner mit dem Namen der Anwendung, der im Verzeichnis /webapps
von Tomcat bereitgestellt wird.
In der impliziten Objekte-App lautet die Anwendung /examples
. Beim Öffnen dieses Ordners werden drei wichtige untergeordnete Elemente angezeigt: das Verzeichnis /WEB-INF
, die Datei index.html
und eine Reihe anderer Verzeichnisse.
Das Verzeichnis WEB-INF
enthält Metadaten, die Tomcat darüber informieren, wie die App ausgeführt wird.
Der Rest des Inhalts, einschließlich Index.,html, ist direkt zugänglich, genau wie es in einem typischen Webserver wäre. Ebenso steht die implicit-objects.jsp
zum Anzeigen zur Verfügung und wird vom Server automatisch als JSP-Seite (keine HTML-Seite) behandelt.
Request-Response-Architektur
In einer typischen Servlets/JSP-Anwendung empfangen Servlets Anforderungen und interagieren mit serverseitigen Komponenten und Diensten (z. B. der Datenbank), um diese zu erfüllen. Nach der Behandlung wird das Anforderungsergebnis an eine JSP-Seite weitergeleitet, auf der die Antwort angezeigt wird.,
Ein Servlet verwendet beim Senden einer Anforderungsantwort an eine JSP-Seite die folgende Syntax:
request.getRequestDispatcher("path/to/jsp.jsp").forward(req,res);
Auf alle Daten, die das Servlet in die verschiedenen JSP-Bereiche eingefügt hat, kann JSP zugreifen. Ein Bereich ist einfach ein Bereich des Lebens für ein bestimmtes Objekt. Anforderungs-und Antwortobjekte sind Anforderungsbereiche, dh sie leben für die Dauer der Anforderung. Andere Bereiche umfassen den Seitenbereich (nur solange die JSP-Seite dies tut) und den Sitzungsbereich (der beendet wird, wenn der Benutzer die angegebene Sitzung beendet).,
JavaServer Pages ist eine bekannte und vielseitige Technologie zur Entwicklung von Java-Webanwendungsansichten. In Kombination mit Servlets sind JSP-Seiten sehr leistungsfähig und bieten Zugriff auf die gesamte Palette von Java-Funktionen. Während JSP möglicherweise nicht die erste Wahl für die Entwicklung einer modernen Java-Webanwendung ist, werden Sie in Legacy-Anwendungen auf JSP-Seiten stoßen. Es ist auch eine gute Wahl für einfachere Anwendungen, bei denen Sie Ihr HTML-Frontend schnell mit serverseitigem Java-Code verbinden möchten., Die JSTL-Tags sind in der Lage, die meisten Webanwendungsanforderungen zu erfüllen, und Bibliotheken von Drittanbietern erweitern diese Funktionalität für bestimmte Technologien und Anwendungsfälle.