JSP表達式語言(EL)
JSP表達式語言(EL)使得可以輕鬆訪問存儲在JavaBeans組件中的應用程序數據。JSP EL允許用來創建算術和邏輯表達式。 在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編譯器在屬性中遇到${}
形式時,它會生成代碼以評估表達式並替換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表達式的評估計算,可設置page
指令的isELIgnored
屬性如下:
<%@ page isELIgnored = "true" %>
此屬性的有效值爲true
和false
。 如果設置爲true
,EL表達式在靜態文本或標籤屬性中顯示時將被忽略。 如果爲false
,EL表達式將由容器進行評估。
EL中的基本運算符
JSP表達式語言(EL)支持Java支持的大多數算術和邏輯運算符。下表列出了最常用的運算符 -
編號
運算符
描述
1
.
訪問一個bean屬性或Map的項
2
[]
訪問數組或List元素
3
()
組合子表達式以更改評估順序
4
+
相加
5
-
減去或取反一個值
6
*
乘法
7
/
或 div
除法
8
%
或 mod
求模
9
==
或 eq
測試等於
10
!=
或 ne
測試不等於
11
<
或 lt
測試小於
12
>
或 gt
測試大於
13
<=
或 le
測試小於或等於
14
>=
或 ge
測試大於或等於
15
&&
或 and
測試邏輯與
16
or
測試邏輯或
17
!
或 not
一元布爾互補
18
empty
測試空變量值
JSP EL函數
JSP EL允許在表達式中使用函數。必須在自定義標籤庫中定義這些函數。函數用法具有以下語法 -
${ns:func(param1, param2, ...)}
其中ns
是函數的命名空間,func
是函數的名稱,param1
是第一個參數值。 例如,函數fn:length
,它是JSTL庫的一部分。 可以使用以下函數來獲取字符串的長度。
${fn:length("Get my length")}
要使用任何標籤庫(標準或自定義)中的函數,必須在服務器上安裝該庫,並且必須使用JTAG代碼中所述的<taglib>
指令將庫包含在JSP中。
JSP EL隱式對象
JSP表達式語言支持以下隱式對象 -
編號
隱式對象
描述
1
pageScope
來自頁面範圍的範圍變量
2
requestScope
來自請求範圍的範圍變量
3
sessionScope
會話範圍的範圍變量
4
applicationScope
應用範圍的範圍變量
5
param
請求參數作爲字符串
6
paramValues
請求參數作爲字符串集合
7
header
HTTP請求標頭作爲字符串
8
headerValues
HTTP請求標頭作爲字符串集合
9
initParam
上下文初始化參數
10
cookie
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
請求參數的示例。文件:getParameter.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*"%>
<%
String title = "Accessing Request Param";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
<%
out.print(title);
%>
</title>
</head>
<body>
<div style="margin: auto; width: 100%">
<center>
<h2>
<%
out.print(title);
%>
</h2>
</center>
<div align="center">
<p>username參數值:${param["username"]}</p>
</div>
</div>
</body>
</html>
在編寫上面文件以後,部署項目文件,打開瀏覽器訪問:http://localhost:8080/jspEL/getParameter.jsp?username=maxsu
,得到以下結果 -
param
對象返回單個字符串值,而paramValues
對象返回字符串數組。
header和headerValues對象
header
和headerValues
對象可以訪問通過request.getHeader
和request.getHeaders
方法通常可用的頭值。
例如,要訪問user-agent
頭,可使用${header.user-agent}
或${header [「user-agent」]}
表達式。
以下是訪問user-agent
頭參數的示例,文件:**
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*"%>
<%
String title = "User Agent Example";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
<%
out.print(title);
%>
</title>
</head>
<body>
<div style="margin: auto; width: 100%">
<center>
<h1>
<%
out.print(title);
%>
</h1>
</center>
<div align="center">
<p>${header["user-agent"]}</p>
</div>
</div>
</body>
</html>
打開瀏覽器訪問URL:http://localhost:8080/jspEL/header.jsp
,輸出以下結果 -
header
對象返回單個字符串值,而headerValues
對象返回字符串數組。