el和jstl

一、什麼是el以及特性是什麼?

     1)el:即爲表達式語言。java

   2)格式:${ ...}session

  3)做用:用來獲取jsp四大做用域對象中的屬性值並顯示[賦值]在jsp的節點上。它實質上就是 <%= 表達式 %> 簡潔式。另外, 它還能夠獲取 實        體內容。同時,能夠實現表達式的計算與判斷。app

  底層利用的反射機制:jsp

  A)能夠利用以下方式直接進行屬性的訪問,優化

  格式:對象.屬性。例若有一個user對象。取裏面的age屬性。url

  就能夠表達爲${user.age};  能夠進行判斷後自動根據真假取值:${dog.sex? ’公’:’母’}spa

  注意:age等書寫的方式必定的第一個單詞的首字母小寫而後遵循駝峯型格式。orm

  B)獲取容器中的值使用容器.key獲取其中的value。對象

  C)從JSP的四大做用域對象中獲取屬性的值。索引

   pageContext ---->  pageScope    ${pageScope.屬性名}  或  ${屬性名}

 

      request ---->  requestScope    ${requestScope.屬性名}  或  ${屬性名}

 

      session ---->  sessionScope    ${sessionScope.屬性名}  或  ${屬性名}

 

      application ---->  applicationScope    ${applicationScope.屬性名}  或  ${屬性名}

 

    注意: 當不寫 XXXScope 前綴時,而直接 ${屬性名} 去獲取四大做用域中的值,則會從小到大去找,找到,則結束。即做用域越小優先級越高;

  D)從JSP的請求實體中獲取參數的值:

 

                            param ----> ${param.參數名}

        paramValues ---> ${paramValues.參數名[索引號] }  或  ${paramValues.參數名['索引號'] 

  E)EL表達式中能夠進行運算。

       算術運算, 關係運算, 邏輯運算:

       關係運算  ${ "5" > 3 }獲得結果爲true;

       注意: 在運算前,若數據類型不一致,則會發生類型的自動轉換。  如:  ${'123' + 100};

       注意: EL 表達式中不能進行字符串的鏈接運算。  ${"Beijing" + 2008}  //報錯

  4)特有的運算符。

  A) . 和 []  ;//此處.爲成員運算符;[]爲偏移運算符號;

  EL爲了獲取實體內容。爲此,提供了專門的關鍵字  param 或 paramValues

             例如: 早期, 獲取請求時的實體內容: <%= request.getParameter("uname") %>

                   如今, 獲取請求時的實體內容: ${param.uname}                         

                   早期, 獲取請求時的同名不一樣值的實體內容中:

                        <%

                              String[] favs = request.getParameterValues("fav");

                               for(int i = 0; i < favs.length; i++ ){

                                        out.print( favs[i] + "  ");

                               }

                        %>

                        

                   如今, 獲取請求時的同名不一樣值的實體內容中

          [其中第一個參數是]: ${paramValues.fav[0] }

                   [第二個參數是: ]  ${paramValues.fav['1'] }

     b) empty  判斷運算符

   當屬性值爲空值,EL中如何判斷?

     案例以下:    

             <%

                       //String name = null;

                       String name = "";

                       request.setAttribute("name", name);

                      

                       Map<String,Integer> dogs = new HashMap<String,Integer>();

                       session.setAttribute("dogs", dogs);

                       Set<String> cats = new TreeSet<String>();

                       List<String> cars = new LinkedList<String>();

                       pageContext.setAttribute("cats", cats);

                       pageContext.setAttribute("cars", cars);

             %>

             在EL表達式中,對屬性值進行空值判斷

             例如: 對request對象的name屬性值進行判斷,其結果爲:   ${ empty requestScope.name}

             例如: 對session對象的dogs屬性值進行判斷,其結果爲:   ${ empty sessionScope.dogs } ----- ${empty dogs }        

             例如: 對pageContext對象的cats屬性值進行判斷,其結果爲:   ${ empty cats } 

             例如: 對pageContext對象的cars屬性值進行判斷,其結果爲:   ${ empty cars } 

             特別注意:  EL表達式中的變量必須是 四大做用域的屬性或請求實體中的參數。

2 、 什麼是JSTL? ----jsp standard  tag lib;

    它是 JSP 的標準標籤庫。

      它主要是將 java的流程控制語句簡化或優化成一個 JSP頁面上可直接使用的標籤。

 三、JSTL的基本格式?

   格式:

          <c:標籤>

                輸出的信息

          </c:標籤>

注意: 在使用 JSTL標籤以前,必須在JSP頁面使用 taglib 指令將用到的標籤庫導入過來。

四、導入標籤庫的taglib指令,其使用方式以下:

   <%@ taglib prefix="前綴" uri="標籤庫的地址及庫名" %> 。。。//通常前綴使用字母c。

五、經常使用的標籤庫及其標籤?

         a) http://java.sun.com/jstl/core_rt 核心標籤庫  

