EL表達(dá)式的隱式對(duì)象_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
在使用EL時(shí),其實(shí)EL是先看標(biāo)識(shí)符是否是其隱式對(duì)象之一,如果不是,才從四個(gè)域(page、request、session、application)中順序搜索(使用pageContext.findAttribute方法)。
EL總共有如下隱式對(duì)象:
而這里,EL和JSP一樣擁有pageContext對(duì)象,通過在EL中使用pageContext對(duì)象,能獲取JSP中其它幾個(gè)隱式對(duì)象,然后再獲得這些對(duì)象中的屬性。例如獲取當(dāng)前web工程的名稱的經(jīng)典EL表達(dá)式:${ pageContext.request.contextPath },就是由pageContext先獲取request對(duì)象(因?yàn)樵贘SP的API中,我們可以看到pageContext有g(shù)etRequest方法),獲取到request對(duì)象后,因?yàn)閞equest中含有g(shù)etContextPath方法,因此我們還可以獲得request對(duì)象中contextPath屬性的值。
pageScope、requestScope、sessionScope、applicationScope這四個(gè)EL隱式對(duì)象分別代表了各自域中的Map對(duì)象(每個(gè)域以關(guān)鍵字來保存數(shù)據(jù)或?qū)ο?,肯定是使用Map集合),這Map對(duì)象保存了存在這些域中的鍵值對(duì)。通過EL表達(dá)式和這些隱式對(duì)象,我們可以直接從指定的域中獲取存儲(chǔ)的數(shù)據(jù)。
例1:
<% User u = new User(); u.setUsername("fjdingsd"); session.setAttribute("user", u); %> 歡迎您:${sessionScope.user.username}
在瀏覽器中觀察:
對(duì)于用戶登錄這樣的案例來說,我們檢查用戶是否登錄肯定只需要從session域中查詢,這樣使用EL表達(dá)式的sessionScope隱式對(duì)象就足夠了。
param隱式對(duì)象:表示所有請(qǐng)求參數(shù)的Map集合對(duì)象。例如表單提交,那么在請(qǐng)求參數(shù)中的數(shù)據(jù)就以鍵值對(duì)存儲(chǔ)在param對(duì)象所代表的Map集合中,下面的例子我以get方式來替代post方式來模擬表單請(qǐng)求參數(shù):
例2:
${param.username}
在地址欄上添加URL參數(shù),可以看到:
使用param隱式對(duì)象同樣也能作為數(shù)據(jù)回顯功能,在以前JSP頁面提交的表單如果想做出數(shù)據(jù)回顯功能,必須創(chuàng)建一個(gè)form的bean對(duì)象,當(dāng)表單校驗(yàn)失敗時(shí),重新將這個(gè)bean對(duì)象通過轉(zhuǎn)發(fā)(forward)傳回JSP頁面再取出。而使用param對(duì)象,不需要新建form的bean對(duì)象,只需要在表單校驗(yàn)失敗時(shí)轉(zhuǎn)發(fā)回表單所在的JSP頁面,通過param對(duì)象就可以從請(qǐng)求中取出之前的表單數(shù)據(jù)。
例3:表單驗(yàn)證失敗的數(shù)據(jù)回顯demo
在JSP頁面beantag.jsp中:
<form action="${pageContext.request.contextPath}/servlet/FormHandler" method="post"> 用戶名 <input type="text" name="username" value="${param.username}" /> <input type="submit" value="提交" > </form>
在處理表單的Servlet中:
//省略表單驗(yàn)證過程,驗(yàn)證失敗重新轉(zhuǎn)發(fā)到表單頁面 request.getRequestDispatcher("/beantag.jsp").forward(request, response);
剛進(jìn)入表單注冊(cè)頁面:
假設(shè)表單驗(yàn)證失敗,則轉(zhuǎn)發(fā)請(qǐng)求到表單注冊(cè)頁面,并回顯數(shù)據(jù):
paramValues隱式對(duì)象:也是表示一個(gè)保存所有的請(qǐng)求參數(shù)的Map集合對(duì)象,但是paramValues對(duì)象和param對(duì)象的區(qū)別是,對(duì)任何一個(gè)參數(shù),paramValues都是以字符串?dāng)?shù)組(String[])作為保存數(shù)據(jù)的類型,因此paramValues對(duì)象適合在有同名參數(shù)的情況下使用。
例4:
${paramValues.name[0]}
瀏覽器中觀察:
例5:
${paramValues.name[1]}
瀏覽器中觀察:
header隱式對(duì)象:表示一個(gè)保存了該JSP頁面發(fā)出請(qǐng)求的請(qǐng)求頭字段的Map集合對(duì)象。
注意:這個(gè)對(duì)象只能獲取請(qǐng)求頭字段的信息,不能獲取響應(yīng)頭字段的信息。另外如果頭字段中含有小橫線的”-”,例如”Accept-Encoding”,則要使用中括號(hào)加引號(hào)的EL取數(shù)據(jù)形式,例如 ${ header[‘a(chǎn)ccept-encoding'] }。
例6:
${header.connection}
在瀏覽器中觀察:
例7:
${header['accept-encoding']}
在瀏覽器中觀察:
headerValues隱式對(duì)象功能類似于header隱式對(duì)象,但以字符串?dāng)?shù)組封裝每個(gè)保存的請(qǐng)求頭字段信息,這點(diǎn)跟paramValues隱式對(duì)象是一樣的。
cookie隱式對(duì)象:表示一個(gè)保存了該請(qǐng)求中所有的Cookie的Map集合對(duì)象。
假設(shè)在請(qǐng)求中有一個(gè)cookie,cookie的鍵值對(duì)為:
JSESSIONID=E9546AE9C86FB722BDBD7AF947157379
例8:
${cookie.JSESSIONID}
在瀏覽器中觀察:
可以看到,cookie隱式對(duì)象的名稱(cookie)是Map集合的名稱,而在這個(gè)Map集合中,有一個(gè)鍵值對(duì)的key命名為JSESSIONID,而通過${cookie.JSESSIONID}獲取到的是一個(gè)Cookie對(duì)象,那么我們?nèi)绾潍@取該Cookie的值呢?
之前說過EL表達(dá)式都是通過對(duì)象的具有的屬性來獲取屬性值,能被稱為屬性的都有g(shù)etXXX方法,而Cookie正是具有g(shù)etName()方法和getValue()方法,因此在EL表達(dá)式中獲取了Cookie對(duì)象后可以再獲取這兩個(gè)屬性:
例9:
${cookie.JSESSIONID.name} <br> ${cookie.JSESSIONID.value} <br>
在瀏覽器中觀察:
initParam隱式對(duì)象:表示一個(gè)保存了所有web應(yīng)用初始化參數(shù)(context-param)的Map集合對(duì)象。
<context-param>標(biāo)簽用于配置全局性的web參數(shù),在Servlet中可以使用 ServletContext.getInitParameter方法獲取指定參數(shù)的值。
而在JSP頁面中,我們可以同EL表達(dá)式的initParam方法來獲取為web應(yīng)用配置的全局性參數(shù)。
例10:
在web.xml文件中配置:
<context-param> <param-name>username</param-name> <param-value>fjdingsd</param-value> </context-param>
在JSP頁面中:
${initParam.username }
在瀏覽器中觀察:
相關(guān)文章
SpringCloud feign微服務(wù)調(diào)用之間的異常處理方式
這篇文章主要介紹了SpringCloud feign微服務(wù)調(diào)用之間的異常處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Java數(shù)據(jù)結(jié)構(gòu)之紅黑樹的實(shí)現(xiàn)方法和原理詳解
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之紅黑樹的實(shí)現(xiàn)方法和原理,紅黑樹是一種特殊的二叉查找樹,每個(gè)結(jié)點(diǎn)都要儲(chǔ)存位表示結(jié)點(diǎn)的顏色,或紅或黑,本文將通過示例為大家詳細(xì)講講紅黑樹的原理及實(shí)現(xiàn),感興趣的朋友可以了解一下2024-02-02SpringBoot實(shí)現(xiàn)API接口的完整代碼
這篇文章主要給大家介紹了關(guān)于SpringBoot實(shí)現(xiàn)API接口的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10