1. 程式人生 > 其它 >leetcode二叉樹-後續遍歷

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表示式中的三大作用域物件對比: (別記混了)