JSPでテンプレート化する方法は2つあるようです。これらのステートメントのいずれかを含むファイルを含める
<%@ include file="foo.html" %>
<jsp:include page="foo.html" />
またはJSPタグファイルを使用する
// Save this as mytag.tag
<%@ tag description="Description" pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
<jsp:doBody/>
</body>
</html>
そして、別のJSPページでそれを呼び出す
<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>
<t:mytag>
<h1>Hello World</h1>
</t:mytag>
それで、どの方法を使うべきですか?現在は非推奨とみなされていますか、それとも有効であり、さまざまなユースケースをカバーしていますか?
編集
このタグファイルは、インクルードの使用と同じではありませんか?
// Save this as product.tag
<%@ tag description="Product templage" pageEncoding="UTF-8"%>
<%@ tag import="com.myapp.Product" %>
<%@ attribute name="product" required="true" type="com.myapp.Product"%>
Product name: ${product.name} <br/>
Quantity: ${product.quantity} <br/>
そして、別のJSPでそれを呼び出します
<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>
<t:product>
<c:forEach items="${cart.products}" var="product">
<t:product product="${product}"/>
</c:forEach>
</t:product>
これは、インクルードを使用してパラメーターを渡すのとまったく同じように思えます。タグファイルはインクルードと同じですか?
JSPファイルのコンテンツを再利用するためのメカニズムがいくつかあります。
次のJSPにコンテンツを含める4つのメカニズムは、直接再利用に分類できます。
( "Head First Servlets and JSP" から引用した最初の3つのメカニズムの場合)
1)includeディレクティブ:
<%@ include file="header.html" %>
静的:ファイル属性の値からコンテンツを現在のページに追加します翻訳時。このディレクティブはもともと、HTMLヘッダーなどの静的レイアウトテンプレートを対象としていました。
2)
<jsp:include>
標準アクション:<jsp:include page="header.jsp" />
動的:ページ属性の値から現在のページにコンテンツを追加します要求時に。 JSPからの動的コンテンツをより意図したものです。
3)
<c:import>
JSTLタグ:<c:import url=”http://www.example.com/foo/bar.html” />
動的:URL属性の値から現在のページにコンテンツを追加します要求時に。これは
<jsp:include>
と非常によく似ていますが、より強力で柔軟性があります。他の2つのインクルードとは異なり、<c:import>
RLはWebコンテナの外部からでもかまいません!4)プレリュードとコーダ:
静的:プレリュードとコーダページの最初と最後にのみ適用できます。
<include-prelude>
要素と<include-coda>
要素をそれぞれ<jsp-property-group>
に追加することにより、JSPページのグループにpreludes(ヘッダーとも呼ばれます)およびcodas(フッターとも呼ばれます)を暗黙的に含めることができますWebアプリケーションweb.xmlデプロイメント記述子の要素。詳細はこちら:
• JSPの開始時と終了時の暗黙的なインクルードの設定
• 暗黙的インクルードの定義
タグファイルは、間接的な方法コンテンツの再利用、再利用可能なコンテンツのカプセル化の方法です。 タグファイルは、カスタムタグとして再利用可能なJSPコードのフラグメントを含むソースファイルです。
インクルードとタグファイルの目的は異なります。
タグファイル (JSP 2.0で導入された概念)は、オプションの1つですカスタムタグを作成するための。 カスタムタグを構築するより速くて簡単な方法です。 カスタムタグ は、タグ拡張とも呼ばれ、他のJavaコンポーネントによって提供されるカスタムロジックと出力をJSPページに挿入できるJSP要素です。カスタムタグを介して提供されるロジックは、タグハンドラとして知られるJavaオブジェクトによって実装されます。
カスタムタグで実行できるタスクの例には、暗黙オブジェクトの操作、フォームの処理、データベースや電子メールやディレクトリなどのエンタープライズサービスへのアクセス、フロー制御の実装が含まれます。
たぶんあなたの例(あなたのEdit)で、直接インクルードとタグファイルの使用に違いはありません。ただし、カスタムタグには豊富な機能セットがあります。彼らはできる
呼び出しページから渡される属性を使用してカスタマイズします。
変数を呼び出しページに返します。
JSPページで使用可能なすべてのオブジェクトにアクセスします。
互いに通信します。 JavaBeansコンポーネントを作成および初期化し、1つのタグでそのBeanを参照するパブリックEL変数を作成してから、そのBeanを別のタグで使用できます。
互いにネストし、プライベート変数を使用して通信します。
「Pro JSP 2」からもこれをお読みください: JSPカスタムタグについて 。
coreservlet.comの非常に有益で理解しやすいチュートリアルで、<jsp:include> VS. <%@ include %>
比較表を含む美しい説明があります。
JSPページにファイルとアプレットを含める
タグライブラリとタグファイルに関連するcoreservlets.comの別の素敵なチュートリアル:
カスタムJSPタグライブラリの作成:基本
公式のJava EE 5チュートリアルと例:
タグファイルを使用した再利用可能なコンテンツのカプセル化 。
公式Java EE 5チュートリアルのこのページでは、さらに理解を深めることができます。
JSPページでコンテンツを再利用する 。
「Pro JSP 2」という本からの抜粋も議論していますなぜ静的インクルードを使用する代わりにタグファイルが必要なのですか:
タグファイルを使用したコンテンツの再利用
各タスクに適切なツールを使用します。
タグファイルカスタムタグをすばやく簡単に作成し、再利用可能なコンテンツをカプセル化するのに役立ちます。
JSPにコンテンツを含める場合( here からの引用):
- includeディレクティブを使用ファイル変更がほとんどないの場合。最速のメカニズムです。コンテナが変更を自動的に検出しない場合は、メインページクラスファイルを削除して、変更を強制的に有効にすることができます。
- includeアクションを使用頻繁に変更されるのコンテンツに対してのみ、およびメインページが要求されるまでどのページを含めるかを決定できない場合。
<@include>
-ディレクティブタグは、生成されたサーブレットコードを作成する前に、含まれているファイルの内容をJSPにマージするようJSPコンパイラーに指示します。これは、インクルードページのテキストをJSPにカットアンドペーストするのと同じです。
<jsp:include>
-一方、JSP Actionタグは、このページの実行を一時停止し、含まれているページを実行し、そのページの出力をこのページの出力にマージするようにコンテナに指示します。
ニーズに応じて、
<@include>
または<jsp:include>
を使用できます
<jsp:include />
に対する<%@ include >
の主な利点は次のとおりです。
<jsp:include />
はパラメーターを渡すことができます
<jsp:include page="inclusion.jsp">
<jsp:param name="menu" value="objectValue"/>
</jsp:include>
<%@include file="somefile.jsp" %>
では不可能です
3つのテンプレートオプション(<%@include>
、<jsp:include>
、<%@tag>
)はすべて有効であり、3つすべてが異なるユースケースに対応しています。
<@include>
を使用すると、JSPパーサーはコンパイル前にインクルードファイルのコンテンツをJSPにインライン化します(Cの#include
と同様)。このオプションは、単純な静的コンテンツで使用します。たとえば、Webアプリのすべてのページにヘッダー、フッター、またはナビゲーション要素を含める場合。含まれるコンテンツはコンパイルされたJSPの一部になり、実行時に追加費用は発生しません。
<jsp:include>
(およびJSTLの<c:import>
は、類似しており、さらに強力です)は、動的コンテンツに最適です。これらは、ローカルまたはリモートの別のURLのコンテンツを含める必要がある場合に使用します。含めるリソース自体が動的な場合。または、インクルードされたコンテンツが、インクルードページと競合する変数またはBean定義を使用している場合。 <c:import>
を使用すると、含まれているテキストを変数に格納することもでき、これをさらに操作または再利用できます。どちらもディスパッチに追加のランタイムコストがかかります。これは最小限ですが、動的インクルードが「無料」ではないことに注意する必要があります。
再利用可能なユーザーインターフェイスコンポーネントを作成する場合は、タグファイルを使用します。たとえば、ウィジェットのリストがあり、ウィジェットを反復処理し、それぞれのプロパティを(テーブルまたはフォームで)表示する場合は、タグを作成します。タグは、<%@tag attribute>
を使用して引数を取ることができ、これらの引数は、メソッドパラメーターのように必須またはオプションのいずれかです。
タグファイルは、JSPベースのよりシンプルなタグライブラリ記述メカニズムであり、(JSP 2.0より前)Javaコードを使用して記述する必要がありました。タグで行うレンダリングが多い場合、JSPタグファイルを作成する方がはるかにクリーンです。Javaでタグを記述した場合のようにJavaとHTMLコードを混在させる必要はありません。 。