Java世界

          學習筆記

          常用鏈接

          統計

          積分與排名

          天籟村

          新華網

          雅虎

          最新評論

          Jsp EL語法(轉)

          例:
          ${sessionScope.user.sex}
          所有EL都是以 ${ 為起始、以} 為結尾的。
          上述EL范例的意思是:從Session取得用戶的性別。如果使用之前JSP代碼的寫法如下:
          <%
          User user = (User)session.getAttribute(”user”);
          String sex = user.getSex( );
          %>

          兩者相比較之下,可以發現EL的語法比傳統JSP代碼更為方便、簡潔。
          EL提供 . 和 [ ] 兩種運算符來存取數據,[ ]可以訪問集合或者是數組的元素、Bean的屬性。
          下列兩者所代表的意思是一樣的,但是需要保證要取得對象的那個的屬性有相應的setXxx()和getXxx()方法才行。

          例:
          ${sessionScope.user.sex}
          等于 ${sessionScope.user["sex"]}
          . 和 [ ] 也可以同時混合使用,如下:
          ${sessionScope.shoppingCart[0].price}
          返回結果為shoppingCart中第一項物品的價格。
          在EL中,字符串既可以使用”abc”,可以使用’abc’。

          EL運算符
          EL的算術運算符和Java中的運算符的大致相同,優先級也相同。
          注意:’+’ 運算符不會連接字符串了,他只用于加法運算。
          EL關系運算符有以下六個運算符
          關系運算符????? 說 明??????????????? 范 例???????????? 結果
          = = 或 eq?? |??? 等于?? |${ 5 = = 5 } 或 ${ 5 eq 5 } | true
          != 或 ne??? |?? 不等于 |${ 5 != 5 } 或 ${ 5 ne 5 } | false
          < 或 lt???? |?? 小于??? |${ 3 < 5 }或 ${ 3 lt 5 }??? | true
          > 或 gt???? |?? 大于??? |${ 3 > 5 }或 ${ 3 gt 5 }??? | false
          <= 或 le??? | 小于等于 |${ 3 <= 5 }或 ${ 3 le 5 }?? | true
          >= 或 ge??? | 大于等于 |${ 3 >= 5 }或 ${ 3 ge 5 }?? | false
          empty運算符
          Empty運算符主要用來判斷值是否為null或空的,例如:
          ${ empty param.name }
          接下來說明Empty運算符的規則:
          {empty} A
          如果A為null時,返回true
          如果A不存在時,返回true
          如果A為空字符串時,返回true
          如果A為空數組時,返回true
          如果A為空的Map時,返回true
          如果A為空的Collection時,返回true
          否則,返回false
          注意:
          在使用EL關系運算符時,不能夠寫成:
          ${param.password1} = = ${param.password2}
          或者
          ${ ${param.password1 } = = ${ param.password2 } }
          而應寫成
          ${ param.password1 = = param.password2 }
          使用EL從表單中取得數據
          與輸入有關的隱含對象有兩個:param和paramValues,它們是EL中比較特別的隱含對象。
          一般而言,我們在取得用戶的請求參數時,可以利用下列方法:
          request.getParameter(String name)
          request.getParameterValues(String name)
          在EL中則可以使用param和paramValues兩者來取得數據。
          ${param.name}
          ${paramValues.name}可以取得所有同名參數的值
          ${paramValues.hobbies[0]}可以通過指定下標來訪問特定的參數的值
          這里param的功能和request.getParameter(String name)相同,
          而paramValues和request.getParameterValues(String name)相同。
          如果用戶填了一個form,form名稱有為username的文本框,則我們就可以使
          用${param.username}來取得用戶填入文本框的值。

          EL函數
          EL中使用函數要寫一個要使用到方法的類,然后在配置xxx.tld文件,然后在JSP中使用時和JSP的自定義標簽相似。
          xxx.tld中的配置
          <function>
          <name>reverse</name><!–函數名–>
          <function-class>jsp2.examples.el.Functions</function-class><!–函數所在的類–>
          <function-signature>java.lang.String reverse( java.lang.String )</function-signature>
          <!–函數原型,也就是函數的返回值類型,函數名,參數表,注意一定要寫類型的全名–>
          </function>

          使用EL函數的寫法
          ${sn:upper(’abc’)}
          注意:在定義EL函數時,都必須為公開靜態(public static)

          EL的隱含對象
          EL也可以使用內置對象中設置的屬性,需要使用特定的EL內置對象
          屬性范圍???? |??? 在EL中的對象
          Page???????? |???? pageScope
          Request????? |???? requestScope
          Session????? |???? sessionScope
          Application |???? applicationScope

          EL中使用內置對象的屬性
          ${requestScope.user}
          等價于
          <%request.getAttribute(”user”)%>
          如果不寫出特定的范圍 ,那就會在不同的范圍間進行搜索了
          例:{user}(user是在request范圍 request.setAttribute(”user”,user))
          也就等于
          ${requestScope.user}
          <%request.getAttribute(”user”)%>

          EL的隱含對象
          對象??????????????????????? 類 型????????????????? 說 明
          PageContext????? | javax.servlet.ServletContext |表示此JSP的PageContext
          ———————————————————————————–
          PageScope??????? | java.util.Map?? |取得Page范圍的屬性名稱所對應的值
          ————————————————————————————-
          RequestScope???? | java.util.Map???????? |取得Request范圍的屬性名稱所對應的值
          ————————————————————————————-
          sessionScope???? | java.util.Map???????? |取得Session范圍的屬性名稱所對應的值
          ————————————————————————————-
          applicationScope | java.util.Map???????? |取得Application范圍的屬稱所對應的值
          ————————————————————————————-
          param?????????? | java.util.Map |如同ServletRequest.getParameter(String name)返回String類型的值
          —————————————————————————————-
          paramValues?? | java.util.Map |如同ServletRequest.getParameterValues?? | (String name)。返回String []類型的值
          —————————————————————————————–
          header?????????? | java.util.Map?? |如同ServletRequest.getHeader(String name) 返回String類型的值
          ——————————————————————————————
          headerValues???? |??? java.util.Map |如同ServletRequest.getHeaders(String name) 。返回String []類型的值
          ——————————————————————————————
          cookie?? |???? java.util.Map???????? |如同HttpServletRequest.getCookies( )
          ——————————————————————————————
          initParam?? | java.util.Map |如同ServletContext.getInitParameter(String name)。返回String類型的值
          ——————————————————————————————-

          cookie對象
          所謂的cookie是一個小小的文本文件,它是以key、value的方式將Session Tracking的內容記錄在這個文本文件內,
          這個文本文件通常存在于瀏覽器的暫存區內。JSTL并沒有提供設定cookie的動作,
          因為這個動作通常都是后端開發者必須去做的事情,而不是交給前端的開發者。如果我們在cookie中設定一個名
          稱為userCountry的值,那么可以使用${cookie.userCountry}來取得它。
          header和headerValues(請求報頭對象)
          header儲存用戶瀏覽器和服務端用來溝通的數據,當用戶要求服務端的網頁時,會送出一個記載要求信息的標頭文件,
          例如:用戶瀏覽器的版本、用戶計算機所設定的區域等其他相關數據。如果要取得用戶瀏覽器的版本,
          即${header["User-Agent"]}。另外在很少機會下,有可能同一標頭名稱擁有不同的值,此時必須改為使用headerValues來取得這些值。
          注意:因為User-Agent中包含“-”這個特殊字符,所以必須使用“[]”,而不能寫成${header.User-Agent}。

          initParam
          就像其他屬性一樣,我們可以自行設定web應用的環境參數(Context),當我們想取得這些參數時,
          可以使用initParam隱含對象去取得它,例如:當我們在web.xml中設定如下:
          <?xml version=”1.0″ encoding=”ISO-8859-1″?>
          <web-app xmlns=”http://java.sun.com/xml/ns/j2ee”
          xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
          xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd”
          version=”2.4″>
          <context-param>
          <param-name>userid</param-name>
          <param-value>mike</param-value>
          </context-param>
          </web-app>
          那么我們就可以直接使用 ${initParam.userid}來取得名稱為userid,其值為mike的參數。
          下面是之前的做法:String userid = (String)application.getInitParameter(”userid”);

          pageContext對象
          我們可以使用 ${pageContext}來取得其他有關用戶要求或頁面的詳細信息。下面列出了幾個比較常用的部分。
          Expression??????????????????????????????? 說 明
          ${pageContext.request}????????????????? |取得請求對象
          ${pageContext.session}????????????????? |取得session對象
          ${pageContext.request.queryString}????? |取得請求的參數字符串
          ${pageContext.request.requestURL}?????? |取得請求的URL,但不包括請求之參數字符串
          ${pageContext.request.contextPath}????? |服務的web application的名稱
          ${pageContext.request.method}?????????? |取得HTTP的方法(GET、POST)
          ${pageContext.request.protocol}???????? |取得使用的協議(HTTP/1.1、HTTP/1.0)
          ${pageContext.request.remoteUser}?????? |取得用戶名稱
          ${pageContext.request.remoteAddr }????? |取得用戶的IP地址
          ${pageContext.session.new}????????????? |判斷session是否為新的,所謂新的session,表示剛由server產生而client尚未使用
          ${pageContext.session.id}?????????????? |取得session的ID
          ${pageContext.servletContext.serverInfo}|取得主機端的服務信息

          posted on 2010-01-22 21:26 Rabbit 閱讀(4137) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 资溪县| 昆山市| 汕头市| 白朗县| 米易县| 宜都市| 黄平县| 蓝山县| 镇坪县| 鄂托克旗| 新竹市| 福州市| 云梦县| 滦南县| 屏东市| 丰原市| 孝义市| 城市| 新平| 百色市| 上高县| 湘西| 枝江市| 盖州市| 武定县| 即墨市| 黄大仙区| 宣恩县| 体育| 资溪县| 榆中县| 抚松县| 陆河县| 奇台县| 赣州市| 星子县| 嘉禾县| 汝城县| 利辛县| 怀远县| 孙吴县|