粗淺看 JSTL標籤庫和EL表達式

標準標籤庫(JSTL)

JSP標準標籤庫(JSTL)是一個JSP標籤集合,它封裝了JSP應用的通用核心功能。

JSTL支持通用的、結構化的任務,比如迭代,條件判斷,XML文檔操作,國際化標籤,SQL標籤。 除了這些,它還提供了一個框架來使用集成JSTL的自定義標籤。

根據JSTL標籤所提供的功能,可以將其分爲5個類別。


JSTL 庫安裝

Apache Tomcat安裝JSTL 庫步驟如下:

從Apache的標準標籤庫中下載的二進包(jakarta-taglibs-standard-current.zip)。下載地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

下載jakarta-taglibs-standard-1.1.1.zip 包並解壓,將jakarta-taglibs-standard-1.1.1/lib/下的兩個jar文件:standard.jar和jstl.jar文件拷貝到/WEB-INF/lib/下。

使用任何庫,你必須在每個JSP文件中的頭部包含<taglib>標籤。

核心標籤

核心標籤是最常用的JSTL標籤。引用核心標籤庫的語法如下:

<%@ taglibprefix="c"
          uri="http://java.sun.com/jsp/jstl/core" %>


格式化標籤

JSTL格式化標籤用來格式化並輸出文本、日期、時間、數字。引用格式化標籤庫的語法如下:

<%@ taglibprefix="fmt"
          uri="http://java.sun.com/jsp/jstl/fmt" %>


SQL標籤

JSTL SQL標籤庫提供了與關係型數據庫(Oracle,MySQL,SQL Server等等)進行交互的標籤。引用SQL標籤庫的語法如下:

<%@ taglibprefix="sql"


XML 標籤

JSTL XML標籤庫提供了創建和操作XML文檔的標籤。引用XML標籤庫的語法如下:

<%@ taglibprefix="x"
          uri="http://java.sun.com/jsp/jstl/xml" %>

在使用xml標籤前,你必須將XML 和 XPath 的相關包拷貝至你的<Tomcat 安裝目錄>\lib下:

XercesImpl.jar:

下載地址: http://www.apache.org/dist/xerces/j/

xalan.jar:

下載地址: http://xml.apache.org/xalan-j/index.html


JSTL函數

JSTL包含一系列標準函數,大部分是通用的字符串處理函數。引用JSTL函數庫的語法如下:

<%@ taglibprefix="fn"
          uri="http://java.sun.com/jsp/jstl/functions" %>


EL表達式

JSP表達式語言(EL)使得訪問存儲在JavaBean中的數據變得非常簡單。JSP EL既可以用來創建算術表達式也可以用來創建邏輯表達式。在JSP EL表達式內可以使用整型數,浮點數,字符串,常量true、false,還有null。

一個簡單的語法

典型的,當需要在JSP標籤中指定一個屬性值時,只需要簡單地使用字符串即可:

<jsp:setPropertyname="box" property="perimeter" value="100"/>

JSP EL允許指定一個表達式來表示屬性值。一個簡單的表達式語法如下:

${expr}

其中,expr指的是表達式。在JSP EL中通用的操作符是"."和"[]"。這兩個操作符允許通過內嵌的JSP對象訪問各種各樣的JavaBean屬性。

舉例來說,上面的<jsp:setProperty>標籤可以使用表達式語言改寫成如下形式:

<jsp:setPropertyname="box" property="perimeter"
                value="${2*box.width+2*box.height}"/>

當JSP編譯器在屬性中見到"${}"格式後,它會產生代碼來計算這個表達式,並且產生一個替代品來代替表達式的值。

也可以在標籤的模板文本中使用表達式語言。比如<jsp:text>標籤簡單地將其主體中的文本插入到JSP輸出中:

<jsp:text>
<h1>HelloJSP!</h1>
</jsp:text>

現在,在<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屬性值設爲true:

<%@ pageisELIgnored ="true|false" %>

這樣,EL表達式就會被忽略。若設爲false,則容器將會計算EL表達式。

EL中的基礎操作符

EL表達式支持大部分Java所提供的算術和邏輯操作符:


JSP EL允許在表達式中使用函數。這些函數必須被定義在自定義標籤庫中。函數的使用語法如下:

${ns:func(param1,param2, ...)}

ns指的是命名空間(namespace),func指的是函數的名稱,param1指的是第一個參數,param2指的是第二個參數,以此類推。比如,有函數fn:length,在JSTL庫中定義,可以像下面這樣來獲取一個字符串的長度:

${fn:length("Getmy length")}

要使用任何標籤庫中的函數,需要將這些庫安裝在服務器中,然後使用<taglib>標籤在JSP文件中包含這些庫。

JSP EL隱含對象

JSP EL支持下表列出的隱含對象:


可以在表達式中使用這些對象,就像使用變量一樣。接下來會給出幾個例子來更好的理解這個概念。

pageContext對象

pageContext對象是JSP中pageContext對象的引用。通過pageContext對象,可以訪問request對象。比如,訪問request對象傳入的查詢字符串,就像這樣:

${pageContext.request.queryString}

Scope對象

pageScope,requestScope,sessionScope,applicationScope變量用來訪問存儲在各個作用域層次的變量。

舉例來說,如果需要顯式訪問在applicationScope層的box變量,可以這樣來訪問:applicationScope.box。

param和paramValues對象

param和paramValues對象用來訪問參數值,通過使用request.getParameter方法和request.getParameterValues方法。

舉例來說,訪問一個名爲order的參數,可以這樣使用表達式:${param.order},或者${param["order"]}。

接下來的例子表明瞭如何訪問request中的username參數:

<%@ pageimport="java.io.*,java.util.*" %>
<%
    String title = "Accessing RequestParam";
%>
<html>
<head>
<title><%out.print(title); %></title>
</head>
<body>
<center>
<h1><%out.print(title); %></h1>
</center>
<divalign="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信息頭:

<%@ pageimport="java.io.*,java.util.*" %>
<%
    String title = "User AgentExample";
%>
<html>
<head>
<title><%out.print(title); %></title>
</head>
<body>
<center>
<h1><%out.print(title); %></h1>
</center>
<divalign="center">
<p>${header["user-agent"]}</p>
</div>
</body>
</html>

運行結果如下:


header對象返回單一值,而headerValues則返回一個字符串數組

業務思想

關於JSTL標籤庫和EL表達式的認識不斷加深,也來總結一篇。JSP編程中,我們見到的JSTL和EL是很簡單的,也隨着業務的增加,我們的認識不斷加深,多敲一點兒demo,你會認識到不同的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章