1. ホーム
  2. java

[解決済み] JSP include ディレクティブ、JSP include アクション、JSP Tag Files を使ってファイルをインクルードすることの違いは何ですか?

2022-04-25 04:24:24

質問

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 ディレクティブを使用する もしファイル めったに変更されない . 一番早い仕組みです。コンテナが自動的に変更を検出しない場合は、メインページのクラスファイルを削除することで、変更を強制的に反映させることができます。
  • インクルードアクションを使用する というコンテンツにのみ適用されます。 頻繁に変更される メインページがリクエストされるまで、どのページを含めるか決定できない場合。