java web高级编程 百度网盘_[有书共享]JavaWeb高级编程
JavaWeb高級編程 -- 篇6
在JSP中使用表達式語言
表達式語言(EL)源于JSP標準庫(JSTL)的一部分,用于在不使用腳本、聲明或者表達式的情況下,在JSP頁面中渲染數據。
EL的基本語法描述了一個必須與其他JSP頁面語法分開執行的表達式。基本的EL語法有兩種類型:立即執行和延遲執行。
1. 立即執行
立即執行EL表達式將在頁面渲染的時候,被JSP引擎解析和執行。因為JSP從上向下執行,這意味著EL表達式將在JSP引擎發現它,并在繼續執行其他頁面部分之前執行它。如下為一個有效的EL表達式:
${expr}
美元符號和開始/結束花括號定義了EL表達式的邊界。
2. 延遲執行
延遲執行EL表達式是統一表達式的一部分,主要用于滿足JavaServer Faces的需要。盡管延遲執行語法在JSP中是合法的,但通常不會出現在JSP中。如下,其中expr是一個合法的表達式:
#{expr}
在JSF中,延遲執行表達式將在頁面渲染或者回傳到頁面時執行,或者同時在兩個階段內執行。在JSP中,#{}延遲執行語法只是一個有效的JSP標簽特性,用于將EL表達式的執行推遲到標簽的渲染過程中。不同于在特性值綁定到標簽之前執行EL表達式的方式,該標簽的特性將獲得一個對未執行EL表達式的引用。該標簽可以在之后一個合適的時間,調用一個方法來執行EL表達式。
EL可以直接用在JSP的任何位置,除了少數例外情況。首先,EL表達式不能用在任何指令中。在編譯JSP時,指令(、和)將會被執行,但EL表達式是在稍后渲染JSP時執行,所以在其中添加EL表達式是無法正常工作的。另外,JSP聲明()、腳本()或者表達式()中的EL表達式也是無效的。除此之外,EL表達式可以添加到其他任何位置。一種常見的情況是將EL表達式添加到輸出到屏幕的簡單文本中。:
The user will see ${expr} text and will know that ${expr} is good.
當表達式執行時,結果會內嵌在文本中顯示到屏幕。
另外,表達式還可以用在標準的HTML標簽特性中:
表達式也可以使用在JSP標簽特性中:
JSP引擎不會解析這些HTML 特性中的內容,它會將其中的內容當作普通文本輸出到響應中,所以可以在引用或者文本形式中包含EL表達式。
EL語法是弱類型,并且它包含許多內建的隱式類型轉換。表達式主要的規則是執行后要產生某個值。不能在表達式中聲明變量、執行賦值語句或者不產生結果的操作。
EL中的保留關鍵字:
true、false、null、instanceof、empty、div、mod、and、or、not、eq、ne、lt、gt、le、ge
舉例:
關鍵字empty用于驗證某些集合、Map或者數組是否含有值,或者某些字符串是否含有一個或多個字符。
${empty x}
eq、ne、lt、gt、le和ge運算符分別是Java關系運算符==,!=,,<=和>=,當然你仍然可以使用傳統的關系運算符。
EL表達式中第一個執行的操作符是括號[]和點(.)解析操作符。如:
${mycollection["key"].memberName["anotherKey"]}
引擎首先將解析對象myCollection中映射到key的值。然后在該值中解析memberName方法、字段或者屬性。最后在該方法、字段或者屬性中再解析anotherKey所對應的值。在這些操作符都執行之后,下面開始解析分組圓括號操作符()。
EL引擎執行的最后一個操作符是分號(;)。該操作看上去與C中的逗號(,)相像,它允許在表達式中同時使用多個表達式,但只有最后一個表達式的值會被保留下來。如:
${x = y + 3; obj.callMethod(x); 'hello, world'}
該表達式最后執行字符串字面量"hello, world"。該表達式的最終結果是最后一個分號之后的表達式"hello, world"。
EL中字符串字面量既可以使用雙引號也可以使用單引號。
在EL表達式中,只允許使用十進制字面量,對于其他類型的字面量,EL表達式中沒有對應的用法。
無論何時需要,都可以直接在EL表達式中創建集合。
字面量集合中的元素以逗號分隔開。
{1,2,'three',4.00,x}
其中x可以是任何數據類型。
構造列表的方法與構造集合的方法基本一致,區別在于列表使用的是方括號,而集合使用的是花括號。
[1,2,'three',[x,y],{'foo','bar'}]
列表中的元素將以逗號分隔。
HashMap集合字面量:
{'one':1,2:'two','key':x,'list':[1,2,3]}
EL除了使用公共訪問方法訪問屬性的標準語法,還提供了訪問JavaBean中屬性的簡化語法。假設現在有一個名為Shirt的類,它包含一個公開字段size。現有一個名為shirt的變量,使用EL訪問size字段:
${shirt.size}
當使用這種方法時,EL引擎看到該語法,它將尋找shirt中的屬性而不是字段。所以需要對Shirt類進行修改,使用標準JavaBean訪問和設置方法getSize和setSize將size封裝為私有字段。表達式shirt.size就變成了shirt.getSize()的快捷方式。
還可以使用[]操作符訪問屬性:
${shirt["size"]}
在EL早期版本,只可以訪問JavaBean屬性,不可以調用對象方法,不過在EL2.1添加了在JSP中調用對象方法的能力。因此,可以通過${shirt.getSize()}訪問Shirt的size屬性。
在EL中,函數是映射到類中靜態方法的一個特殊工具。函數調用的語法如下所示:[ns]是命名空間,[fn]是函數名,從[a1]到[an]都是參數
${[ns]:[fn]([a1[,a2[,a3[,...]]]])}
JSTL函數庫的命名空間為fn;不過也可以在taglib指令中使用任何其他命名空間。
與Java訪問靜態字段和方法的方式相同:在EL中使用完全限定的類名,接著是點操作符,再接著是字段或者方法名。如:
${java.lang.Integer.MAX_VALUE}
除非使用的類已經使用JSP page指令導入,否則必須使用完全限定的類型。在JSP中,如同Java一樣,所有在java.lang包中的類都已經被隱式地導入。
在大多數情況下,lambda表達式是一個參數名字的列表,緊接著是某種類型的操作符,最后是函數體。EL中的lambda表達式語法幾乎與Java8中的一樣。
EL的lambda表達式體中包含的則是另一個EL表達式。
訪問Map值的方式:
${map["username"]}
${map.username}
列表訪問方式:
${list[0]}
${list{'0'}}
empty操作符使用:
${empty set}
總結
以上是生活随笔為你收集整理的java web高级编程 百度网盘_[有书共享]JavaWeb高级编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入解析C++编程中的静态成员函数
- 下一篇: C++中的内联函数inline总结