JSP運算式語言(EL)

JSP運算式語言(EL)使得可以輕鬆訪問存儲在JavaBeans組件中的應用程式數據。JSP EL允許用來創建算術邏輯運算式。 在JSP EL運算式中,可以使用整數,浮點數,字串,布爾值的內置常量為truefalse,以及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" %>

此屬性的有效值為truefalse。 如果設置為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}

範圍對象

pageScoperequestScopesessionScopeapplicationScope變數提供對存儲在每個範圍級別的變數的訪問。

例如,如果需要顯式訪問應用程式範圍中的變數,則可以通過applicationScope變數 - applicationScope.box來訪問它。

param和paramValues對象

可以通過paramparamValues對象的request.getParameterrequest.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對象

headerheaderValues對象可以訪問通過request.getHeaderrequest.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對象返回字串數組。


上一篇: JSP自定義標籤 下一篇: JSP異常處理