2011-10-24 22 views

答えて

34

jGuru:インクルードファイルのテキストに引っ張り、それ を含むファイルの一部であるかのようにそれをコンパイルC "#include"、 等

<%@include file="abc.jsp"%>指令働きます。インクルードファイルは、任意のタイプの (HTMLまたはテキストを含む)にすることができます。

< JSPは:>タグは別々の JSPファイルなどのファイルをコンパイルし、コンパイル済みのJSPで、それへの呼び出しを埋め込む「abc.jsp」=ページがあります。

一部のJSPエンジンは、非標準タグ<!--#include file="data.inc"-->(NCSA-、または.shtmlのスタイル)と<%@ vinclude="data.inc" %>(JRunのスタイルを)サポートしていますが、これらは JSP仕様で定義されていないので、あてにすることはできません。

この質問はJSPのよくある質問を参照してください。

1

1つは静的インポート(<%= @ include ...> ")、もう1つは動的なもの(jsp:include)です。 Googleの小さなリサーチで詳しく説明しています。

51

言われたように、<%@ includeは静的なインクルードで、<jsp:includeは動的なインクルードです。静的なインクルードは、<%@ includeステートメントの場所にインクルードされたファイル( "コード")の正確な内容をコピーして貼り付けるのとまったく同じものです(これらの用語に精通している場合) (これはまさにJSPコンパイラがやることです。

は、動的には指示されたページを実行し、その後<jsp:includeの文の代わりに、呼び出しページの出力中のページからの出力が含まれます要求(リクエストディスパッチャを使用して)を作成します含まれています。

ここで大きな違いは、動的インクルードでは、インクルードされたページが独自のpageContextで実行されることです。また、リクエストであるため、他のリクエストとともにパラメータを送信するのと同じ方法で、ページにパラメータを送信できます。一方、静的なインクルードは、呼び出しページのコンテキスト内で実行される単なるコードです。あなたは静的に複数回同じファイルを含める場合は、同じ変数を宣言することはできませんので、

<% 
int i = 0; 
%> 

のようなものは、(コンパイラエラーを生成するので、そのファイル内のコードは、呼び出しページに複数の場所に存在しています一回以上)。 Iディレクティブ<%@include file="reuse.html"%>を使用し、第二に、私はタグ<jsp:include page="reuse.html" />を使用するコードの再利用可能な部品で

93

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

JSPファイルの両方を実行した後、あなたが同じ出力を参照してディレクティブの間に違いがあった場合を考える:

してみましょう、再利用可能なファイル内のコードがあることタグ。しかし、あなたは2つのJSPファイルの生成servletを見れば、あなたが表示されますdifference.Hereあなたは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"); 

を、これはあなたが使用したタグのために表示されるものです二JSPファイルで:

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

は、だから今は、includeディレクティブは、変換時にreuse.htmlのソースを挿入しますが、アクションタグは、実行時にreuse.htmlの応答を挿入することを知っています。

あなたが考えていると、すべてのアクションタグ(jsp:include file)でさらにパフォーマンスが低下します。つまり、常に最新のコンテンツを保有することが保証されますが、パフォーマンスの向上につながります。

+5

どの出力をどの出力に出力するかを具体的に指定できますか? 2番目のinclude is usingディレクティブ(@include)について述べました。最初の出力結果では、使用したディレクティブ(@include)について言及しましたが、2番目の出力結果では2番目のインクルード(これは、以前の説明の@include)からのものです。 – stack247

+0

非常に良い説明... + 1と親指 –

+30

誰かがこの回答で混乱している場合、 ' eis

27

1)を使用する場合は、ディレクティブを使用しますか?

は、ディレクティブが使用されているが含ま機構を含む、Webアプリケーションの複数のJSPの間で同じ出力のロジックの重複を防ぐために、すなわち使用されている。、プレゼンテーションロジックの再利用性を促進するために

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

時には、上記の命令をjspエンジンが受信すると、abc.jspのソースコードを取得し、現在のJSPで同じインラインをコピーします。翻訳をコピーした後

は、単にエンジンすなわちJSPに静的な命令であると言って、現在のページのために行われる。を使用する場合は、「abc.jsp」の全ソースコード)

2現在のページにコピーされますアクションを含める?

は、タグではなく、含まれるページによって実行時に生成される出力は

がタグ機能を含む現在のページ応答に含まれている現在のページに含まれるページのソースコードを含まない含むものと同様です

は、タグを含め、サーブレットプログラミングの要求ディスパッチャのメカニズムを含むエンジンすなわちJSPに実行時の命令である。むしろ、メソッド呼び出しが行われ、現在のページにコード全体をコピーし、現在のページ

+1

すばらしい説明! 翻訳時(静的) ディレクティブ<%@ include file = "file.jsp"%> OR 実行時(アクション) Joe

1
をから「abc.jsp」へ

Java Revisited

  1. インクルード・ディレクティブに含まれるリソースは、jsp変換時にロードされますが、インクルード・アクションに含まれるリソースは要求時にロードされます。
  2. インクルードされたリソースの変更は、jspファイルが再度コンパイルされるまで、インクルード・ディレクティブの場合には表示されません。インクルードアクションの場合、インクルードされたリソースの変更は次のリクエストで表示されます。
  3. includeディレクティブは静的インポートですが、includeアクションは動的インポートです
  4. includeディレクティブはファイル属性を使用してインクルードするリソースを指定し、インクルードアクションは同じ目的でページ属性を使用します。
関連する問題