wake-up-neo.net

Was ist der Unterschied zwischen <jsp: include page = ...> und <% @ include file = ...>?

Beide Tags enthalten den Inhalt einer Seite auf einer anderen.

Was ist also der exakte Unterschied zwischen diesen beiden Tags?

103
Prasoon

In einem wiederverwendbaren Teil des Codes verwende ich die Direktive <%@include file="reuse.html"%> Und im zweiten verwende ich das Tag<jsp:include page="reuse.html" />.

Lassen Sie den Code in der wiederverwendbaren Datei sein:

<html>
<head>
    <title>reusable</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
    <img src="candle.gif" height="100" width="50"/> <br />
    <p><b>As the candle burns,so do I</b></p>
</body>

Nachdem Sie beide JSP-Dateien ausgeführt haben, sehen Sie dieselbe Ausgabe und stellen sich den Unterschied zwischen Direktive und Tag vor. Wenn Sie sich jedoch die generierten servlet der beiden JSP-Dateien ansehen, werden Sie den Unterschied bemerken. Hier sehen Sie, was Sie sehen, wenn Sie directive verwenden:

out.write("<html>\r\n");
out.write("    <head>\r\n");
out.write("        <title>reusable</title>\r\n");
out.write("        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
out.write("    </head>\r\n");
out.write("    <body>\r\n");
out.write("        <img src=\"candle.gif\" height=\"100\" width=\"50\"/> <br />\r\n");
out.write("        <p><b>As the candle burns,so do I</b></p>\r\n");
out.write("    </body>\r\n");
out.write("</html>\r\n");

und das sehen Sie für das verwendete Tag in der zweiten JSP-Datei:

org.Apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "reusable.html", out, false);

Jetzt wissen Sie also, dass die include-Direktive zur Übersetzungszeit die Quelle von reuse.html Einfügt, während das action-Tag zur Laufzeit die Antwort von reuse.html einfügt.

Wenn Sie darüber nachdenken, gibt es mit jedem Action-Tag einen zusätzlichen Performance-Hit (jsp:include file). Sie können also garantieren, dass Sie immer über die neuesten Inhalte verfügen, erhöhen jedoch die Leistungskosten.

104
Suhail Gupta

Es gibt einen großen Unterschied. Wie bereits erwähnt, <%@ include ist ein statisches Include, <jsp:include ist ein dynamisches Include. Stellen Sie es sich als einen Unterschied zwischen einem Makro und einem Funktionsaufruf vor (wenn Sie mit diesen Begriffen vertraut sind). Ein statisches Include ist genau das Gleiche wie das Einfügen des genauen Inhalts der enthaltenen Datei (des "Codes") an der Stelle des <%@ include Anweisung (genau das wird der JSP-Compiler tun).

Ein dynamisches Include erstellt ein request (unter Verwendung des Request Dispatchers), das execute die angegebene Seite und dann die Ausgabe der Seite in die Ausgabe der aufrufenden Seite aufnimmt Ort des <jsp:include Aussage.

Der große Unterschied besteht darin, dass bei einem dynamischen Include die eingebundene Seite in ihrem eigenen pageContext ausgeführt wird. Und da es sich um eine Anforderung handelt, können Sie Parameter auf dieselbe Weise an die Seite senden, wie Sie Parameter zusammen mit anderen Anforderungen senden können. Ein statisches Include ist dagegen nur ein Teil des Codes, der im Kontext der aufrufenden Seite ausgeführt wird. Wenn Sie dieselbe Datei mehr als einmal statisch einschließen, ist der Code in dieser Datei an mehreren Stellen auf der aufrufenden Seite vorhanden

<%
int i = 0;
%>

würde einen Compilerfehler erzeugen (da dieselbe Variable nur einmal deklariert werden kann).

54
pap

jGur :

Das <%@include file="abc.jsp"%> Direktive verhält sich wie C "#include", indem Sie den Text der enthaltenen Datei einlesen und so kompilieren, als ob er Teil der enthaltenen Datei wäre. Die enthaltene Datei kann ein beliebiger Typ sein (einschließlich HTML oder Text).

Das <jsp: include page = "abc.jsp"> -Tag kompiliert die Datei als separate JSP-Datei und bettet einen Aufruf in die kompilierte JSP ein.

Einige JSP-Engines unterstützen die nicht standardmäßigen Tags <!--#include file="data.inc"--> (NCSA- oder .shtml-Stil) und <%@ vinclude="data.inc" %> (JRun-Stil), aber diese sind in der JSP-Spezifikation nicht definiert und können daher nicht verwendet werden.

Siehe auch diese Frage in den JSP-FAQ.

37

1) Wann soll include-Direktive?

Um zu verhindern, dass dieselbe Ausgabelogik über mehrere JSPs der Webanwendung hinweg dupliziert wird, wird der Einschlussmechanismus verwendet, dh, um die Wiederverwendbarkeit der Einschlussanweisung der Präsentationslogik zu fördern

  <%@ include file="abc.jsp" %>

wenn die obige Anweisung von der JSP-Engine empfangen wird, ruft sie den Quellcode der Datei abc.jsp ab und kopiert denselben Inline-Code in die aktuelle JSP. Nach dem Kopieren wird die Übersetzung für die aktuelle Seite durchgeführt

Einfach gesagt, es ist eine statische Anweisung für die JSP-Engine, dh der gesamte Quellcode von "abc.jsp" wird in die aktuelle Seite kopiert

2) Wann ist einschließlich Aktion?

include-Tag schließt nicht den Quellcode der eingeschlossenen Seite in die aktuelle Seite ein, sondern die zur Laufzeit von der eingeschlossenen Seite generierte Ausgabe wird in die Antwort der aktuellen Seite einbezogen

die Include-Tag-Funktionalität ähnelt der des Include-Mechanismus des Request-Dispatchers für die Servlet-Programmierung

include tag ist eine Laufzeitanweisung für die JSP-Engine, dh das Kopieren des gesamten Codes in die aktuelle Seite. Ein Methodenaufruf wird von der aktuellen Seite an "abc.jsp" gesendet

28
Ajay Takur

Einer ist ein statischer Import (<% = @ include ...> "), der andere ist ein dynamischer Import (jsp: include). Er wirkt sich beispielsweise auf den Pfad aus, den Sie für Ihre eingeschlossene Datei angeben müssen Bei Google erfahren Sie mehr.

1
talnicolas

Java Revisited

  1. Die von der include-Direktive eingeschlossene Ressource wird während der JSP-Übersetzungszeit geladen, während die von der include-Aktion eingeschlossene Ressource während der Anforderungszeit geladen wird.
  2. Änderungen an der enthaltenen Ressource werden im Falle einer include-Direktive erst sichtbar, wenn die JSP-Datei erneut kompiliert wird. Während im Falle einer Einschlussaktion alle Änderungen an der einbezogenen Ressource in der nächsten Anforderung sichtbar sind.
  3. Die Include-Anweisung ist ein statischer Import, während die Include-Aktion ein dynamischer Import ist
  4. Die Include-Direktive verwendet das Dateiattribut, um die einzubeziehende Ressource anzugeben, während das Seitenattribut der Include-Aktion für denselben Zweck verwendet wird.