${page.userName}
${request.userName}
${session.userName}
${application.userName}
- 使用el的時(shí)候,默認(rèn)會以一定順序搜索四個(gè)作用域,將最先找到的變量值顯示出來,。
-
- 如果我們有${username}這樣一個(gè)正則表達(dá)式,它回去依次調(diào)用pageContext.getAttribute("username") -> request.getAttribute("username") -> session.getAttribute("username") -> application.getAttribute("username"),,只要找到某一個(gè)不為空的值就立刻返回,。
-
- 這樣的確方便我們的操作,但是隨之也出現(xiàn)了另外一個(gè)問題,,如果pageContext和request中有同名變量,,但是我想取得request中的變量該如何是好呢?這就需要為el表達(dá)式引入作用域的概念了,。
- ${pageScope.username} ${requestScope.username}
-
- 我們可以直接訪問13-04這個(gè)應(yīng)用,,看看el表達(dá)式支持的所有對象,。
-
- 下面我們分別對每個(gè)作用域?qū)ο筮M(jìn)行講解。
-
- 表 13.1. el中的作用域
-
- pageContext(1) 當(dāng)前頁的pageContext對象
- pageScope 把page作用域中的數(shù)據(jù)映射為一個(gè)map對象
- requestScope(2) 把request作用域中的數(shù)據(jù)映射為一個(gè)map對象
- sessionScope 把session作用域中的數(shù)據(jù)映射為一個(gè)map對象
- applicationScope 把a(bǔ)pplication作用域中的數(shù)據(jù)映射為一個(gè)map對象
- param 對應(yīng)request.getParameter()
- paramValues(3) 對應(yīng)request.getParameterValues()
- header(4) 對應(yīng)request.getHeader()
- headerValues 對應(yīng)request.getHeaderValues()
- cookie(5) 對應(yīng)request.getCookies()
- initParam(6) 對應(yīng)ServletContext.getInitParamter()
-
- (1)
-
-
- 例子中的${pageContext.request.contextPath}返回的是request.getContextPath()的值,,在此例中就是/13-04,,我們經(jīng)常使用這個(gè)來拼接jsp中的絕對路徑。
-
- 這里的${pageContext.request.contextPath}是一種特殊用法,,不能使用${request.contextPath}的形式替代,。
-
- (2)
-
-
- pageScope, requestScope, sessionScope, appliationScope都可以看作是Map型變量,調(diào)用其中的數(shù)據(jù)可以使用${pageScope.name}或${pageScope["name"]}的形式,,這兩種寫法是等價(jià)的,。
-
- 在某些情況下只能使用${pageScope["content-type"]},這里不能寫成${pageScope.content-type},,jsp無法解析連字符(-)會出現(xiàn)錯(cuò)誤,。
-
- (3)
-
-
- 需要注意的是${paramValues.name}得到的是一個(gè)字符串?dāng)?shù)組,如果需要獲得其中某個(gè)值,,還需要使用${paramValues.name[0]}指定數(shù)組中的索引,。
-
- 這與下面的${headerValues.name}是相似的。
-
- (4)
-
-
- ${header.name}會取得http請求中的header參數(shù),,現(xiàn)實(shí)工作中很少用到這里的數(shù)據(jù),。
-
- 例子中使用Host是指請求訪問的主機(jī)地址,包括ip和端口號,。而Referer比較有趣,,如果用戶通過超鏈接跳轉(zhuǎn)過來的,Referer會保存上次訪問頁面的地址,,我們就可以通過它來統(tǒng)計(jì)哪些用戶是從哪里轉(zhuǎn)來的了,。
-
- (5)
-
-
- ${cookie.name}將獲得對應(yīng)cookie的對象,比如我們用jsp將一段cookie發(fā)送給客戶端,。
- Cookie cookie = new Cookie("username", "Username in cookie"); response.addCookie(cookie);
-
- 創(chuàng)建一個(gè)名稱為username,,值為"Username in cookie"的Cookie對象,然后發(fā)送給客戶端,。
-
- 然后我們就可以使用${cookie.username}獲得這個(gè)cookie了,,${cookie.username.name}獲得cookie名稱,${cookie.username.value}獲得cookie值,。
-
- (6)
-
-
- ServletContext.getInitParamter()指的應(yīng)用的初始變量,,這些變量都是定義在web.xml中的。
- <context-param> <param-name>username</param-name> <param-value>username with context param</param-value> </context-param>
-
- ${initParam.username}就會得到這里的變量值,。
-
- 以上都是死記硬背的東西,,建議實(shí)際用到的時(shí)候翻看一下就好了,演示代碼都放在13-04下,為了獲得param和cookie還要點(diǎn)擊一下最下邊的連接才可以,。
- 運(yùn)算符
-
- el表達(dá)式中支持java中所有的操作符,,并且還有一些擴(kuò)展,下面我們簡要做一下對照,。
-
- 表 13.2. 加減乘除四則運(yùn)算
-
- + 加
- - 減
- * 乘
- /或div 除
- %或mod 求余
-
- 表 13.3. 比較運(yùn)算
-
- ==或eq 相等(equals)
- !=或ne 不相等(not equals)
- <或lt 小于(less than)
- >或gt 大于(greater than)
- <=或le 小于等于(less than or equals)
- >=或ge 大于等于(greater than or equals)
-
- 表 13.4. 邏輯運(yùn)算
-
- &&或and 邏輯和
- ||或or 邏輯或
- !或not 取反
-
- 表 13.5. 特殊運(yùn)算
-
- empty 是否為null或空字符串
- : 三元運(yùn)算符
|