jsp(7)EL表達式

前提:如果Tomcat服務器不能使用EL表達式

        (1)升級成tomcat6

(2)在JSP中加入<%@ page isELIgnored="false" %>


引例:當我們用戶登陸成功的時候,seesion就成功建立起來,我們就能這樣寫一個歡迎界面:

 歡迎你!<%=((User)session.getAttribute("user")).getUsername()%>

然而!不覺得這樣寫java代碼太多了嗎?所以可以引用EL表達式:

歡迎你!${user.username}    也可以寫成${user[“username”]}

達到簡化代碼的效果。在這裏user.username自動對應的是user.getUsername()。

所以EL表達式也不是萬能的,在這也能看出EL表達式的缺點:想要取到的屬性值,必須要有相應的get方法!



EL中的隱含對象,即默認取值的對象,例如下面的與範圍有關的隱含對象。

示例:${ username }

表示:取出某一範圍中名稱爲username的屬性變量。

解釋:首先在page中找,即${ username }實際上是${pageScope.username},如果當前page中沒有這個屬性,那麼就越到下一級request,此時${ username }實際上是${requestScope.username}...以此類推。


注意:上述取得是“屬性”,而非“參數”。隱含對象只能用來取得範圍屬性值,即JSP中的getAttribute(String name),例如response是不能使用EL表達式的,因爲他沒有getAttribute()——得到屬性的方法。取參數是在request中取的(request也能取屬性)。所以我們可以使用

${param.count + 20}

代替下面的代碼,實現request中保存的某個int類型參數做加法,操作request中的參數

String str_count = request.getParameter("count");
int count = Integer.parseInt(str_count);
count = count + 20;


提到EL表達式中的運算,我首先放個demo:

1.${17 / 5}	<br>
2.${17 mod 3} <br>
<%
int i=1;
String num="34";
request.setAttribute("i",num);
%>
3.${i+num} <br>
4.${i} <br>
5.${num} <br>
6.${i+1} <br>
7.${0/20}<br>
8.${20/0}<br>
9.${0/0}<br>

輸出是:

1.3.4

2.2 

3.34
4.34
5.
6.35
7.0.0
8.Infinity

9.NaN

其中2的mod代表取餘,我們也可以直接用%代替mod,mod等價於%,是%的別名。相應的/的別名是div

3就令人費解了,怎麼得到的是34,不是134呢?

我們先看4——${i},這個和前面的${username}一樣,代表取屬性,默認先取的page中的屬性i,如果沒有又去找request中的....我們看到當前page中是沒有這個屬性的,往request中找,有,並且這個屬性變量i的值是34,所以${i}就輸出了34。

同理5中的${num},既不存在於page,也不存在於request中,session,aplication中也沒有,所以取到的是空值(這就是el的好處之一:遇到空值不會報異常也不會變成null值

所以回過頭看3,${i+num},就是4,5的相加。注意:EL表達式中的“+”不做字符串的拼接。算術符中做的是運算操作。




如果問我們:判斷password1==password2用EL怎麼做:

${param.password1} = = ${param.password2}    (錯,這個直接輸出兩者相等,而沒有進行關係比較)
${ ${param.password1 }==${ param.password2 } } (錯,EL表達式就是爲了簡化代碼設計的,不需要相互嵌套完成操作)

${ param.password1 = = param.password2 }  (對)


最後再說一下保留字,所謂保留字的意思是指變量在命名時,應該避開的名字,以免程序編譯時發生錯誤


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章