<% include %> とは、他のJSPページを静的にインクルードするJSPディレクティブである。ヘッダーやフッターなど、各ページで共通の部分を部品化することができる。
静的インクルードとは、JSPのソースコードをコンパイルしてJavaサーブレットへ変換するときに、インクルード元のJSPソースコードとインクルード先のJSPソースコードをマージ(併合)して、ひとつのJSPソースコードに纏めることである。複数のJSPソースコードがマージされてひとつのJSPソースコードになるため、インクルード元JSPソースコードとインクルード先JSPソースコードで変数を共有できる利点がある。
ひとつに纏められたJSPソースコードがコンパイルされ、ひとつのJavaサーブレットが生成される。
静的インクルードでは、インクルード先JSPソースコードの内容を変更しても、その変更内容が反映されない。インクルード先JSPソースコードの変更を反映させるには、インクルード元JSPソースコードの再コンパイルが必要である。
<% include file="/header.jsp" %>
<jsp:include> タグには次の属性を指定する。
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 %> |
<jsp:include> |
|
---|---|---|
ファイルパスを指定する属性 | file | page |
実行速度 | 速い | 遅い |
変数の共有 | できる | できない |
パラメータ | 渡せない | 渡せる |
生成されるJavaサーブレット | ひとつ | 複数 |
インクルード先ファイル内容変更の反映 | インクルード元コンパイル時 | 即時 |
静的インクルードでは複数のJSPソースコードがひとつに纏められるため、インクルード先へパラメータを渡すことができない。そもそも、ひとつのJSPソースコードに纏められて変数を共有できるため、パラメータを渡す必要性が無い。
動的インクルードでは、インクルード元のJSPソースコードとインクルード先のJSPソースコードが別々のJavaサーブレットにコンパイルされる。そのため、インクルード元とインクルード先で変数を共有することができない。ただし、インクルード先のJSPへパラメータを渡すことはできる。
動的インクルードでは、インクルード先のJSPソースコードの内容を変更すると、インクルード先のJavaサーブレットがコンパイルされるため、変更内容がすぐに反映される。
JSPには次に示すディレクティブがある。
<%@ page %>
<%@ taglib %>
JSPには次に示すアクションタグがある。
JSP標準タグライブラリ(JSTL)にはに示すタグがある。