溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

EL表達式的隱式對象_動力節(jié)點Java學院整理

發(fā)布時間:2020-09-29 18:59:22 來源:腳本之家 閱讀:223 作者:fjdingsd 欄目:編程語言

在使用EL時,其實EL是先看標識符是否是其隱式對象之一,如果不是,才從四個域(page、request、session、application)中順序搜索(使用pageContext.findAttribute方法)。

EL總共有如下隱式對象:

EL表達式的隱式對象_動力節(jié)點Java學院整理

而這里,EL和JSP一樣擁有pageContext對象,通過在EL中使用pageContext對象,能獲取JSP中其它幾個隱式對象,然后再獲得這些對象中的屬性。例如獲取當前web工程的名稱的經(jīng)典EL表達式:${ pageContext.request.contextPath },就是由pageContext先獲取request對象(因為在JSP的API中,我們可以看到pageContext有getRequest方法),獲取到request對象后,因為request中含有getContextPath方法,因此我們還可以獲得request對象中contextPath屬性的值。

pageScope、requestScope、sessionScope、applicationScope這四個EL隱式對象分別代表了各自域中的Map對象(每個域以關鍵字來保存數(shù)據(jù)或?qū)ο螅隙ㄊ鞘褂肕ap集合),這Map對象保存了存在這些域中的鍵值對。通過EL表達式和這些隱式對象,我們可以直接從指定的域中獲取存儲的數(shù)據(jù)。

例1:

<%
      User u = new User();
      u.setUsername("fjdingsd");
      session.setAttribute("user", u);
   %>
 歡迎您:${sessionScope.user.username}

在瀏覽器中觀察:

EL表達式的隱式對象_動力節(jié)點Java學院整理

對于用戶登錄這樣的案例來說,我們檢查用戶是否登錄肯定只需要從session域中查詢,這樣使用EL表達式的sessionScope隱式對象就足夠了。

param隱式對象:表示所有請求參數(shù)的Map集合對象。例如表單提交,那么在請求參數(shù)中的數(shù)據(jù)就以鍵值對存儲在param對象所代表的Map集合中,下面的例子我以get方式來替代post方式來模擬表單請求參數(shù):

例2:

 ${param.username}

在地址欄上添加URL參數(shù),可以看到:

EL表達式的隱式對象_動力節(jié)點Java學院整理

使用param隱式對象同樣也能作為數(shù)據(jù)回顯功能,在以前JSP頁面提交的表單如果想做出數(shù)據(jù)回顯功能,必須創(chuàng)建一個form的bean對象,當表單校驗失敗時,重新將這個bean對象通過轉發(fā)(forward)傳回JSP頁面再取出。而使用param對象,不需要新建form的bean對象,只需要在表單校驗失敗時轉發(fā)回表單所在的JSP頁面,通過param對象就可以從請求中取出之前的表單數(shù)據(jù)。

例3:表單驗證失敗的數(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中:

 //省略表單驗證過程,驗證失敗重新轉發(fā)到表單頁面
 request.getRequestDispatcher("/beantag.jsp").forward(request, response);

剛進入表單注冊頁面:

EL表達式的隱式對象_動力節(jié)點Java學院整理

EL表達式的隱式對象_動力節(jié)點Java學院整理

假設表單驗證失敗,則轉發(fā)請求到表單注冊頁面,并回顯數(shù)據(jù):

EL表達式的隱式對象_動力節(jié)點Java學院整理

 paramValues隱式對象:也是表示一個保存所有的請求參數(shù)的Map集合對象,但是paramValues對象和param對象的區(qū)別是,對任何一個參數(shù),paramValues都是以字符串數(shù)組(String[])作為保存數(shù)據(jù)的類型,因此paramValues對象適合在有同名參數(shù)的情況下使用。

例4:

 ${paramValues.name[0]}

瀏覽器中觀察:

EL表達式的隱式對象_動力節(jié)點Java學院整理

例5:

${paramValues.name[1]}

瀏覽器中觀察:

EL表達式的隱式對象_動力節(jié)點Java學院整理

header隱式對象:表示一個保存了該JSP頁面發(fā)出請求的請求頭字段的Map集合對象。

注意:這個對象只能獲取請求頭字段的信息,不能獲取響應頭字段的信息。另外如果頭字段中含有小橫線的”-”,例如”Accept-Encoding”,則要使用中括號加引號的EL取數(shù)據(jù)形式,例如 ${ header[‘a(chǎn)ccept-encoding'] }。

例6:

${header.connection}

在瀏覽器中觀察:

EL表達式的隱式對象_動力節(jié)點Java學院整理

例7:

${header['accept-encoding']}

在瀏覽器中觀察:

EL表達式的隱式對象_動力節(jié)點Java學院整理

headerValues隱式對象功能類似于header隱式對象,但以字符串數(shù)組封裝每個保存的請求頭字段信息,這點跟paramValues隱式對象是一樣的。     

cookie隱式對象:表示一個保存了該請求中所有的Cookie的Map集合對象。

假設在請求中有一個cookie,cookie的鍵值對為:

JSESSIONID=E9546AE9C86FB722BDBD7AF947157379

例8:

 ${cookie.JSESSIONID}

在瀏覽器中觀察:

EL表達式的隱式對象_動力節(jié)點Java學院整理

可以看到,cookie隱式對象的名稱(cookie)是Map集合的名稱,而在這個Map集合中,有一個鍵值對的key命名為JSESSIONID,而通過${cookie.JSESSIONID}獲取到的是一個Cookie對象,那么我們?nèi)绾潍@取該Cookie的值呢?

之前說過EL表達式都是通過對象的具有的屬性來獲取屬性值,能被稱為屬性的都有getXXX方法,而Cookie正是具有getName()方法和getValue()方法,因此在EL表達式中獲取了Cookie對象后可以再獲取這兩個屬性:

例9:

${cookie.JSESSIONID.name} <br>
${cookie.JSESSIONID.value}  <br> 

在瀏覽器中觀察:

EL表達式的隱式對象_動力節(jié)點Java學院整理

initParam隱式對象:表示一個保存了所有web應用初始化參數(shù)(context-param)的Map集合對象。

<context-param>標簽用于配置全局性的web參數(shù),在Servlet中可以使用 ServletContext.getInitParameter方法獲取指定參數(shù)的值。

而在JSP頁面中,我們可以同EL表達式的initParam方法來獲取為web應用配置的全局性參數(shù)。

例10:

在web.xml文件中配置:

 <context-param>

<param-name>username</param-name>

 <param-value>fjdingsd</param-value>

</context-param>

在JSP頁面中:

${initParam.username }

在瀏覽器中觀察:

EL表達式的隱式對象_動力節(jié)點Java學院整理

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI