1. 程式人生 > >JSP的學習(二)——EL和JSTL表示式

JSP的學習(二)——EL和JSTL表示式

一、EL表示式

①基本概念

EL表示式: expression language表示式語言

EL(Expression Language) 是為了使JSP寫起來更加簡單。表示式語言的靈感來自於 ECMAScript 和 XPath 表示式語言,它提供了在 JSP 中簡化表示式的方法,讓Jsp的程式碼更加簡化。把JSP中出現的相關的JAVA程式碼簡化。

格式:${ EL表示式 }   等價於  findAttribute(name)

②EL獲取作用域中的值

Ⅰ普通值

例如:${name}

按照 page,request,session,application(ServletContext)的順序,查詢作用域,找 key是name的 value值  。也可以指定查詢的範圍

     ${pageScope.key}

     ${requestScope.key}

     ${sessionScope.key}

     ${applicationScope.key}                 

當不指定查詢的範圍的時候,預設作用域從小到大的順序查詢。

其與getAttribute的區別:語法不同,當key不存在的時候,getAttribute(key)返回null,${key}返回空字串""

訪問物件的屬性

User user = new User(1,"zhangsan",20);

request.setAttribute("user", user);

${user.id}

${user.name}

${user.age}  

user----> 儲存在request中時的key值

id,name ,age 物件的屬性名

要求: 屬性必須有get方法 EL表示式才能訪問到

Ⅲ訪問集合

<%
         List<String> list = new ArrayList<String>();
         pageContext.setAttribute("list", list);
 %>
		 ${empty list }  判斷list中是否有元素
		
 陣列  List  Map
		
<%
          String[] ss = {"aaa","bbb","ccc"};
          pageContext.setAttribute("ss", ss);
          List<String>  list = new ArrayList<String>();
          list.add("xxx");
          list.add("yyy");
          list.add("zzz");
          request.setAttribute("list",list);

          List<User> list2 = new ArrayList<User>();
          User u1 = new User(1,"aaa",20);
          User u2 = new User(2,"bbb",20);
          User u3 = new User(3,"ccc",20);
          list2.add(u1);
          list2.add(u2);
          list2.add(u3);
          request.setAttribute("list2",list2);


          Map<String,String> map = new HashMap<String,String>();
          map.put("aaa-a", "111");
          map.put("bbb", "222");
          map.put("ccc", "333");

          pageContext.setAttribute("map", map);

        %>
        ${pageScope.ss[1] }<br>
        ${requestScope.list[2] }<br>
        ${list2[0].name}<br>
        ${map.bbb } <br>
        ${map["aaa-a"] }

EL不能遍歷集合結構

二、JSTL表示式

JSTL:JavaServer Pages Standard Tag Library,JSP標準標籤庫是一個不斷完善的開放原始碼的JSP標籤庫,是由apache的jakarta小組來維護的。

JSTL支援通用的、結構化的任務,比如迭代,條件判斷,XML文件操作,國際化標籤,SQL標籤。 除了這些,它還提供了一個框架來使用整合JSTL的自定義標籤。

下載jakarta-taglibs-standard-1.1.2.zip 包並解壓,將jakarta-taglibs-standard-1.1.2/lib/下的兩個jar檔案:standard.jar和jstl.jar檔案拷貝到/WEB-INF/lib/下。(1.2版本,只需要jstl.jar即可)

根據JSTL標籤所提供的功能,可以將其分為5個類別:

ⅰc(core)核心標籤庫

ⅱfmt格式化(國際化)

ⅲ函式(JSTL提供的EL函式)

ⅳXML

ⅴSQL

①核心標籤

核心標籤是最常用的JSTL標籤。引用核心標籤庫的語法如下:

常用標籤:

通用標籤:

set、out、remove

條件標籤:

if、choose

迭代標籤

for

foreach遍歷

<h3>測試list集合遍歷獲取學生列表</h3>
      <table border="1" width="80%" bordercolor="red" cellspacing="0"
          align="center">
          <tr>
              <th>學號</th>
              <th>姓名</th>
              <th>成績</th>
              <th>班級</th>
              <th>是否是第一個</th>
              <th>是否是最後一個</th>
              <th>計數count</th>
              <th>索引index</th>
          </tr>
   <!-- varStatus:變數狀態:遍歷出的每一項內容的狀態:
      isFirst()       first
      isLast()        last
      getCount()     count  計數  
      getIndex()     index
       -->
       <!-- var :遍歷出的每一項使用變數先儲存
            items:集合(使用El表示式)
            -->
          <c:forEach var="stu" items="${students}" varStatus="vs">
              <tr>
                  <td>${stu.id}</td>
                  <td>${stu.name}</td>
                  <td>${stu.score}</td>
                  <td>${stu.classes}</td>
                  <td>${vs.first}</td>
                  <td>${vs.last}</td>
                  <td>${vs.count}</td>
                  <td>${vs.index}</td>
              </tr>
          </c:forEach>
   </table>

②格式化標籤

JSTL格式化標籤用來格式化並輸出文字、日期、時間、數字。引用格式化標籤庫的語法如下:

常用標籤

<fmt:formatDate>標籤:格式化時間和日期

例如:

<fmt:formatDate value="${current}"/>

通過type格式指定具體的格式形式。

<fmt:formatDatevalue="${d}"type="date"/>只格式成日期

<fmt:formatDatevalue="${d}"type="time"/>只格式成時間

<fmt:formatDatevalue="${d}"type="both"/>格式成日期+時間

通過pattern屬性指定具體的格式要求

<fmt:formatDatevalue="${d}"pattern="yyyy-MM-dd"/>

③fn標籤庫

fn:contains(string, substring)

如果引數string中包含引數substring,返回true

fn:containsIgnoreCase(string, substring)

如果引數string中包含引數substring(忽略大小寫),返回true

fn:endsWith(string, suffix)

如果引數 string 以引數suffix結尾,返回true

fn:escapeXml(string)

將有特殊意義的XML (和HTML)轉換為對應的XML character entity code,並返回

fn:indexOf(string, substring)

返回引數substring在引數string中第一次出現的位置

fn:join(array, separator)

將一個給定的陣列array用給定的間隔符separator串在一起,組成一個新的字串並返回。

fn:length(item)

返回引數item中包含元素的數量。引數Item型別是陣列、collection或者String。如果是String型別,返回值是String中的字元數。

fn:replace(string, before, after)

返回一個String物件。用引數after字串替換引數string中所有出現引數before字串的地方,並返回替換後的結果

fn:split(string, separator)

返回一個數組,以引數separator 為分割符分割引數string,分割後的每一部分就是陣列的一個元素

fn:startsWith(string, prefix)

如果引數string以引數prefix開頭,返回true

fn:substring(string, begin, end)

返回引數string部分字串, 從引數begin開始到引數end位置,不包括end位置的字元

fn:substringAfter(string, substring)

返回引數substring在引數string中後面的那一部分字串

fn:substringBefore(string, substring)

返回引數substring在引數string中前面的那一部分字串

fn:toLowerCase(string)

將引數string所有的字元變為小寫,並將其返回

fn:toUpperCase(string)

將引數string所有的字元變為大寫,並將其返回

fn:trim(string)

去除引數string 首尾的空格,並將其返回