|
您可以將一些程式邏輯放入JavaBean中,並配合<jsp:useBean>、<jsp: setProperty>與
<jsp:getProperty>等標籤來撰寫JSP網頁,以實現邏輯與視圖分開的目的,然而使用JavaBean有其限制,
JavaBean配合標籤只能用來存取一些簡單的屬性,而不能用來存取集合中的某個元素,這仍必須要配合Scriptlet才能存取。 為了要使用一些JSP隱含物件,例如request、response、session等等,您也不免要使用Scriptlet,在 JSP中,為了要實現邏輯視圖分離的目的,您還必須要搭配使用JSP標準標籤函式庫(JavaServer Page Standard Library,JSTL)或甚至自訂標籤函式庫(custom tag library)來實現。 JSP Expression Language本來是包括在JSTL 1.0的一個簡單的資料存取與運算的語言,在JSP 2.0中,則納入了JSP正式標準之中,成為JSP所支援的特性之一,JSP Expression Language定義了變數存取、運算、隱含物件、函式等內容,配合JSTL的其它標籤或流程控制標籤,就可以實現更好的邏輯視圖分離之目的。 來看個簡單的例子,瞭解JSP Expression Language的基本使用方式,下面這個JSP網頁可以計算使用者所請求的兩個數字相加結果:
<html> 如果使用表單或直接在網址上傳入a與b的值,例如: http://localhost:8080/myjsp/elTest.jsp?a=10&b =14
則會取得下面的結果: <html>
<head><title>EL Test</title></head> <body> 簡單的EL資料存取與運算: <H1> 10 + 14 = 24 </H2> </body> </html> 在這個簡單的例子中,您可以看到Expression Language是使用 ${ 與 } 來包括所要存取的隱含物件、變數與進行運算,param是Expression Language的隱含物件,表示使用者的請求參數,param.a表示取得使用者請求參數a的值。 大致而言,Expression Language中的每一個隱含物件,其存取的資料與作用範圍對應於JSP隱含物件,在之後的主題中將會有更詳細的介紹,至於 + 則是Expression Language中定義的運算子,EL運算子同一般的程式語言一樣,提供有算術運算、邏輯運算、關係運算等運算子,另外還有一些特別的運算子,這在之後會 再介紹。 在上面這個例子中,您看不到Scriptlet的部份,在語法上可以更切合的結合在HTML語法中,再來看一個簡單的例子,使用Expression Language的pageContext隱含物件來取得一些使用者的相關訊息:
<html> 這個例子是取過Expression Language的pageContext來存取javax.servlet.ServletContext, 並透過該介面來存取request屬性,也就是呼叫getRequest()方法來取得HttpServletRequest,然後再存取 HttpServletRequest的各個屬性,也就是分別呼叫getMethod()、getQueryString()、 getRemoteAddr()等方法,執行的結果可能是: <html>
<head><title>EL Test</title></head> <body> 請求方法:<b> GET </b><br> 請求參數:<b> a=10&b=14 </b><br> 使用者IP:<b> 127.0.0.1 </b><br> </body> </html> 關於Expression Language的一般例子,您可以在Tomcat的範例中先找到一些程式,啟動Tomcat之後您就可以進行線上測試,本地測試網址是: http: //localhost:8080/jsp-examples/
您可以使用 page指令元素 的isELIgnored屬性來設定JSP網頁是否使用EL,原因在於您的網頁中可能已含有與EL類似的語法,例如樣版文字之類,您也可以在web.xml中設定<el-ignored>標籤為true來決定不使用EL,例如: ...
<web-app ..> .... <jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <el-ignored>true</el-ignored> </jsp-property-group> </jsp-config> .... </web-app> web.xml中的<el-ignored>是用來預設所有JSP網頁是否使用EL,如果JSP網頁使用page指令元素的isELIgnored設定是否支援EL,則以page指令元素的設定為主。 |