はじめに
前回JSPファイルの実行方法を解説しましたが、今回はJSPファイル特有の記述方法 「ディレクティブ」 について解説します。
ディレクティブとは、簡単に言うと「このページはこういう属性を持っていますよ」と伝えてあげる為の記述です。
HTMLタグと似た記述となっているので、 直感的に理解できると思います。
Step1: ディレクティブについて
前回使用したJSPファイルを例に見てみましょう。
上記JSPファイルの一番上に、
といったソースがありますね。
この記述がディレクティブです。 基本形はこの形式となり、 更にディレクティブには複数の種類があります。
- pageディレクティブ
- includeディレクティブ
- taglibディレクティブ
の3つです。
上記の例でいうとこのディレクティブはpageディレクティブということが確認できますね。
では、この3つのディレクティブがどういう特性を持つのか、1つずつ解説していきます。
Step2: pageディレクティブ
pageディレクティブ内へは、主にページの表示に関する設定を記述します。
先ほどのpageディレクティブを例に、どのような設定が記述されているか見てみましょう。
使用言語がjava・かつHTML形式のデータをUTF-8形式で出力するといった書き方が上記のソースとなります。
もし文字コードをSHIFT-JISに変更したい、といった要件が発生した際は、contentType=”SHIFT-JIS” にすればOKです。
補足
今回のソースでは contentType=”UTF-8″ に加えて、pageEncoding=”UTF-8″ と指定していますが、contentTypeで文字コードを指定すればpageEncodingで再度文字コードを指定しなくても大丈夫です。
頻出属性は上記3属性ですが、この他にも様々な属性が指定可能です。
現場の要件に合わせて適切な物を選択しましょう。
属性は他にも多く存在しますが、 一度に全てを覚える必要はありません。
ディレクティブの仕様自体は覚えておくべきですが、 属性は必要となった際に調べれば問題ないでしょう。
includeディレクティブ
includeディレクティブは、JSPファイルから他のJSPファイルを読み込みたい場合に使用します。
先ほど登場したpageディレクティブの指定方法は <%@ page でしたが、
includeディレクティブの場合は<%@ include と記述します。
上記がincludeディレクティブの構文です。
このディレクティブは、全JSPファイルで記述している内容を別SPファイル(1とします)として切り出し、切り出した1を全JSPファイルから読み込む(include) ように共通化したいといった場合に使用します。
具体例を見てみましょう。
【include.jsp】
上記サンプルjspファイルを、 異なる2つのjspファイルから読み込んでみます。
【index_1.jsp】
【index_2.jsp】
【実行結果 index_1.jsp】
【実行結果 index_2.jsp】
いずれも同じ現在年月日が取得されていますね。
このように、 includeを使用すれば資材を使いまわすことが可能となり、 ソースが読みやすくなります。
現場ではヘッダーやフッターを共通化する際に使用することも多いため、 includeの挙動を理解しておきましょう。
Step3: taglibディレクティブ
最後に解説するのがtaglibディレクティブです。
定期的に使用する処理をタグに定義し、このディレクティブで呼び出して使用するといった使い方をします。
上記がtaglibディレクティブの構文です。
構文についてざっくり説明すると、
- タグライブラリのURI→使用したいタグの情報が記載されている設定ファイル
- カスタムタグの接頭辞 JSPからタグを呼び出す際に使用する名称
といった具合です。
タグの使用にはいくつか手順を踏むので、どのように使用するか例を見てみましょう。
1 : タグハンドラクラスの作成
まず、タグを呼び出した際に行いたい処理をクラスに記述します。
今回は 「hello world」 を表示するサンプルを作成します。
1:「hello world」 と表示するためのクラスを作成
サンプルコード(helloTagServlet.java) ↓
見慣れない構文が多く登場しますが、殆どは定型文(いわゆるおまじないですね)なので深く考えなくて大丈夫です。
ここで着目すべき記述は以下の2点です。
- doStartTag()
- doEndTag( )
doStartTag()内へは、JSPからtaglibディレクトリを指定した際に行いたい処理を記述します。
今回はタグを呼び出した際に 「hello world」 と表示させるため、 try { } 内が上記の記述となっています。
その後に続く doEndTag() についてですが、このメソッド内へは doStartTag()内の処理が終了した後に行われる処理を記述します。 return EVAL_PAGE; はJSPページにコントローラーで処理を行った結果を返すといった意味合いを持っており、今回の場合は「画面にhello worldと表示するよ」 という結果を返します。
これも構文なので、処理の流れを把握していれば深く考えなくて大丈夫です。
2:tld ファイルの作成
tldファイルとは、上記で作成したクラスとJSPファイルを紐づけるための設定ファイルです。
サンプルコード↓ (hello.tld)
<name> タグへJSPファイルのtaglibディレクトリから呼び出すための名称を指定し、<tag-class> タグへは上記で作成したタグハンドラクラスを指定します。
3:web.xmlの作成
web.xmlは、作成したtldファイルとJSPファイルを紐づけるためのファイルです。
サンプルコード↓(web.xml)
<taglib-uri> タグへJSPのtaglibディレクトリ <%@ taglib uri=”ooo” へ指定するuriを記述し、<taglib-location> タグへは tldファイルの配置パスを指定します。
4:JSPファイルの作成
JSPファイル内へ下記
<%@ taglib uri="(タグライブラリのURI)" prefix=" (カスタムタグの接頭辞)" %>
を指定することで、 画面へ 「hello world」 と表示させます。
サンプルコード↓(hello.jsp)
上記taglibディレクトリ内のurl=○○○へ、xmlファイルで指定した
のタグ内と同じuriを記述し、prefixへはJSPファイル内でタグを使用するための名称(何でも大丈夫です)を指定します。
実際に、指定したprefix hello がbody内で
と使用されていることが確認できますね。
hello: の後にtldファイルで指定した <name> タグと同じ値
を指定することで、タグハンドラクラスへ記述した 「hello world」 と出力する処理が実行されます。
まとめ
pageディレクティブ includeディレクティブは記述自体もシンプルであり、実際に現場で目にする機会も多いでしょう。
ですがtaglibディレクティブに関してはファイル定義がやや複雑なうえ、自身でカスタムタグを定義する機会はそこまで多くありません。
現時点で事細かに定義方法を覚える必要はありませんが、 現場で作成・改修を行うことになった際、taglibディレクトリについて調べた内容を把握できるようにしておくとグッドです。
