JSP 式言語
JSP 式言語 (EL) を使用すると、JavaBeans に格納されたデータへのアクセスが非常に簡単になります。 JSP EL は、算術式と論理式の両方を作成するために使用できます。 JSP EL 式では、整数、浮動小数点数、文字列、定数 true、false、および null を使用できます。
単純な構文
通常、JSP タグで属性値を指定する必要がある場合は、単に文字列を使用します。
<jsp:setProperty name="box" property="perimeter" value="100"/>
JSP EL では、属性値を表す式を指定できます。簡単な式の構文は次のとおりです。
${expr}
ここで、 expr は式を指します。 JSP EL の一般的な演算子は「.」と「[]」です。これら 2 つの演算子を使用すると、埋め込み JSP オブジェクトを通じてさまざまな JavaBean プロパティにアクセスできます。
たとえば、上記の <jsp:setProperty> タグは、式言語を使用して次の形式に書き換えることができます:
<jsp:setProperty name="box" property="perimeter" value="${2*box.width+2*box.height}"/>
JSP コンパイラーはプロパティ内に「${}」形式を認識すると、評価するコードを生成します。式を検索し、式の値の代替値を生成します。
ラベルのテンプレートテキストで表現言語を使用することもできます。たとえば、<jsp:text> タグは、本文のテキストを JSP 出力に挿入するだけです。
<jsp:text> <h1>Hello JSP!</h1> </jsp:text>
ここで、次のように <jsp:text> タグの本文に式を使用します。 EL では、式内で括弧を使用して部分式を整理できます。たとえば、${(1 + 2) * 3} は 9 に等しくなりますが、${1 + (2 * 3)} は 7 に等しくなります。
EL 式の評価を無効にしたい場合は、ページ ディレクティブを使用して isELIgnored 属性値を true に設定する必要があります:
<jsp:text> Box Perimeter is: ${2*box.width + 2*box.height} </jsp:text>
この方法では、EL 式は無視されます。 false に設定すると、コンテナーは EL 式を評価します。
ELEL 式の基本演算子は、Java が提供するほとんどの算術演算子および論理演算子をサポートします。
オペレーター | 説明 |
---|---|
. | Bean プロパティまたはマッピング エントリにアクセスします |
[] | 配列またはリンク リストの要素にアクセスします |
( ) | 部分式を整理して優先度を変更する |
+ | |
を追加 - | 減算または負の値 |
* | 掛ける |
/ または div | |
を除く % または mod | 係数を計算します |
== または eq | 平等性をテストする |
!= またはね | |
と等しいかどうかをテストします。 < または lt | |
より小さいかどうかをテストします > またはGT | |
より大きいかどうかをテストします <= または le | |
以下かどうかをテストします >= または ge | |
&& または and | テストロジックと |
|| または | 論理和をテストします |
かどうか | テスト否定 |
空 | null 値をテストする |
JSP EL の関数
JSP EL では、式で関数を使用できます。これらの関数はカスタム タグ ライブラリで定義する必要があります。関数を使用するための構文は次のとおりです。
<%@ page isELIgnored ="true|false" %>
ns は名前空間を参照し、func は関数の名前を参照し、param1 は最初のパラメーターを参照し、param2 は 2 番目のパラメーターを参照します。たとえば、JSTL ライブラリで定義されている関数 fn:length があり、次のように文字列の長さを取得するために使用できます:
${ns:func(param1, param2, ...)}
タグ ライブラリの関数を使用するには、これらのライブラリを次の場所にインストールする必要があります。 <taglib> タグには、JSP ファイルにこれらのライブラリが含まれています。
JSP EL の非表示オブジェクト
JSP EL は、次の表にリストされている非表示オブジェクトをサポートします:
暗黙のオブジェクト | 説明 |
---|---|
pageScope | ページスコープ |
requestScope | リクエストスコープ |
sessionScope | セッションスコープ |
applicationScope | 適用範囲 |
param | Request オブジェクトのパラメーター、文字列 |
paramValues | Request オブジェクトのパラメータ、文字列コレクション |
ヘッダー | HTTP ヘッダー、文字列 |
headerValues | HTTP ヘッダー、文字列コレクション |
initParam | コンテキスト初期化パラメータ |
クッキー | Cookie の値 |
pageContext | 現在のページの pageContext |
これらのオブジェクトは変数と同じように式で使用できます。次に、この概念をよりよく理解するためにいくつかの例を示します。
pageContext オブジェクト
pageContext オブジェクトは、JSP の pageContext オブジェクトへの参照です。 pageContext オブジェクトを通じて、リクエスト オブジェクトにアクセスできます。たとえば、リクエスト オブジェクトで渡されたクエリ文字列へのアクセスは次のようになります:
${fn:length("Get my length")}
スコープ オブジェクト
pageScope、requestScope、sessionScope、および applicationScope 変数は、各スコープ レベルに格納されている変数にアクセスするために使用されます。
たとえば、applicationScope レイヤーの box 変数に明示的にアクセスする必要がある場合は、applicationScope.box のようにアクセスできます。
param オブジェクトと paramValues オブジェクト
param オブジェクトと paramValues オブジェクトは、request.getParameter メソッドと request.getParameterValues メソッドを使用してパラメータ値にアクセスするために使用されます。
たとえば、order という名前のパラメータにアクセスするには、${param.order} または ${param["order"]} という式を使用できます。
次の例は、リクエスト内の username パラメータにアクセスする方法を示しています:
${pageContext.request.queryString}
param オブジェクトは単一の文字列を返し、paramValues オブジェクトは文字列の配列を返します。
header オブジェクトと headerValues オブジェクト
header オブジェクトと headerValues オブジェクトは、request.getHeader メソッドと request.getHeaders メソッドを使用して情報ヘッダーにアクセスするために使用されます。
たとえば、user-agent という名前の情報ヘッダーにアクセスするには、${header.user-agent} または ${header["user-agent"]} という式を使用できます。
次の例は、ユーザー エージェント情報ヘッダーにアクセスする方法を示しています:
<%@ page import="java.io.*,java.util.*" %> <% String title = "Accessing Request Param"; %> <html> <head> <title><% out.print(title); %></title> </head> <body> <center> <h1><% out.print(title); %></h1> </center> <div align="center"> <p>${param["username"]}</p> </div> </body> </html>
実行結果は次のとおりです:
ヘッダー オブジェクトは単一の値を返しますが、headerValues は文字列の配列を返します。