---> [ <c:if> | <c:choose><c:when><c:otherwise> | <c:forEach> ]

     另外瞭解: <c:url> | <c:param> | <c:import> | <c:redirect> 

     而 請求轉發:<jsp:forward page=」 xxx.jsp」> </jsp:forward> 形式稱之爲JSP的頁面元素或頁面標籤,它是JSP內置的。

     重定向<c:redirect url=」xxx.jsp 」></c:redirect>

     b) http://java.sun.com/jstl/fmt_rt  格式化標籤 --->[ <fmt:formatDate> | <fmt:formatNumber> ] 

六、<c:if> 標籤的應用

       a) 形式一

              <c:if test="${條件表達式}" var="存放結果的變量"> 

                       結果表現體 

              </c:if>         

    b) 形式二

             <c:if test="${條件表達式 }" var="存放結果的變量" scope="做用域對象">

                       結果表現體

             </c:if>

 注意: 在JSP的 jstl標籤庫中 <c:if>只是單向的,沒有雙向的。 那問: 如何實現雙向的if語句功能?

例如:

<c:if test=」${dog.sex==true}」> 公</c:if>

<c:if test=」${dog.sex==false}」> 母</c:if> 

七、<c:choose><c:when><c:otherwise> 標籤的應用

         <c:choose>

             <c:when test="${條件表達式}"> 結果表現體  </c:when>

             <c:when test="${條件表達式}"> 結果表現體  </c:when>

             ......

             <c:otherwise> 結果表現體  </c:otherwise>

    </c:choose>

八、<c:forEach>標籤的應用形式

         a) 形式一 

             <c:forEach begin="起始值" end="終止值" var="存放每次循環的結果變量">

                       ${表示式 }

             </c:forEach>

            注意: 它至關於java中的標準for循環語句  for(int i=1; i<=10; i++) { ... }

         b) 形式二

                    <c:forEach begin="起始值" end="終止值" var="存放每次循環的結果變量" step="增量" >

                       ${表示式 }

                 </c:forEach>            

            注意: 它至關於java中的標準for循環語句  for(int i=1; i<=10; i+=增量) { ... }

         c) 形式三

               <c:forEach items="${容器}" var="存放每次循環的值" varStatus="狀態變量">

                        結果表現體

               </c:forEach> 

     注意: 狀態變量中有一個  index 屬性,表示每種狀態的索引號。

         注意: 這種形式最經常使用

         例如: 如有 List<Person>  ps = new ArrayList<Person>();

                        則對 List 的 ps 容器進行遍歷以下:<br/>

                        <c:forEach items="${ps}" var="person" varStatus="id">

                                  ${id.index + 1} ---- ${person.name} --- ${person.sex ? "男":"女" } --- ${person.age }  <br/>

                        </c:forEach>

九、<fmt:formatDate> 和 <fmt:formatNumber>格式化標籤的應用

         1、日期的格式化:

            1) 固有格式:

                 <fmt:formatDate value="${d1 }" type="date" dateStyle="short"/> <br/>

                 其中 type="date" 時, 有: dateStyle="short"/"long"/"full"

            2) 自定義格式

                        <fmt:formatDate value="${d1 }" pattern="yyyy-MM-dd"/> <br/>

                        <fmt:formatDate value="${d1 }" pattern="||^_^yyyy年MM月dd日^_^||"/> <br/>

     2、時間的格式化:

            1) 固有格式:

                  <fmt:formatDate value="${d1 }" type="time" dateStyle="short"/> <br/>

                 其中 type="time" 時, 有: dateStyle="short"/"long"/"full"

            2) 自定義格式:

                   <fmt:formatDate value="${d1 }" pattern="HH:mm:ss"/> <br/>

                   <fmt:formatDate value="${d1 }" pattern="北京時間>>>HH時mm分ss秒"/> <br/>

     3、格式化數值型數據

             <fmt:formatNumber value="${data }" pattern="########.##" /> <br/>

             <fmt:formatNumber value="${data }" pattern="##,###,###.##" /> <br/>

             <fmt:formatNumber value="${data }" pattern="##,###,###" /> <br/>

             <fmt:formatNumber value="${data }" pattern="##,###,###.0" /> <br/>

 

             <fmt:formatNumber value="${data }" pattern="00,000,000.0" /> <br/>

 

             <fmt:formatNumber value="${data }" pattern="$00,000,000.0" /> <br/>

 

             <fmt:formatNumber value="${data }" pattern="¥00,000,000.0" />

 

10.Jsp的EL與JSTL對兩種容器進行操做:

         1)存放對象(javaBean)的容器

                   在<c:forEach>中能夠直接經過EL訪問屬性

                   Obj.getXXX()--->${obj.屬性}

   2)存放Map容器的List容器

                   在<c:forEach>中能夠直接經過EL去訪問屬性;

                   Map.get(key)------>${map.key}

相關文章
相關標籤/搜索