Oba znaczniki zawierają treść z jednej strony w drugiej.Jaka jest różnica między <jsp: include page = ...> a <% @ include file = ...>?
Czym jest dokładna różnica między tymi dwoma znacznikami?
Oba znaczniki zawierają treść z jednej strony w drugiej.Jaka jest różnica między <jsp: include page = ...> a <% @ include file = ...>?
Czym jest dokładna różnica między tymi dwoma znacznikami?
W
<%@include file="abc.jsp"%>
dyrektywa działa jak C"#include"
, ciągnięcie w tekście dołączonym pliku i kompilowanie go tak, jakby były częścią w tym pliku. Dołączony plik może być dowolnego typu: (w tym HTML lub tekstowy).< jsp: include page = "abc.jsp" > tag kompiluje plik jako odrębnej pliku JSP, i osadza wywołanie go w skompilowanej JSP.
niektórych silnikach JSP obsługują niestandardowe tagi
<!--#include file="data.inc"-->
(NCSA- lub .shtml-style) i<%@ vinclude="data.inc" %>
(JRun-style), ale te nie są zdefiniowane w specyfikacji JSP, a zatem nie można powoływać się na.Zobacz także to pytanie w dziale FAQ JSP.
Jednym z nich jest statyczny import (<% = @ to ...> "), a druga jest dynamiczny (jsp: include). Będzie to mieć wpływ na przykład ścieżkę będziesz musiał podać dla Twojego Trochę badań w Google powie Ci więcej:
Jest ogromna różnica.Jak wspomniano, <%@ include
jest statyczny, <jsp:include
jest dynamiczny. Pomyśl o tym, jak różnica między makro i Wywołanie funkcji (jeśli znasz te terminy) Inny sposób umieszczenia tego, statyczne włączanie to dokładnie to samo, co kopiowanie wklejania dokładnej zawartości dołączonego pliku ("kod") w lokalizacji oświadczenia <%@ include
(który jest dokładnie tym, co zrobi kompilator JSP.
Dynamiczny obejmują dokona wniosek (przy użyciu żądania dyspozytora), który będzie wykonania wskazanej strony, a następnie załączyć wyjście ze strony na wyjściu strony wywołującej, zamiast rachunku <jsp:include
.
Najważniejsza różnica polega na tym, że wraz z dołączeniem dynamicznym dołączona strona zostanie wykonana we własnej stronieContext. A ponieważ jest to żądanie, możesz przesłać parametry do strony w ten sam sposób, w jaki możesz wysyłać parametry wraz z każdym innym żądaniem. Z drugiej strony statyczny to tylko kawałek kodu, który zostanie wykonany wewnątrz kontekstu strony wywołującej. Jeśli statycznie obejmują ten sam plik więcej niż raz, kod w tym pliku będzie istnieć w wielu miejscach na stronie wywołującego więc coś
<%
int i = 0;
%>
wygeneruje błąd kompilatora (ponieważ ta sama zmienna nie może być uznana więcej niż raz).
W jednym wielokrotnego użytku kawałek kodu używam dyrektywę <%@include file="reuse.html"%>
aw drugim używam tag<jsp:include page="reuse.html" />
.
Niech kod w pliku wielokrotnego użytku być:
<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>
Po uruchomieniu oba pliki JSP widać tę samą moc i pomyśleć, czy jest jakaś różnica między dyrektywą i tag. Ale jeśli spojrzeć na wygenerowanym servlet
dwóch plików JSP, można zobaczyć difference.Here to co widać podczas korzystania z directive
:
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");
i to, co widać na używane tagu w drugim pliku JSP:
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "reusable.html", out, false);
Więc teraz wiesz, że dyrektywa obejmuje wstawia źródło reuse.html
w czasie translacji ale tag działanie wstawia odpowiedź reuse.html przy starcie.
Jeśli o tym pomyślisz, pojawi się dodatkowe działanie przy każdym tagu akcji (jsp:include file
). Oznacza to, że możesz zagwarantować, że zawsze będziesz mieć najnowszą zawartość, ale zwiększysz koszty jej działania.
1) Kiedy stosować , należy uwzględnić dyrektywę?
Aby uniknąć powielania samej logiki wyjścia na wielu JSP z aplikacji internetowych, to mechanizm stosowany jest np. W celu promowania ponownego użycia logiki prezentacji obejmować dyrektywa służy
<%@ include file="abc.jsp" %>
gdy powyższej instrukcji jest odbierany przez silnik jsp, pobiera kod źródłowy abc.jsp i kopiuje ten sam wbudowany w bieżącym jsp. Po skopiowaniu tłumaczenie jest wykonywane dla bieżącej strony
prostu mówiąc, że jest statyczna instrukcja do JSP IE silnika., Cały kod źródłowy z „abc.jsp” jest kopiowany do bieżącej strony
2) Kiedy używać zawierać akcję?
zawierać tag nie zawiera kodu źródłowego dołączonego strony na bieżącej stronie zamiast wyjście generowane w czasie wykonywania przez dołączonego stronie dołączonej do bieżącego odpowiedzi strona
zawierać tag funkcjonalność jest podobna do z zawierać mechanizm żądanie dyspozytora programowania serwletów
zawierać znacznik jest instrukcja run-time do jSP IE silnika., a kopiując cały kod do bieżącej strony wywołanie metody jest wykonany z „abc.jsp” od bieżącej strony
Świetne wyjaśnienie! W czasie tłumaczenia (statyczne) dyrektywy <% @ include file = "file.jsp"%> LUB
Czy możesz podać dokładniejsze informacje na temat tego, w jaki sposób można uzyskać wynik? Wspomniałeś, że twój drugi dodatek używa dyrektywy (@include). Następnie w pierwszym wyniku wyjściowym wspomniałeś, że użyłeś dyrektywy (@include), ale na drugim wyniku wynikowym, powiedziałeś również, że pochodzi on z drugiego włączania (który z twojego wcześniejszego wyjaśnienia to @include). – stack247
Bardzo dobre wyjaśnienie ... + 1 i kciuki w górę –
Jeśli ktoś inny jest zdezorientowany tą odpowiedzią: '
eis