Wir alle wissen, dass es in JSP zwei Formen von Include gibt, nämlich
<%@ include file=" ”%>
<jsp:include page=“ „flush=“true“/></P>
Ersteres ist ein Anweisungselement und letzteres ein Verhaltenselement. Wo genau werden sie eingesetzt? Wie verwendet man sie und was ist der Unterschied? Das dürfte eine Frage sein, über die viele Menschen nachdenken werden, wenn sie sie sehen. Schauen wir uns unten um. </P>
Wenn bestimmte Teile aller Seiten in der Anwendung (z. B. Titel, Fußzeilen und Navigationsleisten) gleich sind, können wir normalerweise die Verwendung von include in Betracht ziehen. Insbesondere, wann <%@ include file=""%> und wann <jsp:include page=""lush="true"/> verwendet werden soll. Das erste, was man verstehen muss, ist der Unterschied zwischen ihnen. Nur wenn Sie die Unterschiede in ihrer Verwendung verstehen, können Sie verstehen, wann Sie sie verwenden und wie Sie wählen.
<%@ include file=" ”%>, das JSP-Include-Anweisungselement liest den Inhalt der angegebenen Seite. Und integrieren Sie diese Inhalte in die Originalseite. (Dieser Prozess wird während der Übersetzungsphase ausgeführt, d. h. der Phase, in der JSP in ein Servlet konvertiert wird.</P>
Hier ist eine Erklärung der Übersetzungsphase: Wir wissen, dass die JSP-Seite nicht intakt an den Browser gesendet werden kann und alle JSP-Elemente zuerst vom Server verarbeitet werden müssen. Dies erfolgt durch Konvertieren der JSP-Seite in ein Servlet und anschließendes Ausführen des Servlets. Der Server benötigt einen JSP-Container, um JSP-Seiten zu verarbeiten. Der JSP-Container wird normalerweise in Form eines Servlets implementiert. Dieses Servlet ist so konfiguriert, dass es alle Anforderungen für JSP-Seiten verarbeitet. </P>
Der JSP-Container ist für die Konvertierung der JSP-Seite in ein Servlet (sogenannte JSP-Seitenimplementierungsklasse? JSP-Seitenimplementierungsklasse) und die Kompilierung dieses Servlets verantwortlich. Diese beiden Schritte bilden die Übersetzungsphase.</P>
Daraus wissen wir: Die JSP-Seite fügt den tatsächlichen Inhalt (dh den Codeausschnitt) der durch das Include-Anweisungselement angegebenen Seite zur JSP-Seite hinzu, die ihn einführt. Nach der Synthese in eine Datei wird er in eine Datei konvertiert Servlet durch den JSP-Container. Sie können sehen, dass zu diesem Zeitpunkt eine temporäre Klassendatei und eine Java-Datei generiert werden. Hier ist ein Beispiel. </P>
Der Server verwendet Tomcat und die in die Seite eingeführte JSP-Datei heißt test.jsp. Die importierte Seite heißt date.jsp. Diese JSP-Datei speichert einen zeitbezogenen JSP-Code und das aktuelle Kontextstammverzeichnis ist auf „test“ eingestellt.
//======Quelldatei von date.jsp======//
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<%
java.util.Date date=new java.util.Date();
String date_cn = "";
String dateStr = "";
switch(date.getDay())
{
case 0:date_cn = "Day break";
case 1:date_cn = "一";
case 2:date_cn = "二";
case 3:date_cn = "三";
case 4:date_cn = "四";
case 5:date_cn = "五";
case 6:date_cn = "六";
}
dateStr = (1900+date.getYear()) + „Jahr“ + (date.getMonth()+1) + „Monat“ + date.getDate() + „Tag (Wochentag) + date_cn + „)“;
%>
document.write("<%=dateStr%>");
//======Das Folgende ist die Quelldatei von test.jsp=============//
<%@ page language=“java“ contentType=“text/html;charset=gb2312“%>
<html>
<Kopf>
<title>Zwei Verwendungsmöglichkeiten von include</title>
<jsp:include page=“date.jsp“lush=“true“/>
<%--@ include file=“date.jsp“ %-->
// Wir verwenden hier zwei verschiedene Formen von Include, um die Datei date.jsp einzuführen.
<Kopf>
<Körper>
<table><tr><td>
Bitte beachten Sie die beiden Verwendungszwecke von include in JSP.
</td></tr></table>
</body>
</html></P>
In der Datei test.jsp geben wir nur eine Textzeile aus: „Über zwei Verwendungszwecke von include in jsp. Bitte achten Sie darauf, dass wir zunächst die Form <%@ include file="date.jsp" %> verwenden date.jsp-Datei. Glauben Sie, dass etwas schief gehen könnte? Zu diesem Zeitpunkt erscheint eine Fehlermeldung:
HTTP-Status 500?
org.apache.jasper.JasperException: /date.jsp(0,0) Seitenanweisung: contentType darf nicht mehrfach vorkommen
Nachfolgend finden Sie eine Reihe von Fehlern, aber wir müssen uns nur diese ansehen, um herauszufinden, wo das Problem liegt. Der Statuscode lautet http 500 Server Internal Error. Werfen Sie noch einmal einen Blick auf die folgenden Tipps. Auf der Seite „date.jsp“ können nicht mehrere contentTypes angegeben werden.</P>
Hier erfahren Sie, warum. Dies liegt daran, dass während der Übersetzungsphase der Code der Datei date.jsp intakt zur Seite test.jsp hinzugefügt wurde, um eine Datei zu synthetisieren. Die synthetisierte Datei wird dieselbe sein:
<%@ page language=“java“ contentType=“text/html;charset=gb2312“%>
Dieser Code. Die Lösung besteht darin, diesen Satz in der Datei date.jsp zu löschen. Aktualisieren Sie die Seite „test.jsp“ und fordern Sie sie an</P>
Die Anforderung test.jsp wird auf der Seite wie folgt angezeigt
10. Dezember 2003 13:12:40
Bitte beachten Sie die beiden Verwendungszwecke von include in JSP. </P>
Wir können noch nichts finden. Lassen Sie uns die temporären Dateien unter Tomcat überprüfen. Gehen Sie dorthin und prüfen Sie, ob der Inhalt der Datei date.jsp zur Datei test.jsp hinzugefügt wurde.
<Hinweis. Der Tomcat wird hier im Stammverzeichnis von Laufwerk E installiert
Inhaltsverzeichnis
E:tomcatworkStandalonelocalhosttest.
In diesem Verzeichnis sehen Sie
Es gibt zwei Dateien test_jsp.java und test_jsp.class. </P>
Die Java-Datei hier ist die Datei test_jsp.java, die durch Konvertieren von JSP in ein Servlet durch den JSP-Container erhalten wird. </P>
Die entsprechende Datei test_jsp.class ist die Klassendatei, die durch Kompilieren der Servlet-Datei test_jsp.java generiert wird. Öffnen Sie die generierte Servlet-Datei (test_jsp.java). An diesem Punkt werden wir feststellen, dass beim Konvertieren der test.jsp-Datei in eine Servlet-Datei Code hinzugefügt wird, der nicht auf der test.jsp-Seite enthalten ist. Der neu hinzugefügte Inhalt ist der Code im Datum. jsp: Bitte testen Sie, welche neuen Inhalte hinzugefügt wurden oder ob tatsächlich neue Inhalte hinzugefügt wurden. Ich werde hier nicht auf Details eingehen
Das Obige ist das Ergebnis, das wir mit der Form <%@ include file="date.jsp"%> erhalten.
Als nächstes verwenden wir <jsp:include page="dae.jsp"lush="true"/>, das heißt
Ersetzen Sie <%@ include file="date.jsp"%> durch <jsp:include page="dae.jsp"lush="true"/> und fordern Sie dann test.jsp an.
2003?ê 12??10?? 13:30:13
Bitte beachten Sie die beiden Verwendungszwecke von include in JSP. </P>
Zu diesem Zeitpunkt werden Sie auf der Seite sehen, dass die von uns eingeführten chinesischen Zeichen in der Datumsausgabe verstümmelt sind. Was liegt daran, dass das Include-Verhaltenselement während der Anforderungsverarbeitungsphase ausgeführt wird? Der JSP-Container ist nicht nur für die oben erwähnte Konvertierung von JSP-Seiten in Servlets verantwortlich, sondern auch für den Aufruf der JSP-Seitenimplementierungsklasse, um jede Anfrage zu verarbeiten und eine Antwort zu generieren Anforderungsverarbeitungsphase: Die Anforderungsverarbeitungsphase führt nur die Klassendatei aus. </P>
Wenn wir also das Include-Aktionselement in die Seite einführen, verweisen wir tatsächlich nur auf die Servlet-Klassendatei, die nach der Konvertierung und Kompilierung der date.jsp-Datei generiert wird. In diesem Fall wird date.jsp nach der Ausführung als separate Datei getestet Wird aufgerufen, wenn die .jsp-Datei ausgeführt wird. Da die Zeichenkodierung in der date.jsp-Datei nicht angegeben ist, werden verstümmelte Zeichen angezeigt. Die Lösung besteht darin, die gerade entfernten Zeichen in der date.jsp-Datei erneut zu ersetzen.
<%@ page language=“java“ contentType=“text/html;charset=gb2312“%>
Nachdem Sie diese Anweisungszeile hinzugefügt haben, aktualisieren Sie sie und führen Sie sie erneut aus. Zu diesem Zeitpunkt wird die Seite korrekt angezeigt und ist dieselbe wie bei normaler Ausführung mit der Anweisung include. Wenn Sie sich die temporären Dateien unter Tomcat ansehen, werden Sie dies feststellen ist eine date_jsp.java-Datei und eine date_jsp.class-Datei. Diese beiden Dateien werden auf die gleiche Weise wie die Dateien test_jsp.java und test_jsp.class abgerufen. Sie werden feststellen, dass zu diesem Zeitpunkt nur eine neue Codezeile hinzugefügt wird:
JspRuntimeLibrary.include(request, Response, „date.jsp“, out, true);</P>
Der Code der date.jsp-Datei wird nicht zu test.jsp hinzugefügt.</P>
Es führt lediglich die Antwort ein, die nach der Ausführung der date.jsp-Seite zur Laufzeit generiert wird. Das bedeutet, dass wir jede Webressource angeben können, die eine Antwort generieren kann (z. B. ein Servlet oder eine JSP-Seite), sofern die von ihnen generierten Typen berücksichtigt werden Ressourcen sind die gleichen wie bei JSP. Der von der Seite generierte Inhaltstyp ist derselbe. Der JSP-Container führt die angegebene Ressource über einen internen Funktionsaufruf aus. Daher können diese importierten Ressourcen bei der Verarbeitung der ursprünglichen Anforderung helfen, sodass diese Ressourcen auf alle Objekte zugreifen können im Anforderungsbereich. Und alle ursprünglichen Anforderungsparameter.</P>
Da diese Seiten zum Zeitpunkt der Anforderung der Hauptseite noch nicht in die Hauptseite eingeführt wurden, können Sie einen Attributwert zur Anforderungszeit für das Seitenattribut verwenden, um basierend auf der Laufzeitsituation zu bestimmen, welche Seite eingeführt werden soll. Sie können auch einige Anforderungen hinzufügen Parameter, die von der eingehenden Seite gelesen werden sollen.
<jsp:include page="<%=pageSelectedAtRuntime%>" flush="true" >
<jsp:param name=“fitstParamer“ value=“firstvalue“>
<jsp:param name=“lastParamer“ value=“lastvalue“>
</jsp:include></P>
Wenn die importierte JSP-Seite geändert wird, kann die neueste Version der Seite sofort verwendet werden. Dies liegt daran, dass die importierte Seite genauso behandelt wird wie die direkt vom Browser aufgerufene JSP-Seite. Das heißt, der Container erkennt Seitenänderungen . und gelangen automatisch in die Übersetzungsphase, um die neueste Version der Seite zu erhalten.</P>
(Beachten Sie, dass das Include-Verhaltenselement mit anderen JSP-Elementen identisch ist. Wenn kein Verhaltenskörper vorhanden ist, muss er mit „/“ enden. Genau wie das Folgende.
<jsp:include page="<%=pageSelectedAtRuntime%>" flush="true" />)</P>
Das Folgende ist der Unterschied zwischen den beiden Verwendungen von include. Es gibt zwei Hauptunterschiede;
1: Ausführungszeit:
<%@ include file=“relativeURI“%> wird während der Übersetzungsphase ausgeführt
<jsp:include page="relativeURI" flush="true" /> wird während der Anforderungsverarbeitungsphase ausgeführt.
2: Unterschiede im eingeführten Inhalt:
<%@ include file=“relativeURI“%>
Führen Sie statischen Text (HTML, JSP) ein und integrieren Sie ihn in die JSP-Seite, bevor er in ein Servlet konvertiert wird.
<jsp:include page="relativeURI" flush="true" />Führt den von der Ausführungsseite oder dem Servlet generierten Antworttext ein.
Außerdem werden in beiden Verwendungen die Datei- und Seitenattribute als relative URI interpretiert. Wenn sie mit einem Schrägstrich beginnen, handelt es sich um einen umgebungsrelativen Pfad. Wird entsprechend dem Präfix interpretiert, das der URI der Anwendung zugewiesen ist Wenn es nicht mit einem Schrägstrich beginnt, handelt es sich um einen Pfad, der sich auf die Seite bezieht. Er wird entsprechend dem Pfad der Seite interpretiert, auf der diese Datei eingeführt wird. Weitere Informationen zur Interpretation von URLs finden Sie in den entsprechenden Materialien Bücher.