位置:首頁 > Java技術 > JSP教學 > JSP表達式語言(EL)

JSP表達式語言(EL)

JSP表達式語言(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中最常用的運算符 . 和 []。這兩個操作符允許訪問Java Beans各種屬性和內置的JSP對象。

例如上述的語法<jsp:setProperty>標記可寫的像的表達式:

 
<jsp:setProperty name="box" property="perimeter" 
                 value="${2*box.width+2*box.height}"/>

當JSP編譯器看到的${}形式中的一個屬性,它會生成代碼來計算表達式並替換表達式的值。

您還可以使用JSP EL表達式模板文本中的標記。例如,<jsp:text>標簽僅僅插入JSP主體內的內容。下麵<jsp:text>聲明插入<h1>Hello JSP!</h1>到JSP輸出!

 
<jsp:text>
<h1>Hello JSP!</h1>
</jsp:text>

可以包括和使用的屬性相同的${}語法的<jsp:text>標簽(或任何其他標記)主體一個JSP EL表達式。例如:

 
<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屬性:

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

此屬性的有效值為true和false。如果為true,EL表達式,當他們出現在靜態文本或標簽屬性被忽略。如果為false,EL表達式是由容器計算。

EL中的基礎運算符:

JSP表達式語言(EL)支持絕大多數由Java支持的算術運算和邏輯運算符。下麵是最常用的運算符的列表:

Operator 描述
. Access a bean property or Map entry
[] Access an array or List element
( ) Group a subexpression to change the evaluation order
+ Addition
- Subtraction or negation of a value
* Multiplication
/ or div Division
% or mod Modulo (remainder)
== or eq Test for equality
!= or ne Test for inequality
< or lt Test for less than
> or gt Test for greater than
<= or le Test for less than or equal
>= or gt Test for greater than or equal
&& or and Test for logical AND
|| or or Test for logical OR
! or not Unary Boolean complement
empty Test for empty variable values

JSP EL中的函數:

JSP EL中,可以使用表達式的函數也是如此。這些函數必須在自定義標簽庫來定義。函數用法的語法如下:

 
${ns:func(param1, param2, ...)}

其中ns是函數的命名空間,func是函數的名稱,param1是所述第一參數值。例如,函數 fn:length,這是JSTL庫的一部分可用於如下來獲得字符串的長度。

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

使用任何標簽庫(標準或自定義)的函數,則必須在服務器上安裝該庫,必須使用<taglib>指令,因為在JSTL解釋包含在JSP庫。

JSP EL隱式對象:

JSP表達式語言支持以下隱式對象:

Implicit object 描述
pageScope Scoped variables from page scope
requestScope Scoped variables from request scope
sessionScope Scoped variables from session scope
applicationScope Scoped variables from application scope
param Request parameters as strings
paramValues Request parameters as collections of strings
header HTTP request headers as strings
headerValues HTTP request headers as collections of strings
initParam Context-initialization parameters
cookie Cookie values
pageContext The JSP PageContext object for the current page

可以在表達式中使用這些對象,好像他們是變量。下麵是相關概念幾個例子:

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>

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 = "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)

header 對象返回一個字符串值,而headerValues​​對象返回的字符串數組。