[解決済み] JSP include ディレクティブ、JSP include アクション、JSP Tag Files を使ってファイルをインクルードすることの違いは何ですか?
質問
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>
これは、インクルードを使用してパラメータを渡すのと全く同じように思えます。では、Tag Fileはincludeと同じなのでしょうか?
解決方法は?
JSP構文要素の概要
まず、より明確にするために、以下のような簡単な概要を説明します。 JSP構文要素 :
- ディレクティブ : これらは、JSPページに関する情報を伝達します。 全体
- スクリプト要素 : これらは、以下のようなJavaのコーディング要素です。 宣言、式、スクリプトレット、コメント。
- オブジェクト と スコープ : JSPオブジェクトは、明示的または非明示的に作成することができます。 暗黙のうちに、与えられたスコープ内でアクセス可能である。 JSPページまたはセッションの任意の場所。
- アクション : これらはオブジェクトを作成するか、JSPの出力ストリームに影響を与えます。 のレスポンス(またはその両方)。
JSPにコンテンツが含まれる方法
JSPファイルには、コンテンツを再利用するためのいくつかの仕組みがあります。
以下は
JSPにコンテンツを含めるための4つの仕組み
は、以下のように分類されます。
直接再利用
:
(から引用した最初の3つのメカニズムについて
"ヘッドファースト サーブレットとJSP"。
)
<ブロッククオート1) インクルード ディレクティブ :
<%@ include file="header.html" %>
静的な : file 属性の値から現在のページにコンテンツを追加します。 翻訳時 . このディレクティブは 本来は、HTMLヘッダーのような静的レイアウトのテンプレート用です。
2)その
<jsp:include>
標準動作
:
<jsp:include page="header.jsp" />
ダイナミック : page 属性の値から現在のページに内容を追加します。 リクエスト時に . よりダイナミックな JSPから来るコンテンツ。
3)
<c:import>
JSTLタグです。
<c:import url=”http://www.example.com/foo/bar.html” />
ダイナミック
: URL 属性の値から現在のページにコンテンツを追加します。
リクエスト時
. と同じように動作します。
<jsp:include>
とは異なり、より強力で柔軟です。
他の2つのインクルードは
<c:import>
url は
ウェブコンテナ
!
4) 前奏曲とコーダ
静的な
: 前奏曲とコーダ
は、ページの最初と最後だけに適用することができます。
.
を暗黙のうちに含めることができます。
プレリュード
(ヘッダーとも呼ばれる) と
コーダ
(フッターとも呼ばれる) を追加することで、JSP ページのグループに対して
<include-prelude>
と
<include-coda>
の中で、それぞれ
a
<jsp-property-group>
要素で、Web アプリケーションの
web.xml
デプロイメントディスクリプタを使用します。詳しくはこちらをご覧ください。
-
JSPの最初と最後に暗黙のインクルードを設定する
-
暗黙のインクルードを定義する
タグファイル は 間接法 の方法であるコンテンツ再利用の 再利用可能なコンテンツのカプセル化 . A タグファイル として再利用可能なJSPコードの断片を含むソースファイルです。 カスタムタグ .
includeとtag fileは目的が違います。
タグファイル (JSP 2.0 で導入された概念) のオプションのひとつである カスタムタグを作成するための . をより速く簡単に構築する方法です。 カスタムタグ . カスタムタグ タグエクステンションとも呼ばれ、他のJavaコンポーネントが提供するカスタムロジックや出力をJSPページに挿入できるようにするJSP要素です。カスタムタグで提供されるロジックは、Javaオブジェクトの タグハンドラ .
カスタムタグで実行できるタスクの例としては、暗黙のオブジェクトの操作、フォームの処理、データベースや電子メールやディレクトリなどの他のエンタープライズサービスへのアクセス、フロー制御の実装などがあります。
編集について
多分、あなたの例では(あなたの "Edit"。 の段落にあるように、直接インクルードする場合とタグファイルを使用する場合の違いはありません。しかし カスタムタグには豊富な機能があります . 以下のことが可能です。
-
呼び出し元のページから渡される属性によってカスタマイズされる。
-
呼び出したページに変数を戻す。
-
JSPページで利用可能なすべてのオブジェクトにアクセスします。
-
相互に通信する。JavaBeansコンポーネントを作成し初期化し、あるタグでそのBeanを参照するパブリックEL変数を作成し、別のタグでそのBeanを使用することができます。
-
互いにネストされ、プライベート変数によって通信することができる。
また、"Pro JSP 2"からこれを読んでください。 JSPカスタムタグを理解する .
役に立つ読み物
-
のチュートリアルは、非常に有益でわかりやすい。 コアサブレットドットコム 美しい を含む説明があります。
<jsp:include> VS. <%@ include %>
比較表
JSPでファイルやアプレットをインクルードする ページ -
もうひとつのチュートリアルは コアサブレットドットコム タグライブラリと タグファイルを作成します。
カスタムJSPタグライブラリの作成。その 基礎編 -
Java EE 5 の公式チュートリアルを例題付きで紹介します。
再利用可能なコンテンツのカプセル化 タグの使用 ファイル . -
公式のJava EE 5チュートリアルのこのページで、さらに詳しく知ることができます。 より理解を深めることができます。
JSPでのコンテンツの再利用 ページ . -
本書「Pro JSP 2」からの抜粋では、次のような内容も扱っています。 なぜ を使用する代わりに、タグファイルを使用します。 :
タグによるコンテンツの再利用 ファイル -
Oracleのドキュメントに掲載されている非常に有用なガイドです。
静的インクルードと動的インクルード
まとめ
それぞれのタスクに適したツールを使用する。
使用方法 タグファイル を素早く簡単に作成する方法として カスタムタグ を支援することができます。 再利用可能なコンテンツのカプセル化 .
JSPにコンテンツを含めることについては、(引用元 ここで ):
- include ディレクティブを使用する もしファイル めったに変更されない . 一番早い仕組みです。コンテナが自動的に変更を検出しない場合は、メインページのクラスファイルを削除することで、変更を強制的に反映させることができます。
- インクルードアクションを使用する というコンテンツにのみ適用されます。 頻繁に変更される メインページがリクエストされるまで、どのページを含めるか決定できない場合。
関連
-
スレッド "main "での例外をEclipseで解決 java.lang.Error: 未解決のコンパイル問題、コンパイラとパッケージの不整合
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
javaでよく使われる英単語
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] require, include, require_once, include_onceの違い?
-
[解決済み] JDKとJREの違いは何ですか?
-
[解決済み] Java 8のmap()メソッドとflatMap()メソッドの違いは何ですか?
-
[解決済み] JavaにおけるSoftReferenceとWeakReferenceの違いは何ですか?
-
[解決済み] ConcurrentHashMapとCollections.synchronizedMap(Map)の違いは何ですか?
-
[解決済み】JSF、Servlet、JSPの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
JDKの設定時にjava.dllが見つからない、java SE Runtime Environmentが見つからない問題が発生しました。
-
eclipse の実行時に java 仮想マシンが見つからなかった
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
が 'X-Frame-Options' を 'deny' に設定しているため、フレーム内にある。
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
Exception: java.util.NoSuchElementException: 行が見つかりません
-
このラインで複数のマーカーを解決する方法
-
テストが見つかりませんでした
-
Google Chromeのエラー「Not allowed to load local resource」の解決策について
-
[解決済み】テンプレを簡単にするJSPの裏技?