JSP之EL

EL(Expression Language,表達式語義),它提供了Web網頁和JavaBean管理進行通信的重要機制,簡化了JSP開發中對象的引用,從而規範頁面代碼,增加了程序的可讀性和可維護性。EL提供了獲取對象及屬性的簡單方式,支持簡單的運算。

1、EL基本語法

語法格式:

${expression}   //expression爲要輸出的內容,可以使字符串或表達式

EL禁用
在低版本及JSP 2.0以前的版本不支持EL,爲了兼容低版本,可以禁用EL,共三種方法。

  1. 禁用一行EL,使用"\",語法格式如下:\${expression};
  2. 禁用一個JSP頁面的EL,使用JSP的表示指令page,語法格式如下:<%@ page isELIgored = "true"%>
  3. 禁用一個應用程序的EL,在web.xml配置中禁用,其代碼如下:
    <jsp-config>
      <jsp-property-group>
             <url-pattern>*.jsp<url-pattern>
             <el-ignored>true</el-ignored>
      </jsp-property-group>
    <jsp-config>
EL訪問數據的方式:通過 . 和 []來訪問數據,通常情況下二者等價,但當屬性中包括一些特殊符號時只能使用[]來訪問對象的屬性。例如:${userInfo.user-id}是錯誤的,${userInfo[user-id]}是正確的。另外[]可以用來訪問數組或者List集合。
在EL中判斷對象是否爲空,其語法結構:
${empty expression}   //expression爲空返回true,反之返回false

2、EL隱含對象

EL提供了11個隱含對象,類似如JSP的內置對象,可以直接通過對象名進行操作,分爲三個大類頁面上下文對象、訪問作用域的隱含對象和訪問環境信息的隱含對象。

  1. pageContext對象,屬於頁面上下文對象,用於訪問JSP部分內置對象(Request、Response、out、session、exception、page),其他JSP內置對象不能被其訪問。在獲得JSP內置對象後,即可獲得其屬性值。
  2. pageScope對象,屬於訪問作用域隱含對象,用於返回page範圍內的屬性值的集合。
  3. requestScope對象,屬於訪問作用域隱含對象,用於返回包含request範圍內的屬性值的集合。
  4. responseScope對象,屬於訪問作用域隱含對象,用於返回包含response範圍內的屬性值的集合。
  5. sessionScope對象,屬於訪問作用域隱含對象,用於返回包含session範圍內的屬性值的集合。
  6. applicationScope對象,屬於訪問作用域隱含對象,用於返回包含request範圍內的屬性值的集合。
  7. param對象,屬於訪問環境信息的隱含對象,用於獲取請求參數的值,應用在參數值只有一個的情況下。
  8. paramValues對象,屬於訪問環境信息的隱含對象,用於獲取請求參數的值,應用在參數名對應多個值的情況下。
  9. header和headerValues對象,屬於訪問環境信息的隱含對象,當獲取HTTP請求的一個具體header的值時使用header對象,當同一個header對象對應多個不同的值時使用headerValues對象。
  10. initParam對象,屬於訪問環境信息的隱含對象,用於獲取Web應用初始化參數的值。
  11. cookie對象。

3、定義和使用EL函數

定義和使用EL函數的三個步驟:

  1. 編寫Java類,並編寫公共的靜態方法,用於實現自定的EL函數的具體功能;
  2. 編寫標籤庫描述文件聲明函數,該文件擴展名爲“.tld”,保存在WEB-INF文件夾下。
  3. 在JSP頁面中引用標籤庫,並調用定義的EL函數實現相應的功能。
示例stringDeal.tld文件如下:
<?xml version="1.0" encoding="utf-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2eeweb-jsptaglibrary_2_o.xsd" version="2.0">
   <tlib-version>1.0</tlib-version>
   <uri>/stringDeal</uri>
   <function>
         <name>shiftEnter</name>
         <function-class>com.wgh.StringDeal</function-class>
         <function-signature>java.lang.String shiftEnter(java.lang.String)</function-signature>
   </function>
</taglib>
<uri>標記:用於指定tld文件的映射路徑,在應用EL函數時需要使用該標記指定的內容。
<name>標記:用於指定EL函數所對應的靜態方法名,與Java文件中的方法名相同。
<function-class>標記:用於指定EL函數所對應的Java文件,文件要求完整路徑。
<function-signature>標記:用於指定EL函數多對應的靜態方法,其中包括返回值和參數的完整類型。

使用自定義的EL函數的JSP頁面中:
...//代碼省略
<%@ taglib prefix="wgh" uri="/stringDeal"%>
...//代碼省略
${wgh:shiftEnter(param.content)}


發佈了23 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章