Übersicht über JSP-Syntaxelemente
Um die Dinge klarer zu machen, finden Sie hier einen kurzen Überblick über JSP-Syntaxelemente :
- Anweisungen : Diese enthalten Informationen zur gesamten JSP-Seite.
- Skriptelemente : Dies sind Java-Codierungselemente wie Deklarationen, Ausdrücke, Scriptlets und Kommentare.
- Objekte und Bereiche : JSP-Objekte können entweder explizit oder implizit erstellt werden und sind innerhalb eines bestimmten Bereichs zugänglich, z. B. von einer beliebigen Stelle auf der JSP-Seite oder der Sitzung.
- Aktionen : Diese erstellen Objekte oder wirken sich auf den Ausgabestream in der JSP-Antwort (oder auf beide) aus.
Wie Inhalte in JSP enthalten sind
Es gibt verschiedene Mechanismen zum Wiederverwenden von Inhalten in einer JSP-Datei.
Die folgenden 4 Mechanismen zum Einfügen von Inhalten in JSP können als direkte Wiederverwendung eingestuft werden :
(für die ersten 3 Mechanismen, die aus "Head First Servlets und JSP" zitiert werden )
1) Die Include- Richtlinie :
<%@ include file="header.html" %>
Statisch : Fügt den Inhalt aus dem Wert des Dateiattributs zur aktuellen Seite zur Übersetzungszeit hinzu . Die Direktive war ursprünglich für statische Layoutvorlagen wie HTML-Header gedacht.
2) Die <jsp:include>
Standardaktion :
<jsp:include page="header.jsp" />
Dynamisch : Fügt den Inhalt aus dem Wert des Seitenattributs zur Anforderungszeit zur aktuellen Seite hinzu . War eher für dynamische Inhalte gedacht, die von JSPs stammen.
3) Das <c:import>
JSTL-Tag:
<c:import url=”http://www.example.com/foo/bar.html” />
Dynamisch : Fügt den Inhalt aus dem Wert des URL-Attributs zur aktuellen Seite zur Anforderungszeit hinzu . Es funktioniert sehr ähnlich
<jsp:include>
, ist aber leistungsfähiger und flexibler: Im Gegensatz zu den beiden anderen Includes kann die <c:import>
URL von außerhalb des Webcontainers stammen !
4) Präludien und Codas:
Statisch : Präludien und Codas können nur auf den Anfang und das Ende von Seiten angewendet werden .
Sie können implizit enthalten Präludien (auch als Header) und Coda
(auch Fußzeilen genannt) für eine Gruppe von JSP - Seiten durch das Hinzufügen
<include-prelude>
und <include-coda>
Elemente jeweils in einem <jsp-property-group>
Element in der Web - Anwendung web.xml Deployment Descriptor. Lesen Sie hier mehr:
• Konfigurieren impliziter Includes am Anfang und Ende von JSPs
• Definieren impliziter Includes
Die Tag-Datei ist eine indirekte Methode zur Wiederverwendung von Inhalten, bei der wiederverwendbare Inhalte gekapselt werden . Eine Tag-Datei ist eine Quelldatei, die ein Fragment von JSP-Code enthält, das als benutzerdefiniertes Tag wiederverwendet werden kann .
Der Zweck von Includes- und Tag-Dateien ist unterschiedlich.
Die Tag-Datei (ein mit JSP 2.0 eingeführtes Konzept) ist eine der Optionen zum Erstellen benutzerdefinierter Tags . Es ist eine schnellere und einfachere Möglichkeit, benutzerdefinierte Tags zu erstellen.
Benutzerdefinierte Tags , auch als Tag-Erweiterungen bezeichnet, sind JSP-Elemente, mit denen benutzerdefinierte Logik und Ausgaben anderer Java-Komponenten in JSP-Seiten eingefügt werden können. Die durch ein benutzerdefiniertes Tag bereitgestellte Logik wird von einem Java-Objekt implementiert, das als Tag-Handler bezeichnet wird .
Einige Beispiele für Aufgaben, die von benutzerdefinierten Tags ausgeführt werden können, umfassen das Bearbeiten impliziter Objekte, das Verarbeiten von Formularen, den Zugriff auf Datenbanken und andere Unternehmensdienste wie E-Mail und Verzeichnisse sowie die Implementierung der Flusssteuerung.
In Bezug auf Ihre Bearbeitung
Möglicherweise gibt es in Ihrem Beispiel (in Ihrer Bearbeitung ) keinen Unterschied zwischen der Verwendung von Direct Include und einer Tag-Datei. Aber benutzerdefinierte Tags haben eine breite Palette an Funktionen . Sie können
Sie können mithilfe von Attributen angepasst werden, die von der aufrufenden Seite übergeben werden.
Übergeben Sie Variablen an die aufrufende Seite zurück.
Greifen Sie auf alle Objekte zu, die für JSP-Seiten verfügbar sind.
Miteinander kommunizieren. Sie können eine JavaBeans-Komponente erstellen und initialisieren, eine öffentliche EL-Variable erstellen, die auf diese Bean in einem Tag verweist, und die Bean dann in einem anderen Tag verwenden.
Ineinander verschachtelt sein und über private Variablen kommunizieren.
Lesen Sie dies auch aus "Pro JSP 2": Grundlegendes zu benutzerdefinierten JSP-Tags .
Nützliches Lesen.
Fazit
Verwenden Sie für jede Aufgabe die richtigen Werkzeuge.
Verwenden Sie Tag-Dateien, um schnell und einfach benutzerdefinierte Tags zu erstellen , mit denen Sie wiederverwendbaren Inhalt kapseln können .
Was den Einschluss von Inhalten in JSP betrifft (Zitat von hier ):
- Verwenden Sie die include-Direktive, wenn sich die Datei selten ändert . Es ist der schnellste Mechanismus. Wenn Ihr Container Änderungen nicht automatisch erkennt, können Sie das Wirksamwerden der Änderungen erzwingen, indem Sie die Hauptseitenklassendatei löschen.
- Verwenden Sie die Include-Aktion nur für Inhalte, die sich häufig ändern , und ob die einzuschließende Seite erst entschieden werden kann, wenn die Hauptseite angefordert wird.
*
Die include-Direktive enthält einen Tippfehler (das Sternchen ).<jsp:include>
ist eine Standard-Include- Aktion ,<%@ include file="" %>
ist die Include- Direktive . Lesen Sie den letzten Abschnitt (im grauen Feld), in dem die Vorteile beschrieben werden (dh Empfehlungen, wann Sie den einen oder anderen auswählen sollten). Lesen Sie auch diesen Artikel für die detaillierte Beschreibung. Hoffe das hilft.Mögliche doppelte Frage
<@include>
- Das Direktiven-Tag weist den JSP-Compiler an, den Inhalt der enthaltenen Datei in der JSP zusammenzuführen, bevor der generierte Servlet-Code erstellt wird. Dies entspricht dem Ausschneiden und Einfügen des Texts von Ihrer Include-Seite direkt in Ihre JSP.<jsp:include>
- Das JSP-Aktionstag weist den Container andererseits an, die Ausführung dieser Seite anzuhalten, die enthaltene Seite auszuführen und die Ausgabe dieser Seite mit der Ausgabe dieser Seite zusammenzuführen.quelle
<t:mytag><h1>Hello World</h1></t:mytag>
? Dies ist kein Include, sondern die normale Verwendung eines Tags (wie<jsp:useBean>
oder<c:if>
).Hauptvorteil von
<jsp:include />
über<%@ include >
ist:<jsp:include />
ermöglicht die Übergabe von Parameternwas in nicht möglich ist
<%@include file="somefile.jsp" %>
quelle
<%@include file="somefile.jsp?menu=value" %>
? Ist das auch eingeschränkt?Alle drei Vorlagenoptionen -
<%@include>
,<jsp:include>
und<%@tag>
sind gültig, und alle drei Abdeckung verschiedene Anwendungsfälle.Mit
<@include>
speichert der JSP-Parser den Inhalt der enthaltenen Datei vor dem Kompilieren in der JSP (ähnlich einem C#include
). Sie würden diese Option mit einfachem, statischem Inhalt verwenden: Zum Beispiel, wenn Sie Kopf-, Fuß- oder Navigationselemente in jede Seite Ihrer Web-App aufnehmen möchten. Der enthaltene Inhalt wird Teil der kompilierten JSP und zur Laufzeit fallen keine zusätzlichen Kosten an.<jsp:include>
(und JSTLs<c:import>
, die ähnlich und noch leistungsfähiger sind) eignen sich am besten für dynamische Inhalte. Verwenden Sie diese, wenn Sie Inhalte von einer anderen lokalen oder Remote-URL einfügen müssen. wenn die Ressource, die Sie einschließen, selbst dynamisch ist; oder wenn der enthaltene Inhalt Variablen oder Bean-Definitionen verwendet, die mit der eingeschlossenen Seite in Konflikt stehen.<c:import>
Außerdem können Sie den enthaltenen Text in einer Variablen speichern, die Sie weiter bearbeiten oder wiederverwenden können. Beides verursacht zusätzliche Laufzeitkosten für den Versand: Dies ist minimal, aber Sie müssen sich bewusst sein, dass das dynamische Include nicht "kostenlos" ist.Verwenden Sie Tag-Dateien, wenn Sie wiederverwendbare Komponenten der Benutzeroberfläche erstellen möchten. Wenn Sie beispielsweise über eine Liste von Widgets verfügen und die Widgets durchlaufen und die Eigenschaften der einzelnen Widgets (in einer Tabelle oder in einem Formular) anzeigen möchten, erstellen Sie ein Tag. Tags können Argumente annehmen, verwenden
<%@tag attribute>
und diese Argumente können entweder obligatorisch oder optional sein - ähnlich wie Methodenparameter.Tag-Dateien sind ein einfacher, JSP-basierter Mechanismus zum Schreiben von Tag-Bibliotheken, die Sie (vor JSP 2.0) mit Java-Code schreiben mussten. Das Schreiben von JSP-Tag-Dateien ist viel sauberer, wenn das Tag viel zu rendern ist: Sie müssen Java- und HTML-Code nicht mischen, wie Sie es tun müssten, wenn Sie Ihre Tags in Java geschrieben hätten.
quelle
Laut: Java Revisited
Ressourcen, die in der Include-Direktive enthalten sind, werden während der JSP-Übersetzungszeit geladen, während Ressourcen, die in der Include-Aktion enthalten sind, während der Anforderungszeit geladen werden.
Änderungen an eingeschlossenen Ressourcen werden im Fall der Include-Direktive erst sichtbar, wenn die JSP-Datei erneut kompiliert wird. Im Falle einer Include-Aktion wird jede Änderung der eingeschlossenen Ressource in der nächsten Anforderung sichtbar.
Die Include-Direktive ist ein statischer Import, während die Include-Aktion ein dynamischer Import ist.
Die Include-Direktive verwendet das Dateiattribut, um die einzuschließenden Ressourcen anzugeben, während die Include-Aktion das Seitenattribut für denselben Zweck verwendet.
quelle