Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java JSP/Servlet

JSPにおけるincludeディレクティブとjsp:includeアクションの違い

投稿日:2021年5月15日 更新日:

<目次>

(1) JSPにおけるincludeディレクティブとjsp:includeアクションの違い
 (1-1) includeディレクティブ
 (1-2) jsp:includeアクション
 (1-3) 参考:コンパイルされたファイルの確認方法

(1) JSPにおけるincludeディレクティブとjsp:includeアクションの違い

あるページに別のページを組み込む際に、includeディレクティブによる記述や、jsp:includeアクションによる記述と2通りの方法があり、いずれも見た目の結果は同じに見えるのですが内部的な処理は異なっており、当記事ではこの両者の違いについてご紹介していきます。

(図111)見た目は同じに見える

今回は例として、「A1.jsp」という名前の「本体画面」に「B2.jsp」という「ヘッダー部品(画面)」を取り込むケースを用いて説明します。
(図112)

(1-1) includeディレクティブ

●概要

こちらは「静的」なincludeです。「静的」というのは、jspの「コンパイル時」にincludeディレクティブで指定されたソースコードを合体(取り込み)して、合わせた状態でコンパイルする方式です。jspがコンパイルされた断面の状態で、画面に表示される事になります。

(図121)includeディレクティブのイメージ

A1.jspとB2.jspを合体してコンパイルした結果がクライアントから照会されます。

●内部的な処理

内部的には「A1.jsp」と「B2.jsp」が合体された状態でコンパイルされ、その際に「pageContext.getOut()」メソッドの返却結果である「JspWriter」のインスタンスに、jspの結果をどんどん書き込んでいきます。実際にコンパイルされたファイルをご紹介します。
 
次のコンパイル結果例のように、まずは「pageContext.getOut();」で「JspWriter」型のインスタンスを取得し、そこにwriteメソッドでJSPの内容がどんどん追記されています。

(コンパイル結果例)

      ~中略~
      out = pageContext.getOut();
      _jspx_out = out;

      ~中略~
      out.write("<body>\n");
      out.write("<div>(1)includeディレクティブでHeader.jspを導入</div>\n");
      out.write("\n");
      out.write("\n");
      out.write("<!DOCTYPE html>\n");
      out.write("<html>\n");
      out.write("<head>\n");
      out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n");
      out.write("</head>\n");
      out.write("<body>\n");
      out.write("<mark>\n");
      out.write("################# ヘッダー開始 #################<br />\n");
      out.write("<mark>ここはヘッダーです。</mark><br />\n");
      out.write("################# ヘッダー終了 ###################<br />\n");
      out.write("</mark>\n");
      out.write("</body>\n");
      out.write("</html>");
      out.write("\n");
      out.write("<br />\n");

 

(図122)includeディレクティブによる取り込み結果例

上記のような方式であるが故に、余りやらないかも知れませんが、例えば同じjspファイルを2回以上ページにincludeした場合、コンパイルエラー等になる事があります(例:<% int i=0; %>を2回includeしたら同一名前の変数を複数回定義されている事になり、エラーになります。
 

(1-2) jsp:includeアクション

こちらは「動的」なincludeです。

「動的」というのは、include対象のページに対して「リクエスト」を送り、それに対する結果である「レスポンス」を、呼び出し元の画面の<jsp:include>の箇所にその結果を取り込みます。
 
(図131)
 
加えて、「リクエスト」なので通常のリクエスト(例:画面から<form>タグでユーザ入力パラメータを渡すなど)と同様にパラメータを渡す事が出来ます。
 
常にリアルタイムでリクエストを送るため、静的なincludeに比べて最新の結果を取得できる事がメリットの反面、更にinclude画面への追加リクエストが発生するため、その分だけ性能面で静的なincludeよりも劣るケースがあります。
 
(コンパイル結果例)
out.write("<div>(2)jsp:includeアクションでHeader.jspを導入</div>\n");
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "ITxxxx_Header.jsp", out, false);

 

(図132)

目次にもどる

(1-3) 参考:コンパイルされたファイルの確認方法

Eclipseを使用している場合のコンパイルされたjspの確認方法については、下記の記事をご参考下さい。

 

Adsense審査用広告コード


Adsense審査用広告コード


-Java, JSP/Servlet

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Javaのsynchronizedとは?ある場合とない場合のサンプルPGを比較付き

<目次> (1) Javaのsynchronizedとは?ある場合とない場合のサンプルPGを比較付き  (1-1) synchronizedの概要  (1-2) synchronizedの構文  (1 …

JavaのMapの種類や特徴について(HashMap/LinkedHashMap/TreeMap)

<目次> (1) JavaのMapの種類や特徴について(HashMap/LinkedHashMap/TreeMap)  (1-1) Mapとは?  (1-2) Mapの種類や特徴   (1-2-1) …

JSP/Servletでウェルカムページが認証されない事象について

<目次> (1) JSP/Servletでウェルカムページが認証されない事象について  (1-1) 発生状況・エラーメッセージ  (1-2) 原因  (1-3) 対処 (1) JSP/Servletで …

バイナリ―サーチとは?Javaのサンプルプログラムを用いて解説

<目次> (1) バイナリ―サーチとは?Javaのサンプルプログラムを用いて解説  (1-1) バイナリ―サーチのアルゴリズム  (1-2) バイナリ―サーチの性能(処理回数)  (1-3) バイナリ …

サーバサイドJava(JSP&サーブレット)における画面遷移の手法とそのサンプルコードの紹介

(0)目次&概説 (1) 画面遷移の代表手法  (1-1) フォワード  (1-2) リダイレクト (2) 画面遷移手法のご紹介  (2-1) 方法1:formタグ+Submitボタン(JSP/Ser …

  • English (United States)
  • 日本語
Top