<% include %>

<% include %> とは、他のJSPページを静的にインクルードするJSPディレクティブである。ヘッダーやフッターなど、各ページで共通の部分を部品化することができる。

静的インクルードとは、JSPのソースコードをコンパイルしてJavaサーブレットへ変換するときに、インクルード元のJSPソースコードとインクルード先のJSPソースコードをマージ(併合)して、ひとつのJSPソースコードに纏めることである。複数のJSPソースコードがマージされてひとつのJSPソースコードになるため、インクルード元JSPソースコードとインクルード先JSPソースコードで変数を共有できる利点がある。

ひとつに纏められたJSPソースコードがコンパイルされ、ひとつのJavaサーブレットが生成される。

静的インクルード
Figure 1. 静的インクルード

静的インクルードでは、インクルード先JSPソースコードの内容を変更しても、その変更内容が反映されない。インクルード先JSPソースコードの変更を反映させるには、インクルード元JSPソースコードの再コンパイルが必要である。

タグ

<% include file="/header.jsp" %>

属性

<jsp:include> タグには次の属性を指定する。

file
インクルードするページを絶対パスまたは相対パスで指定する。

サンプル

JSPの例を次に示す。

<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html>
  <head>
    <title>JSP include example</title>
  </head>
  <body>
    <% include file="/include/header.jsp" %>
    <!-- content -->
    <% include file="/include/footer.jsp" %>
  </body>
</html>

JSPのインクルードで文字化けを防ぐため、インクルード先のJSPページでは <%@ page %> ディレクティブの pageEncoding 属性で文字コードを指定する。<%@ page %> ディレクティブの pageEncoding 属性には、JSPページの文字コードを指定する。

<%@ page pageEncoding="UTF-8" %>

指定する文字コードは、インクルード元JSPページの <%@ page %> ディレクティブの contentType 属性に指定した文字コード(charset)と一致させる。

<%@ page %> ディレクティブの contentType 属性に指定した文字列は、HTTPレスポンスヘッダーの Content-Type に反映される。

アクションタグとの違い

<%@ include %> ディレクティブと <jsp:include> アクションタグは、どちらも他のページをインクルードすることができる。両者には次のような違いがある。

includeアクションとincludeディレクティブの違い
<%@ include %> <jsp:include>
ファイルパスを指定する属性 file page
実行速度 速い 遅い
変数の共有 できる できない
パラメータ 渡せない 渡せる
生成されるJavaサーブレット ひとつ 複数
インクルード先ファイル内容変更の反映 インクルード元コンパイル時 即時

静的インクルードでは複数のJSPソースコードがひとつに纏められるため、インクルード先へパラメータを渡すことができない。そもそも、ひとつのJSPソースコードに纏められて変数を共有できるため、パラメータを渡す必要性が無い。

動的インクルードでは、インクルード元のJSPソースコードとインクルード先のJSPソースコードが別々のJavaサーブレットにコンパイルされる。そのため、インクルード元とインクルード先で変数を共有することができない。ただし、インクルード先のJSPへパラメータを渡すことはできる。

動的インクルードでは、インクルード先のJSPソースコードの内容を変更すると、インクルード先のJavaサーブレットがコンパイルされるため、変更内容がすぐに反映される。

JSPディレクティブ

JSPには次に示すディレクティブがある。

JSPアクションタグ

JSPには次に示すアクションタグがある。

JSP標準タグライブラリ

JSP標準タグライブラリ(JSTL)にはに示すタグがある。