leetcode二叉樹-後續遍歷
1.什麼是EL表示式
EL(Expression Language) 是為了使JSP寫起來更加簡單。表示式語言的靈感來自於 ECMAScript 和 XPath 表示式語言,它提供了在 JSP 中簡化表示式的方法,讓Jsp的程式碼更加簡化。
2.語法:
${表示式}
其中, EL 表示式在輸出 null 值的時候,輸出的是空串。jsp 表示式指令碼輸出 null 值的時候,輸出的是 null, 例如下面的例子
3.EL 表示式搜尋域資料的順序
EL 表示式主要是在 jsp 頁面中輸出域物件中的資料,當四個域中都有相同的 key 的資料的時候,EL 表示式會按照四個域從小到大去搜索,找到哪個就輸出哪個,即按照PageContext、Request、Session 、application的順序搜尋
<body> <%
//往四個域中都儲存了相同的 key 的資料。
request.setAttribute("key", "request"); session.setAttribute("key", "session"); application.setAttribute("key", "application"); pageContext.setAttribute("key", "pageContext"); %> ${ key } </body>
4.EL 表示式輸出 Bean 的普通屬性,陣列屬性。List 集合屬性,map 集合屬性
public Person(String name, int age, String[] hobby, List<String> nickname, Map<String, Integer> scores) { this.name = name; this.age = age; this.hobby = hobby; this.nickname = nickname; this.scores = scores; }
<body> <% HashMap<String, Integer> score = new HashMap<>(); score.put("math", 100); score.put("english", 140); ArrayList<String> nickname = new ArrayList<>(); nickname.add("狗蛋"); nickname.add("狗剩"); String[] hobby = new String[]{"吃飯", "學習"}; Person person = new Person("小明", 25, hobby, nickname, score); pageContext.setAttribute("p", person); %> <h1>注意:本質是找bean類的get方法</h1> 輸出 Person:${ p }<br/> 輸出 Person 的 name 屬性:${p.name} <br/> 輸出 Person 的 age 屬性:${p.age} <br/> 輸出 Person 的 hobby 陣列個別元素值(這裡輸出索引為1):${p.hobby[1]} <br/> 輸出 Person 的 nickname 集合中的元素值:${p.nickname} <br/> 輸出 Person 的 List 集合中個別元素值(這裡輸出索引為1):${p.nickname[1]} <br/> 輸出 Person 的 Map 集合: ${p.scores} <br/> 輸出 Person 的 Map 集合中某個key的值(這裡輸出key是english): ${p.scores.english} <br/> </body>
執行效果, 如下圖所示:
5.EL 表示式——運算
語法:${ 運算表示式 } , EL 表示式支援如下運算子:
(1)關係運算
(2)邏輯運算
(3)算數運算
(4) empty 運算
empty 運算可以判斷一個數據是否為空,如果為空,則輸出 true,不為空輸出 false。
以下幾種情況為空:
值為 null 值的時候,為空 值為空串的時候,為空 值是 Object 型別陣列,長度為零的時候 list 集合,元素個數為零 map 集合,元素個數為零
<body> <% // 1、值為 null 值的時候,為空 request.setAttribute("emptyNull", null); // 2、值為空串的時候,為空 request.setAttribute("emptyStr", ""); // 3、值是 Object 型別陣列,長度為零的時候 request.setAttribute("emptyArr", new Object[]{}); // 4、list 集合,元素個數為零 List<String> list = new ArrayList<>(); // list.add("abc"); request.setAttribute("emptyList", list); // 5、map 集合,元素個數為零 Map<String,Object> map = new HashMap<String, Object>(); // map.put("key1", "value1"); request.setAttribute("emptyMap", map); %> ${ empty emptyNull } <br/> ${ empty emptyStr } <br/> ${ empty emptyArr } <br/> ${ empty emptyList } <br/> ${ empty emptyMap } <br/> </body>
(5)三元運算
表示式 1?表示式 2:表示式 3
如果表示式 1 的值為真,返回表示式 2 的值,如果表示式 1 的值為假,返回表示式 3 的值
${ 12 != 12 ? "哈哈":"哦哦" }
(6) “ . ”點運算 和 [ ] 中括號運算子
. 點運算,可以輸出 Bean 物件中某個屬性的值。
[ ]中括號運算,可以輸出有序集合中某個元素的值。
並且[]中括號運算,還可以輸出 map 集合中 key 裡含有特殊字元的 key 的值。
<body> <% Map<String,Object> map = new HashMap<String, Object>(); map.put("a.a.a", "aaaValue"); map.put("b+b+b", "bbbValue"); map.put("c-c-c", "cccValue"); request.setAttribute("map", map); %> ${ map['a.a.a'] } <br> ${ map["b+b+b"] } <br> ${ map['c-c-c'] } <br> </body>
此處[" "]和[’ ']都可以
6.EL 表示式的 11 個隱含物件 (此處是重中之重)
(1)EL 個達式中 11 個隱含物件,是 EL 表示式中自己定義的,可以直接使用。
(2)EL 獲取四個特定域中的屬性
pageScope ====== pageContext 域
requestScope ====== Request 域
sessionScope ====== Session 域
applicationScope ====== ServletContext 域
<body> <% pageContext.setAttribute("key1", "pageContext1"); pageContext.setAttribute("key2", "pageContext2"); request.setAttribute("key2", "request"); session.setAttribute("key2", "session"); application.setAttribute("key2", "application"); %> ${ applicationScope.key2 } </body>
(3) pageContext 物件的使用
1 協議:request.getScheme() 2 伺服器 ip:request.getServerName() 3 伺服器埠:request.getServerPort() 4 獲取工程路徑:getContextPath() (常用) 5 獲取請求方式:request.getMethod() 6 獲取客戶端 ip 地址:request.getRemoteHost() 7 獲取會話的 id 編號:session.getId()
(4)EL 表示式其他隱含物件的使用
param Map<String,String> 它可以獲取請求引數的值
paramValues Map<String,String[]> 它也可以獲取請求引數的值,獲取多個值的時候使用
1 輸出請求引數 username 的值:${ param.username } <br> 2 輸出請求引數 password 的值:${ param.password } <br/> 3 輸出請求引數 username 的值:${ paramValues.username[0] } <br/> 4 輸出請求引數 hobby 的值:${ paramValues.hobby[0] } <br> 5 輸出請求引數 hobby 的值:${ paramValues.hobby[1] } <br/>
header Map<String,String> 它可以獲取請求頭的資訊
headerValues Map<String,String[]> 它可以獲取請求頭的資訊,它可以獲取多個值的情況
1 輸出請求頭【User-Agent】的值(如上5.6所寫,key中含有特殊符號,需要使用['']或[""]包起來,下同):${ header['User-Agent'] } <br> 2 輸出請求頭【Connection】的值:${ header.Connection } <br> 3 輸出請求頭【User-Agent】的值:${ headerValues['User-Agent'][0] } <br
cookie Map<String,Cookie> 它可以獲取當前請求的 Cookie 資訊
獲取 Cookie 的名稱:${ cookie.JSESSIONID.name } <br>
獲取 Cookie 的值:${ cookie.JSESSIONID.value } <br
initParam Map<String,String> 它可以獲取在 web.xml 中配置的上下文引數
web.xml 中的配置:
<context-param> <param-name>username</param-name> <param-value>root</param-value> </context-param> <context-param> <param-name>url</param-name> <param-value>jdbc:mysql:///test</param-value> </context-param>
示例程式碼:
輸出: Context-param;username 的值:${ initParam.username } <br>
輸出: Context-param;url 的值:${ initParam.url } <br/>
-------------------------------------------------------------------------------分割線-------------------------------------------------------------------------------------------------------------------
servlet中的三大作用域物件 、 jsp中的四大作用域物件和九大內建物件 、 el表示式中的三大作用域物件對比: (別記混了)