2011-10-24 19 views

Odpowiedz

34

jGuru:

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.

1

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:

51

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).

93

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.

+5

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

+0

Bardzo dobre wyjaśnienie ... + 1 i kciuki w górę –

+30

Jeśli ktoś inny jest zdezorientowany tą odpowiedzią: ' eis

27

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

+1

Świetne wyjaśnienie! W czasie tłumaczenia (statyczne) dyrektywy <% @ include file = "file.jsp"%> LUB Przy uruchomieniu (działaniu) Joe

1

Java Revisited

  1. Zasób zawarty w dyrektywie include jest ładowany podczas czasu tłumaczenia jsp, a zasób zawarty w akcji włączania jest ładowany w czasie żądania.
  2. Każda zmiana wprowadzonego zasobu nie będzie widoczna w przypadku włączenia dyrektywy, dopóki plik jsp nie zostanie ponownie skompilowany. W przypadku akcji włączania każda zmiana w zasobie włączonym będzie widoczna w następnym żądaniu.
  3. Dyrektywa include to import statyczny, a akcja include to import dynamiczny.
  4. Do dyrektywy włącza się atrybut pliku, aby określić zasób, który ma zostać uwzględniony, podczas gdy działanie włączania używa tego samego atrybutu strony.
Powiązane problemy