EL運算式語言<br />1.文法<br />EL運算式的格式都是以“${”開始,以“}”結尾的。當EL運算式中的變數不給定範圍時,則表示容器會預設地從page範圍中尋找,然後再依次在request,session,application範圍內尋找。如果在此過程中找到,則直接返回,否則返回null<br />下面是EL使用到的變數屬性範圍的名稱<br />page屬性:在EL中使用名稱pageScope<br />request屬性:在EL中使用名稱requestScope<br />session屬性:在EL中使用名稱sessionScope<br />application屬性:在EL中使用名稱applicationScope<br />EL中包含的文字<br />JSP運算式語言(EL)定義了可以在運算式中使用的文字包括:<br />Boolean:true和false<br />Integer:與JAVA類似,可以包含任何正數或負數<br />Floating Point:與JAVA類似,可以包含任何正的或者負的浮點數<br />String:任何由引號或者雙引號限定的字串。對於單引號、雙引號和反斜線,使用反斜線字元“/”作為逸出序列。必須注意,如果在字串兩端使用雙引號,則內部的單引號不需要轉義<br />NULL:返回null<br />運算子“[]”和“.”<br />在EL中,可以使用運算子“[]”和”.”來取得對象的屬性。另外在EL中可以使用[]運算子來讀取Map,List或者對象集合中的資料<br />EL中的基本算術運算子<br />JSP中的運算式語言(EL)提供了如下多個運算子,其中大部分是Java中常用的運算子<br />算術運算子說明<br />+“加法”操作<br />-“減法”操作<br />*“乘法”操作<br />/或者div“除法”操作<br />%或者mod“求餘”操作<br />1.3.1 “+”、“-”和“*”:A+B、A-B、A*B<br />如果A和B同為NULL時,返回0<br />如果A和B其中有一個為Float、Double或者包含了“.”、“e”或者“E”字元的字串,則強行把A和B轉換成Double類型,其中有3中情況<br />運算子為“+”時,返回A.add(B)<br />運算子為“-”時,返回A.subtract(B)<br />運算子為“*”時,返回A.multiply(B)<br />否則,強行把A和B轉為Long類型,然後再執行相應的 運算<br />如果運算操作出現異常,則報錯<br />1.3.2 “/”或者div運算子:A/B或者A div B<br />如果A和B同為Null,則返回0<br />否則,強行把A和B轉換成Double類型,然後再執行相應的運算<br />如果運算操作出現異常,則報錯<br />1.3.3 “%”或者“mod”運算子:A%B或者A mod B<br />如果A和B 同時為NULL,則返回0<br />如果A 或者B其中一個為Float、Double或者包含“.”、”e”或者“E”字元的字串,則強行把A 和B 轉換成Double類型,然後再進行相應的運算<br />否則,強行把A和B 轉換成Long類型,然後再執行相應運算<br />如果運算操作出現異常,則報錯<br />1.3.4 一元負號運算子:-A<br />如果A 為NULL,則返回0<br />如果A 為一個字串,則分如下幾種情況:<br />如果這個字串包含“.”、“e”或者“E“字元傳,則把A強行轉換成Double類型,然後在執行相應操作<br />否則,強行把A轉換成Long類型,然後在執行相應運算<br />如果運算操作出現異常,則報錯<br />如果A是一個Byte、Short、Integer、Long、Float或者Double類型時,同樣可能出現兩種情況:<br />直接按照原來的類型執行相應的運算<br />如果出現操作異常,則報錯<br />否則,出現異常並報錯<br />EL中的關係運算子<br />EL中使用的關係運算包括如下6中:<br />關係運算子說明<br />==或者eq“等於“判斷<br />!=或者ne“不等於“判斷<br /><或者lt“小於“判斷<br />>或者gt“大於“判斷<br /><=或者le“小於等於“判斷<br />>=或者ge“大於等於“判斷<br />1.4.1 A{<或者lt、>或者gt、<=或者le、>=或者ge}B<br />如果A等於B時,運算子為”<=”或者”le”、”>=”或者”ge”,則返回true。否則,運算子為”<”或者”lt”、”>”或者”gt”時,返回false<br />如果A 為Null,或者B為Null,則返回false<br />如果A或者B是Float或者Double類型,則強行把A和B轉換成Double類型,然後在執行相應的運算子<br />如果A或者B是Byte,Short,Character、Integer或者Long類型時,則強行把A和B轉換成Long,然後執行相應的運算子<br />如果A或者B是一個字串,則強行把A和B全都轉換成字串,然後再執行相應的比較運算<br />如果用A進行比較,存在兩種情況:<br />若A.compareTo(B)產生異常,則報錯<br />否則,返回A.compareTo(B)的比較結果<br />如果用B進行比較,也存在兩種情況:<br />若B.compareTo(A)產生異常,則報錯<br />否則,返回B.compareTo(A)的比較結果<br />否則,產生異常並報錯<br />1.4.2 A{==或者eq、!=或者ne}B運算子<br />如果A等於B,運算子為”= =”或者”eq”時,返回true;否則,運算子為”!=”或者”ne”是,返回false<br />如果A為NULL或者B為NULL時,則運算子”= =”或者”eq”,返回fasle;如果運算子是”!=’或者”ne”,則返回true<br />如果A或者B是Float或者Double類型,則強行把A和B轉換成Double類型,然後再執行相應的運算子<br />如果A或者B是Byte、Short、Character、Integer或者Long類型時,則強行把A和B轉換成Long類型,然後再執行相應的運算子<br />如果A或者B是Boolean類型,則強行把A和B轉換成Boolean類型之後再執行相應的運算子<br />如果A或者B是字串類型,則強行把A和B轉換成字串類型,在進行兩者之間的比較<br />如果在執行A.equals(B)時產生異常,則報錯;否則返回比較結果<br />邏輯運算子<br />邏輯運算子包含一下幾種:<br />邏輯運算子說明<br />&&或者and“與”運算子<br />||或者or“或”運算子<br />!或者not“非”運算子<br />1.5.1 A{&&或者and、||或者or}B邏輯操作<br /> 執行該運算子時,首先強行把A和B轉換成Boolean類型,然後在執行相應的運算子<br />如果A和B同為true,當運算子為”&&”時,返回true;運算子為”||”時,返回true。<br />如果A和B其中一個為true,另一個為false,當運算子為”&&”時,返回false;運算子為”||”時,返回true<br />如果A和B同為false,當運算子為”&&”時,返回false;運算子為”||”時,返回false<br />否則,執行過程產生異常並報錯<br />1.5.2 “非“運算子:!A<br />執行該運算子時,首先強行把A和B轉換成Boolean類型,然後再執行“非“或者”反“操作<br />如果A判斷為false,則執行”!”操作之後返回結果true<br />如果A判斷為true,則執行”!”操作之後返回結果false<br />否則,執行過程發生異常並報錯<br />empty運算子<br />“empty”運算子是一個首碼形式的運算子,它用來判斷某個變數是否為NULL或者為空白<br />“empty”運算子的運算規則如下:<br />如果A為NULL,則返回true<br />否則,如果A是一個空的字串,則返回true<br />否則,如果A是一個空的數組,則返回true<br />否則,如果A是一個空的Map集合類,則返回true<br />否則,如果A是一個空的List集合類,則返回true<br />否則,返回false<br />其他運算子<br />條件運算子<br />EL中還可以使用以下形式的條件運算子:<br />${A?B:C}<br />其中A 為判斷運算式,當A為true時,返回B運算式的執行結果;如果A為false,則返回C運算式執行之後的結果<br />2.EL中的隱含對象<br />EL中的隱含對象與JSP中的隱含對象,其實只有一個對象是它們兩者所共有的,即pageContext對象。這樣EL也可以訪問到JSP中的其他隱含對象,這是因為pageContext對象擁有訪問JSP中所有其他8個隱含對象的許可權。<br />EL中的隱含對象<br />類別隱含對象描述<br />JSPpageContext當前JSP頁面的javax.servlet.jsp.PageContext對象<br />範圍pageScope頁面範圍內所有對象的集合<br />requestScope所有請求範圍內的對象集合<br />sessionScope所有會話範圍內的對象集合<br />applicationScope應用程式範圍內的物件變數組成的集合<br />請求參數param所有請求參數字串組成的集合<br />paramValues所有作為字串集合的請求參數<br />headerHTTP要求標頭部,字串<br />headerValuesHTTP要求標頭部,字串集合<br />cookiecookie所有cookie組成的集合<br />初始化參數initParam全部應用程式參數名組成的集合<br />