EL表達式只是JSP中的表達式,不是一種開發語言.
基本語法:${EL基本表達式}
全名是Expression Language.EL主要作用。
1.獲取數據:
EL表達式主要用於替換JSP頁面中的腳本表達式。以從各種類型的web域中檢索java對象。獲取數據(某個web域中的對象,訪問javabean的屬性,訪問list集合,訪問map集合,訪問數組)
2.執行運算
利用EL表達式可以在JSP頁面中執行一些基本的關係運算,邏輯運算和算術運算.以在JSP頁面中完成一些簡單的邏輯運算。例如:${user==null}
3.獲取web開發常用對象
EL表達式定義了一些隱式對象。利用這些隱式對象,web開發人員可以輕鬆獲取對web常用對象的引用,從而獲取這些對象中的數據。
4.調用java方法
EL表達式允許用戶開發自定義的EL函數,以在JSP頁面中通過EL表達式調用Java類的方法。
一、EL表達式只能獲取四大域對象中的數據
二、數學邏輯運算符
EL表達式支持如下運算符:
關係運算符 | 說明 | 範例 | 結果 |
==或eq | 等於 | ${5==5}或${5eq5} | true |
!=或ne | 不等於 | ${5!=5}或${5ne5} | false |
<或lt | 小於 | ${5<5}或${5lt5} | false |
>或gt | 大於 | ${5>5}或${5gt5} | false |
<=或le | 小於等於 | ${5<=5}或${5le5} | true |
>=或ge | 大於等於 | ${5>=5}或${5ge5} | true |
邏輯運算符 | 說明 | 範例 | 結果 |
&&或and | 交集 | ${A&&B}或${A and B} | true/false |
||或or | 並集 | ${A||B}或${AorB} | true/false |
!或not | 非 | ${!A}或${not A} | true/false |
empty運算符:檢查對象是否爲null或'空',對於集合,即使集合本身對象不爲null,沒有任何元素同樣爲true
三元表達式:${user!=null?user.name:""}
[]和.號運算符
EL表達式不支持字符串連接操作。
三、獲取JSP的內置對象(11個EL內置對象):難點,不要與JSP的內置對象和範圍名稱搞混
11個EL隱式對象中,其中一個是表示自身對象外,其餘都是表示Map結構
EL隱含對象名稱 | java類型 | 備註 |
pageContext | javax.servlet.jsp.PageContext | 與JSP內置對象中的完全相同 |
pageScope | java.util.Map | 代表PageContext頁面範圍域那個Map |
requestScope | java.util.Map | 代表ServletRequest請求範圍域那個Map |
sessionScope | java.util.Map | 代表HttpSession會話範圍域那個Map |
applicationScope | java.util.Map | 代表ServletContext應用範圍域那個Map |
param | java.util.Map | 代表請求參數。key:請求參數的名稱。value:請求參數的值。字符串 |
paramValues | java.util.Map | 代表請求參數。key:請求參數的名稱。value:請求參數的值。字符串數組 |
header | java.util.Map | 代表請求消息頭。key:頭名稱。value:頭值,他是一個字符串 |
headerValues | java.util.Map | 代表請求消息頭。key:頭名稱。value:頭值。字符串數組 |
cookie | java.util.Map | 代表客戶端提交的Cookie的Map.key:cookie的name.value:cookie對象本身 |
initParam | java.util.Map | 代表全局初始化參數(web.xml中的context-param)key:參數名稱;value:參數值 |
四、調用普通類的靜態方法(EL函數)
編寫步驟(自定義EL函數的編寫步驟即自定義標籤的編寫步驟):
a.編寫一個普通的java類,提供一個靜態方法
public class FunctionDemo {
public static String toUpperCase(String str){
return str.toUpperCase();
}
}
b.在javaWeb應用的web-info目錄下建立一個後綴名爲tld(taglib definition)的xml文件(參考tomcate中的示例)。具體內容如下:
<?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/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>A tag library exercising SimpleTag handlers.</description>
<tlib-version>1.0</tlib-version>
<short-name>myfn</short-name>
<uri>http://localhost:8080/myfn</uri>
<function><!-- 定義函數 -->
<description>轉換給定英文字母字符串爲大寫英文字符串</description>
<name>toUpperCase</name>
<function-class>com.freesky.el.FunctionDemo</function-class>
<function-signature>java.lang.String toUpperCase( java.lang.String )</function-signature><!-- 方法簽名 -->
</function>
</taglib>
c、(可選步驟)前提是把tld文件放到WEB-INF目錄下。
告知應用,tld文件和tld中的uri的對應。修改web.xml,增加以下內容。
<jsp-config>
<taglib>
<taglib-uri>http://localhost:8080/myfn</taglib-uri>
<taglib-location>/WEB-INF/myfn.tld</taglib-location>
</taglib>
</jsp-config>
d.在JSP中使用
用taglib指令,引入自定義的EL函數庫
<%@ taglib uri="http://localhost:8080/myfn" prefix="myfn" %>
${myfn:toUpperCase(p)}
五、SUN提供的標準函數庫
JSTL標準標籤庫(JSP Standard Tag Libary)
***Core:核心;
**Fmt:國際化;
SQL:數據庫;
XML:xml操作;
**fn:EL函數庫;
導入jstl的jar包,1.1需要兩個jar包standard.jar jstl.jar. 1.2只需要導入一個jar包,jstl.jar
******六、jstl中的核心標籤庫(替換掉jsp中java腳本)
c:if
作用:判斷是否爲true,如果爲true,那麼標籤的主體內容就會顯示。
屬性:
test:必須的。要求必須是boolean的。支持jsp的java表達式和EL表達式
var:保存test運算結果的變量
scope:保存的域範圍。默認是page;
c:forEach
遍歷:數組、List、Set、Map
屬性:
items:要遍歷的目標對象,支持表達式;
屬性:
items:要遍歷的目標對象,支持表達式。
var:變量名。指向當前遍歷集合中的一個元素
begin:開始遍歷索引(含)
end:結束索引遍歷(含)
step:步長。默認是1
varStatus:取一個名字,引用了一個對象。
該對象有以下方法:
int getIndex():獲取當前記錄;從0開始;
int getCount():獲取當前順序;從1開始;
boolean isFirst():是否是第一條記錄;
boolean isLast():是否是最後一條記錄;