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

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

関連記事

Failed to execute goal org.apache.mavenエラーの原因と対処(Spring BootのMavenプロジェクトで発生)

  <目次> (1) Failed to execute goal org.apache.mavenエラーの原因と対処(Spring BootのMavenプロジェクトで発生)  (1-1) …

Javaのフォーム認証でログインを行うと数回で固まってしまう事象の対処記録

<目次> (1) Javaのフォーム認証でログインを行うと数回で固まってしまう事象の対処記録  (1-1) 発生事象・エラーメッセージ  (1-2) 原因  (1-3) 対策 (1) Javaのフォー …

APサーバ(Java)⇒DBサーバ(OracleDB 11g)へJDBC接続する方法まとめ

(0)目次 (1) 前提条件 (2) JDBCドライバーのインストール  (2-1) JDBCドライバーをダウンロード  (2-2) APサーバにアップロード・解凍 (3) プログラムの実装  (3- …

Javaでdouble型での誤差を対処する方法について+サンプルプログラムも紹介

(1) Javaでの誤差の対処法  (1-1) 対処が必要なケース  (1-2) 対処の方法   (1-2-1) BigDecimalクラスでの対処   (1-2-2) int型を優先的に使い対処   …

オープンアドレス法をJavaで実装したプログラムのサンプルをご紹介

<目次> (1) オープンアドレス法をJavaで実装したプログラムのサンプルをご紹介  (1-1) オープンアドレス法とは  (1-2) Javaのサンプルプログラムの全体像  (1-3) Javaの …

  • English (United States)
  • 日本語
Top