Jsp-expression-language

提供:Dev Guides
移動先:案内検索

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オブジェクトは単一の文字列値を返します。