
- JSP 基礎教程
- JSP - 首頁
- JSP - 概述
- JSP - 環境設定
- JSP - 架構
- JSP - 生命週期
- JSP - 語法
- JSP - 指令
- JSP - 動作
- JSP - 隱式物件
- JSP - 客戶端請求
- JSP - 伺服器響應
- JSP - HTTP 狀態碼
- JSP - 表單處理
- JSP - 編寫過濾器
- JSP - 處理 Cookie
- JSP - 會話跟蹤
- JSP - 檔案上傳
- JSP - 處理日期
- JSP - 頁面重定向
- JSP - 點選計數器
- JSP - 自動重新整理
- JSP - 傳送電子郵件
- 高階 JSP 教程
- JSP - 標準標籤庫
- JSP - 資料庫訪問
- JSP - XML 資料
- JSP - JavaBean
- JSP - 自定義標籤
- JSP - 表示式語言
- JSP - 異常處理
- JSP - 除錯
- JSP - 安全
- JSP - 國際化
- JSP 有用資源
- JSP - 問題與解答
- JSP - 快速指南
- JSP - 有用資源
- JSP - 討論
JSP - 表示式語言 (EL)
JSP 表示式語言 (EL) 使得輕鬆訪問儲存在 JavaBean 元件中的應用程式資料成為可能。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 中最常見的運算子是.和[]。這兩個運算子允許您訪問 JavaBean 和內建 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 表示式的計算,我們如下所示指定頁面指令的isELIgnored屬性 -
<%@ page isELIgnored = "true|false" %>
此屬性的有效值為 true 和 false。如果為 true,則在靜態文字或標籤屬性中出現 EL 表示式時將被忽略。如果為 false,則容器將計算 EL 表示式。
EL 中的基本運算子
JSP 表示式語言 (EL) 支援 Java 支援的大多數算術和邏輯運算子。下表列出了最常用的運算子 -
序號 | 運算子 & 描述 |
---|---|
1 | . 訪問 Bean 屬性或 Map 條目 |
2 | [] 訪問陣列或列表元素 |
3 | ( ) 組合子表示式以更改計算順序 |
4 | + 加法 |
5 | - 減法或值的否定 |
6 | * 乘法 |
7 | / 或 div 除法 |
8 | % 或 mod 取模(餘數) |
9 | == 或 eq 測試相等性 |
10 | != 或 ne 測試不相等性 |
11 | < 或 lt 測試小於 |
12 | > 或 gt 測試大於 |
13 | <= 或 le 測試小於或等於 |
14 | >= 或 ge 測試大於或等於 |
15 | && 或 and 測試邏輯 AND |
16 | || 或 or 測試邏輯 OR |
17 | ! 或 not 一元布林補碼 |
18 | empty 測試空變數值 |
JSP EL 中的函式
JSP EL 也允許您在表示式中使用函式。這些函式必須在自定義標籤庫中定義。函式用法具有以下語法 -
${ns:func(param1, param2, ...)}
其中ns是函式的名稱空間,func是函式的名稱,param1是第一個引數值。例如,函式fn:length是 JSTL 庫的一部分。此函式可以按如下方式使用以獲取字串的長度。
${fn:length("Get my length")}
要使用任何標籤庫(標準或自定義)中的函式,您必須在伺服器上安裝該庫,並且必須使用<taglib>指令在 JSP 中包含該庫,如 JSTL 章節中所述。
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 物件,您可以訪問 request 物件。例如,要訪問請求的傳入查詢字串,您可以使用以下表達式 -
${pageContext.request.queryString}
作用域物件
pageScope、requestScope、sessionScope和applicationScope變數提供對儲存在每個作用域級別的變數的訪問。
例如,如果您需要顯式訪問 application 作用域中的 box 變數,您可以透過 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"]}。
以下是訪問名為 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 物件返回字串陣列。