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のDequeの概要や使い方+サンプルプログラムもご紹介

<目次> (1) JavaのDequeの概要や使い方+サンプルプログラムもご紹介  (1-1) Dequeとは?  (1-2) Dequeを実装したクラス  (1-3) Dequeの使い方  (1-4 …

「Graphics Device initialization failed for : es2, sw」エラーの原因と対処方法(Java FX関連)

  <目次> (1) 「Graphics Device initialization failed for : es2, sw」エラーの原因と対処方法(Java FX関連)  (1-1) エ …

JSP/Servletでcsvをダウンロードする機能を作成する手順

<目次> (1) JSP/Servletでcsvをダウンロードする機能を作成する手順  (1-0) 実現方針  (1-1) STEP1:Servletの追記  (1-2) STEP2:JSPの追記   …

JFreeChartで描画したグラフをJSP/Servlet画面に表示する方法

(0)目次&概説 (1) 記事の目的  (1-1) 目的 (2) 表示方法の概要  (2-1) 表示の仕組み  (2-2) 実装の手順 (3) サンプルプログラム  (3-1) JSPのサンプルプログ …

JavaScriptでformをPOSTリクエストでsubmitするプログラムの例

  <目次> (1) JavaScriptでformをPOSTリクエストでsubmitするプログラムの例  (1-1) 概要  (1-2) 構文  (1-3) サンプルプログラム  (1-4 …

  • English (United States)
  • 日本語
Top