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 ExampleMozilla/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對象返回的字符串數組。