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表示式將由容器進行評估。
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允許在表示式中使用函式。必須在自定義標籤庫中定義這些函式。函式用法具有以下語法 -
${ns:func(param1, param2, ...)}
其中ns
是函式的名稱空間,func
是函式的名稱,param1
是第一個引數值。 例如,函式fn:length
,它是JSTL庫的一部分。 可以使用以下函式來獲取字串的長度。
${fn:length("Get my length")}
要使用任何標籤庫(標準或自定義)中的函式,必須在伺服器上安裝該庫,並且必須使用JTAG程式碼中所述的<taglib>
指令將庫包含在JSP中。
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 JSP物件。 通過pageContext
物件,可以存取請求物件。 例如,要存取請求的傳入查詢字串,可以使用以下表示式 -
${pageContext.request.queryString}
pageScope
,requestScope
,sessionScope
和applicationScope
變數提供對儲存在每個範圍級別的變數的存取。
例如,如果需要顯式存取應用程式範圍中的變數,則可以通過applicationScope
變數 - applicationScope.box
來存取它。
可以通過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
物件可以存取通過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
物件返回字串陣列。