Java基礎知識夯實day10:EL表達式

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():是否是最後一條記錄;

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