JSPのヘッダ部の記述を共通化する

Servlet 2.4/JSP 2.0でサポートされた機能で、 taglibディレクティブなど、JSPの冒頭部分でどのページにも共通する記述を、 1つのファイルにまとめて宣言することが出来るようになりました。
まず、web.xmlでそのファイルを宣言します。

<?xml version="1.0" encoding="Shift_JIS"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
 version="2.4">
...
  <jsp-config>
    <jsp-property-group>
      <url-pattern>*.jsp</url-pattern>
      <el-ignored>false</el-ignored>
      <page-encoding>Windows-31J</page-encoding>
      <scripting-invalid>false</scripting-invalid>
      <include-prelude>/CommonJSPHeaders.jsp</include-prelude>
    </jsp-property-group>
  </jsp-config>
...
</web-app>

web-appタグで2.4仕様を宣言します。その中で、jsp-configタグを上の例のように記述します。 include-preludeの中は、その共通部分を書くファイルのパスで、 スラッシュ/で始め、コンテキストルートからの相対パスで記述します。 以下はその/CommonJSPHeaders.jspの例です。

<%@ page contentType="text/html;charset=Windows-31J" language="Java" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>

個々のJSPファイルでは、上記と同じ記述は全て省くことができ、とても便利です。
なお、include-preludeと同じように、ヘッダ部の代わりにフッタ部(HTMLの末尾) を共通化する、include-codaというタグも使えます。

ちなみに、上記の「scripting-invalid」という要素をtrueにすると、 そのパターンに合致するJSPにはスクリプティング要素、つまりいわゆるスクリプトレットが書けなくなります。 <% 〜 %>のようなブロックが見つかると、 JasperException (スクリプティング要素…中略…はここでは許されません) が発生します。
省略時デフォルトはfalse。

scripting-invalidの説明をしたのでel-ignoredの説明をしなければいけますまい! (聞いてないって) これはJSPに直接EL式(${...})を書いた場合にそれを解釈する(false)か、 無視してそのままの文字列として出力する(true)かを設定します。省略時デフォルトはこちらもfalse。

Server Side Java Index Top

(first uploaded 2005/03/16 last updated 2007/07/07, URANO398)

Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!