在使用EL時,其實EL是先看標識符是否是其隱式對象之一,如果不是,才從四個域(page、request、session、application)中順序搜索(使用pageContext.findAttribute方法)。
EL總共有如下隱式對象:
而這里,EL和JSP一樣擁有pageContext對象,通過在EL中使用pageContext對象,能獲取JSP中其它幾個隱式對象,然后再獲得這些對象中的屬性。例如獲取當(dāng)前web工程的名稱的經(jīng)典EL表達式:${ pageContext.request.contextPath },就是由pageContext先獲取request對象(因為在JSP的API中,我們可以看到pageContext有g(shù)etRequest方法),獲取到request對象后,因為request中含有g(shù)etContextPath方法,因此我們還可以獲得request對象中contextPath屬性的值。
pageScope、requestScope、sessionScope、applicationScope這四個EL隱式對象分別代表了各自域中的Map對象(每個域以關(guān)鍵字來保存數(shù)據(jù)或?qū)ο?,肯定是使用Map集合),這Map對象保存了存在這些域中的鍵值對。通過EL表達式和這些隱式對象,我們可以直接從指定的域中獲取存儲的數(shù)據(jù)。
例1:
<% User u = new User(); u.setUsername("fjdingsd"); session.setAttribute("user", u); %> 歡迎您:${sessionScope.user.username}