Jsp-expression-language
JSP-式言語(EL)
JSP Expression Language(EL)を使用すると、JavaBeansコンポーネントに格納されているアプリケーションデータに簡単にアクセスできます。 JSP ELを使用すると、(a)*算術式と(b)*論理式の両方を作成できます。 JSP EL式内では、*整数、浮動小数点数、文字列、ブール値の組み込み定数trueおよびfalse *、およびnullを使用できます。
簡単な構文
通常、JSPタグで属性値を指定するときは、単に文字列を使用します。 たとえば-
<jsp:setProperty name = "box" property = "perimeter" value = "100"/>
JSP ELを使用すると、これらの属性値のいずれかに式を指定できます。 JSP ELの簡単な構文は次のとおりです-
${expr}
ここで、 expr は式自体を指定します。 JSP ELで最も一般的な演算子は*。および *[] です。 これらの2つの演算子を使用すると、Java Beanおよび組み込みJSPオブジェクトのさまざまな属性にアクセスできます。
たとえば、上記の構文 <jsp:setProperty> タグは、次のような式で記述できます-
<jsp:setProperty name = "box" property = "perimeter"
value = "${2*box.width+2*box.height}"/>
JSPコンパイラは、属性に $ \ {} フォームを見つけると、コードを生成して式を評価し、expressonの値を置き換えます。
タグのテンプレートテキスト内でJSP EL式を使用することもできます。 たとえば、 <jsp:text> タグは、JSPの本文内にコンテンツを挿入するだけです。 次の <jsp:text> 宣言は <h1> Hello JSP!</h1> をJSP出力に挿入します-
<jsp:text>
<h1>Hello JSP!</h1>
</jsp:text>
属性に使用する同じ $ \ {} 構文を使用して、JSP EL式を <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式の評価を無効にするには、以下のようにページディレクティブの isELIgnored 属性を指定します-
<%@ page isELIgnored = "true|false" %>
この属性の有効な値はtrueおよびfalseです。 trueの場合、静的テキストまたはタグ属性に表示されるEL式は無視されます。 falseの場合、EL式はコンテナによって評価されます。
ELの基本的な演算子
JSP Expression Language(EL)は、Javaでサポートされているほとんどの算術演算子と論理演算子をサポートしています。 次の表は、最も頻繁に使用される演算子を示しています-
S.No. | Operator & Description |
---|---|
1 |
. Beanプロパティまたはマップエントリにアクセスする |
2 |
[] 配列またはリスト要素にアクセスする |
3 |
( ) 部分式をグループ化して評価順序を変更する |
4 |
+ 添加 |
5 |
- 値の減算または否定 |
6 | 乗算 |
7 |
/or div 分割 |
8 |
% or mod モジュロ(剰余) |
9 |
== or eq 平等のテスト |
10 |
!= or ne 不平等のテスト |
11 |
< or lt 未満のテスト |
12 |
> or gt より大きいかどうかをテストする |
13 |
⇐ or le 以下のテスト |
14 |
>= or ge 以上のテスト |
15 |
&& or and 論理ANDのテスト |
16 | * |
or or* 論理ORのテスト | |
17 |
! or not 単項ブール補数 |
18 |
empty 空の変数値をテストする |
JSP ELの関数
JSP ELでは、式で関数を使用することもできます。 これらの関数は、カスタムタグライブラリで定義する必要があります。 関数の使用法には次の構文があります-
${ns:func(param1, param2, ...)}
ここで、 ns は関数の名前空間、 func は関数の名前、 param1 は最初のパラメーター値です。 たとえば、JSTLライブラリの一部である関数 fn:length 。 この関数を次のように使用して、文字列の長さを取得できます。
${fn:length("Get my length")}
タグライブラリ(標準またはカスタム)の関数を使用するには、サーバーにそのライブラリをインストールし、JSTLの章で説明されているように <taglib> ディレクティブを使用してJSPにライブラリを含める必要があります。
JSP EL暗黙オブジェクト
JSP式言語は、次の暗黙的なオブジェクトをサポートしています-
S.No | Implicit object & Description |
---|---|
1 |
pageScope ページスコープからのスコープ変数 |
2 |
requestScope 要求スコープのスコープ変数 |
3 |
sessionScope セッションスコープのスコープ変数 |
4 |
applicationScope アプリケーションスコープのスコープ変数 |
5 |
param 文字列としてのリクエストパラメータ |
6 |
paramValues 文字列のコレクションとしてのリクエストパラメータ |
7 |
header 文字列としてのHTTP要求ヘッダー |
8 |
headerValues 文字列のコレクションとしてのHTTP要求ヘッダー |
9 |
initParam コンテキスト初期化パラメーター |
10 |
cookie クッキー値 |
11 |
pageContext 現在のページのJSP PageContextオブジェクト |
これらのオブジェクトは、変数のように式で使用できます。 以下の例は、概念を理解するのに役立ちます-
pageContextオブジェクト
pageContextオブジェクトを使用すると、pageContext JSPオブジェクトにアクセスできます。 pageContextオブジェクトを使用して、リクエストオブジェクトにアクセスできます。 たとえば、要求の着信クエリ文字列にアクセスするには、次の式を使用できます-
${pageContext.request.queryString}
スコープオブジェクト
*pageScope、requestScope、sessionScope* 、および *applicationScope* 変数は、各スコープレベルに格納されている変数へのアクセスを提供します。
たとえば、アプリケーションスコープのボックス変数に明示的にアクセスする必要がある場合は、applicationScope変数から applicationScope.box としてアクセスできます。
paramおよびparamValuesオブジェクト
paramおよびparamValuesオブジェクトを使用すると、 request.getParameter および request.getParameterValues メソッドを介して通常使用可能なパラメーター値にアクセスできます。
たとえば、orderという名前のパラメーターにアクセスするには、式 $ \ {param.order} または $ \ {param ["order"]} を使用します。
以下は、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>
paramValuesオブジェクトは文字列配列を返すのに対し、paramオブジェクトは単一の文字列値を返します。
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>
出力は次のようになります-
User Agent Example
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0;
SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729;
Media Center PC 6.0; HPNTDF; .NET4.0C; InfoPath.2)
headerValuesオブジェクトは文字列配列を返すのに対し、headerオブジェクトは単一の文字列値を返します。