English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JSP 表現言語

JSP表現言語(EL)は、JavaBeanに格納されたデータにアクセスするのを非常に簡単にします。JSP ELは、算術式や論理式の作成にも使用できます。JSP EL式内では、整数、浮動小数点数、文字列、常のtrue、false、nullを使用できます。

シンプルな文法

一般的には、JSPタグで属性値を指定する必要がある場合、単に文字列を使用するだけで十分です:

<jsp:setProperty name="box" property="perimeter" value="100"/>

JSP ELでは、属性値を表す式を指定することができます。シンプルな文法は以下の通りです:

${expr}

exprは、式を指します。JSP ELでは、一般的な演算子は.と{}です。これらの演算子は、内蔵の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>タグの主体で表現式を使用します。以下のように:

<jsp:text>
Box Perimeter is: ${2*box.width + 2*box.height}
</jsp:text>

EL表現式中で丸括弧を使用して子表現式を組織することができます。例えば${(1 + 2) * 3}9、しかし${1 + (2 * 3}7。

EL表現式の評価を停止するには、page指令を使用してisELIgnored属性値をtrueに設定する必要があります:

<%@ page isELIgnored ="true|false" %>

これにより、EL表現式は無視されます。falseに設定すると、コンテナがEL表現式を計算します。

ELの基本演算子

EL表現式はJavaが提供する多くの算術および論理演算子をサポートしています:

演算子説明
. Bean属性またはマップエントリにアクセスする
[] 配列またはリストの要素にアクセスする
( ) 子表現式を組織して優先順位を変更する
+
- 減またはマイナス
*
/ またはdiv
%またはmod 取模
==またはeq テストの等
!=またはne テストの不等
<またはlt テストの小さい
>またはgt テストの大きい
<=またはle テストの小さく等于
>=またはge テストの大きく等于
&&またはand テストの論理と
||またはor テストの論理或
!またはnot テストの否定
empty 空値のテスト

JSP ELの関数

JSP ELでは、表現式内で関数を使用することができます。これらの関数はカスタムタグライブラリで定義されている必要があります。関数の使用方法は以下の通りです:

${ns:func(param1、param2、...}

nsはネームスペース(namespace)、funcは関数の名前、paramです。1これは第1引数を指し、paramです。2これは第2引数を指し、そのように続きます。例えば、fn:length関数はJSTLライブラリで定義されており、以下のように文字列の長さを取得できます:

${fn:length("Get my length")}

タグライブラリの関数を使用するには、これらのライブラリをサーバーにインストールし、JSPファイルで<taglib>タグを使用してこれらのライブラリを含める必要があります。

JSP EL隠しオブジェクト

JSP ELがサポートする以下の隠しオブジェクト:

隠しオブジェクト説明
pageScope page作用域
requestScope request作用域
sessionScope session作用域
applicationScope application作用域
param Requestオブジェクトのパラメータ、文字列
paramValues Requestオブジェクトのパラメータ、文字列の集合
header HTTP情報ヘッダー、文字列
headerValues HTTP情報ヘッダー、文字列の集合
initParam コンテキスト初期化パラメータ
cookie Cookie値
pageContext 現在のページのpageContext

これらのオブジェクトは、変数のように表現内で使用できます。次にいくつかの例を示して、この概念をよりよく理解するために説明します。

pageContextオブジェクト

pageContextオブジェクトはJSPのpageContextオブジェクトの参照です。pageContextオブジェクトを通じて、requestオブジェクトにアクセスできます。例えば、requestオブジェクトに渡されたクエリ文字列にアクセスする場合、次のようにします:

${pageContext.request.queryString}

Scopeオブジェクト

pageScope、requestScope、sessionScope、applicationScope変数は、それぞれの作用域レベルに保存されている変数にアクセスするために使用されます。

例えば、applicationScopeレベルのbox変数を明示的にアクセスする場合、次のようにアクセスできます:applicationScope.box。

paramおよびparamValuesオブジェクト

paramおよびparamValuesオブジェクトは、request.getParameterメソッドおよびrequest.getParameterValuesメソッドを使用してパラメータ値にアクセスするために使用されます。

例えば、orderという名前のパラメータにアクセスする場合、次のように表現を使用できます:${param.order}、または${param["order"]}。

次の例では、request内のusernameパラメータへのアクセス方法を示します:

<%@ 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>

paramオブジェクトは単一の文字列を返し、paramValuesオブジェクトは文字列の配列を返します。

headerおよびheaderValuesオブジェクト

headerおよびheaderValuesオブジェクトは、request.getHeaderメソッドおよびrequest.getHeadersメソッドを使用してヘッダをアクセスするために使用されます。

例えば、user-agentの情報ヘッダを表現式で使用する方法:${header.user-agent}、または${header["user-agent"]}。

次の例では、user-agent情報ヘッダ:

<%@ page import="java.io.*,java.util.*" %>
<%
    String title = "User Agent Example";
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>${header["user-agent"]}</p>
</div>
</body>
</html>

実行結果は以下の通りです:

headerオブジェクトは単一の値を返し、headerValuesは文字列の配列を返します。