2010年7月6日 星期二

J2EE - JSP 運算式語言(EL)

JSP 2.0 引入一個新概念 -- 運算式語言,簡稱 EL。

它可以和 JSTL 或是 Scriptles 結合使用,在我平常撰寫 JSP 時也大量運用到 EL
因為比起再 JSP 裡寫一大堆雜亂的 Scriptlets 實在是不怎美觀
所以盡量能用 EL 就盡量用,但也是有些部份是 EL 沒辦法表達的,那還是要回歸到 Scriptlets。

特點:

EL 通常都長這個樣子 > ${Mybean}

注意一點的是,再 ${} 裡的第一個字可以是一個在屬性 page、request、session、application 範圍中的任何一個屬性,或是 EL 隱含物件。


如果第一個是四大範圍中的任何一個屬性的話,譬如以下:

你有可能有一個 session 範圍的 JavaBean 在一開始時透過動作標籤建立:
<jsp:useBean id="myBean" class="demo.User" scope="session" />

之後就可以在 JSP 裡這樣寫:
${myBean.name} //這裡假設 User 類別有一個 name 屬性

所以透過上面的EL就可以印出這個 bean 的 name 屬性了。


如果第一個是 EL 的隱含物件,則如下
隱含物件有:
pageScoperequestScopesessionScopeapplicationScope

還有:
paramparamValuesheaderheaderValuescookieinitParam

最後:
pageContext

(一)
首先第一組看上去就知道是四大範圍的意思,所以第一組的隱含物件就分別代表了四大物件的範圍中的所有屬性。

譬如說在 page 中有一個屬性叫 Book,那你可以透過下面的 EL 將它取出
${pageScop.Book}

(二)
再來第二組的隱含物件有關於請求參數的和標頭以及 cookie 的隱含物件
  • 請求參數的 Param 和 ParamValues
其中 ${Param.name} 的作用就等同於 <%= request.getParameter("name") %>
${ParamValues .option} 也就等同於 <% request.getParameter("option") %>

  • 與標頭有關的 header 和 headerValues ,可以對應到所有 HttpRequest 有關於標頭 getXXX() 方法,譬如以下:
<%= request.getHeader("host") %> //輸出 WEB伺服器的位址名稱
等同於 ${header.host}

  • cookie 和取得初始化參數的 initParam
首先 cookie 就等同於 Cookie 的物件,所以只要透過 cookie 的隱含物件並訂名稱就可以找到它的值了。而初始化參數化參數就如下:
<%= application.getInitParamter("Link") %> //取得WEB應用系統的參數
就等同於 ${initParam.Link}

(三)

最後則是 pageContext,他對應了JSP的 pageContext 而且本身就是一個 JavaBean,所以對於是 getXXX() 的方法都可以透過 ${pageContext.XXX} 來取得

如果要在 EL 運算式中取得 request 物件並取出請求的方法責可以如下所示:
${pageContext.request.method}
上述基本上等同於在 JSP 中的 <%= request.getMethod() %>



以上是最基本的 EL 運算式語言介紹
更多的介紹可以看 J2EE - JSP 運算式語言(EL) 2

沒有留言:

張貼留言