kxbin
          成功留給有準備的人
          posts - 10,  comments - 35,  trackbacks - 0


          作用域

          使用el的時候,默認會以一定順序搜索四個作用域,將最先找到的變量值顯示出來。

          如果我們有${username}這樣一個正則表達式,它回去依次調用pageContext.getAttribute("username") -> request.getAttribute("username") -> session.getAttribute("username") -> application.getAttribute("username"),只要找到某一個不為空的值就立刻返回。

          這樣的確方便我們的操作,但是隨之也出現了另外一個問題,如果pageContext和request中有同名變量,但是我想取得request中的變量該如何是好呢?這就需要為el表達式引入作用域的概念了。

          ${pageScope.username}

          ${requestScope.username}

          我們可以直接訪問13-04這個應用,看看el表達式支持的所有對象。

          下面我們分別對每個作用域對象進行講解。

          表?13.1.?el中的作用域

          el中的作用域 對應關系
          pageContext(1) 當前頁的pageContext對象
          pageScope 把page作用域中的數據映射為一個map對象
          requestScope(2) 把request作用域中的數據映射為一個map對象
          sessionScope 把session作用域中的數據映射為一個map對象
          applicationScope 把application作用域中的數據映射為一個map對象
          param 對應request.getParameter()
          paramValues(3) 對應request.getParameterValues()
          header(4) 對應request.getHeader()
          headerValues 對應request.getHeaderValues()
          cookie(5) 對應request.getCookies()
          initParam(6) 對應ServletContext.getInitParamter()


          (1)

          例子中的${pageContext.request.contextPath}返回的是request.getContextPath()的值,在此例中就是/13-04,我們經常使用這個來拼接jsp中的絕對路徑。

          這里的${pageContext.request.contextPath}是一種特殊用法,不能使用${request.contextPath}的形式替代。

          (2)

          pageScope, requestScope, sessionScope, appliationScope都可以看作是Map型變量,調用其中的數據可以使用${pageScope.name} 或${pageScope["name"]}的形式,這兩種寫法是等價的。

          在某些情況下只能使用${pageScope["content-type"]},這里不能寫成${pageScope.content-type},jsp無法解析連字符(-)會出現錯誤。

          (3)

          需要注意的是${paramValues.name}得到的是一個字符串數組,如果需要獲得其中某個值,還需要使用${paramValues.name[0]}指定數組中的索引。

          這與下面的${headerValues.name}是相似的。

          (4)

          ${header.name}會取得http請求中的header參數,現實工作中很少用到這里的數據。

          例子中使用Host是指請求訪問的主機地址,包括ip和端口號。而Referer比較有趣,如果用戶通過超鏈接跳轉過來的,Referer會保存上次訪問頁面的地址,我們就可以通過它來統計哪些用戶是從哪里轉來的了。

          (5)

          ${cookie.name}將獲得對應cookie的對象,比如我們用jsp將一段cookie發送給客戶端。

          Cookie cookie = new Cookie("username", "Username in cookie");
          response.addCookie(cookie);

          創建一個名稱為username,值為"Username in cookie"的Cookie對象,然后發送給客戶端。

          然后我們就可以使用${cookie.username}獲得這個cookie了,${cookie.username.name}獲得cookie名稱,${cookie.username.value}獲得cookie值。

          (6)

          ServletContext.getInitParamter()指的應用的初始變量,這些變量都是定義在web.xml中的。

          <context-param>
          <param-name>username</param-name>
          <param-value>username with context param</param-value>
          </context-param>

          ${initParam.username}就會得到這里的變量值。

          以上都是死記硬背的東西,建議實際用到的時候翻看一下就好了,演示代碼都放在13-04下,為了獲得param和cookie還要點擊一下最下邊的連接才可以。

          運算符

          el表達式中支持java中所有的操作符,并且還有一些擴展,下面我們簡要做一下對照。

          表?13.2.?加減乘除四則運算

          符號 說明
          +
          -
          *
          /或div
          %或mod 求余

          表?13.3.?比較運算

          符號 說明
          ==或eq 相等(equals)
          !=或ne 不相等(not equals)
          <或lt 小于(less than)
          >或gt 大于(greater than)
          <=或le 小于等于(less than or equals)
          >=或ge 大于等于(greater than or equals)

          表?13.4.?邏輯運算

          符號 說明
          &&或and 邏輯和
          ||或or 邏輯或
          !或not 取反

          表?13.5.?特殊運算

          符號 說明
          empty 是否為null或空字符串
          ? : 三元運算符

          下面上所有運算符的顯示結果,順便說一下如果想在jsp中顯示${name}而不讓jsp把它當作el計算出來,可以寫成\${name},這樣最后顯示的結果就是${name}了。

          posted on 2009-10-11 11:56 kxbin 閱讀(1690) 評論(0)  編輯  收藏 所屬分類: J2EE
          你恨一個人是因為你愛他;你喜歡一個人,是因為他身上有你沒有的;你討厭一個人是因為他身上有你有的東西;你經常在別人面前批評某人,其實潛意識中是想接近他。

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(5)

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          J2EE

          java技術網站

          Linux

          平時常去的網站

          數據庫

          電影網站

          網站設計

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 罗城| 汽车| 乌拉特前旗| 城口县| 本溪市| 桂林市| 宾阳县| 漠河县| 雅江县| 巴里| 简阳市| 铜山县| 威远县| 金山区| 沅陵县| 曲麻莱县| 临夏市| 贞丰县| 陇南市| 威海市| 海安县| 雷波县| 蓬莱市| 运城市| 子长县| 河南省| 家居| 孝义市| 五莲县| 盐源县| 静海县| 全南县| 屯昌县| 旬邑县| 三河市| 新余市| 乳山市| 黄浦区| 大安市| 准格尔旗| 正阳县|