EL表達式-JSTL標籤庫

EL語言:
    四大作用域對象的別名:
       EL別名                                   JSP
    requestScope                 request
    sessionScope                 session
    applicationScope             application
    pageScope                    page(當前JSP),不是當前作用域pageContext

EL語言的公式:
${作用域別名.關鍵字}:
    tomcat編輯jsp頁面時,根據el表達式,調用響應的java代碼,從指定作用域中,讀取與當前關鍵字對應的內容,
    並將這個內容進行響應的數據類型轉換,並輸出到jsp頁面上
${關鍵字}:
        按以下順序尋找
        1.pageContext尋找對應的關鍵字
        2.request尋找對應的關鍵字
        3.session尋找對應的關鍵字
        4.application尋找對應的關鍵字
        5.null
從作用域獲得自定義數據類型對象:
        ${作用域別名.關鍵字.屬性名}
        ${作用域別名.關鍵字["屬性名"]}

關係運算符號:
        EL表達式             Java語言
           eq                          ==
           lt                             <
           gt                            >
           le                           <=
           ge                          >=

通過EL中包含的內置對象,通知tomcat調用當前JSP頁面中九大內置對象。
    1.param:通知tomcat獲得request作用域中的請求參數
        Java:<%=request.getParameter("請求參數名")%>
        EL:${param.請求參數名}

    2. pageContext------->JSP中的pageContext
        <!-- 獲得當前工程在服務器端的請求路徑 -->
        <%=request.getContextPath()%>
        ${pageContext.request.contextPath}


JSTL:jsp strand tag lib [jsp 標準標籤庫]
    JSTL分類:1. 核心標籤庫------------------core
                       2. 數據格式轉換標籤庫
                       3. 數據庫操作標籤庫
                       4. xml數據操作標籤庫

    1.導入核心標籤庫配置文件(.tld)
        <%@ taglib uri="標籤庫配置文件"  prefix="標籤的前綴名"%>
        <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    2.<c:set>:負責向四大作用域的數據設置和修改
      <c:set scope="作用域名稱" var="關鍵字" value="值"/>
      eg:<c:set scope="session" var="age" value="19"></c:set>
      
      <c:out>:從四大作用域,讀取數據
      <c:out value="EL表達式">
      eg:<c:out value="${sessionScope.age}"></c:out>

      <c:remove>:從四大作用域中,移除數據
      作用域.removeAttribute(key)
      <c:remove scope="作用域" var="關鍵字">
      eg:<c:remove scope="session" var="age"/>

      <c:catch>:負責進行異常撲捉.
      <c:catch var="關鍵字">
        <% int a = 5/0;%>
      </c:catch>
      異常產生時,catch標籤將異常信息與關鍵字關聯,形成一個鍵值對:關鍵字-------java.lang.NullPointerExceptino
      catch標籤,將鍵值對保存到當前頁作用域中。
      EL從當前頁作用域中,讀取異常信息:${pageScope.關鍵字}

      <c:if>:用於進行if判斷,相當於if(){}
      根據EL表達式的判斷結果,決定是否運行<if>內部的內容
      <c:if test="EL表達式">
        內容
      </c:if>

      <c:choose>-------------------------------多分支選擇結果
      <c:when test="EL表達式">內容</c:when>----if
      <c:when test="EL表達式">內容</c:when>----if
      <c:otherwise>----------------------------else
          內容
      </c:choose> 

      <c:forEach>:循環操作:
        1.指定循環次數,進行循環
               <c:forEach var="循環變量名稱" begin="循環變量初始值" end="循環次數" step="每次循環後,循環變量自增的值">
               eg:<c:forEach var="num" begin="1" end="5" step="1" >------從1開始循環五次每次自增1
                   **** 循環變量,被forEach標籤保存到當前頁作用域中
                   ${pageScope.循環變量名稱}
               </c:forEach>
        2.循環遍歷集合(*******)
               List: 
               <c:forEach items="EL表達式獲得集合對象(List)" var="關鍵字1" varStatus="關鍵字2">
                   ${關鍵字1.屬性}
                   varStatus="關鍵字2":包含循環基本信息,比如本次循環是第幾次循環
                   ${關鍵字2.count}: 當前循環次數
               </c:forEach>

               Map{key:value;key1:value1} 
               <c:forEach items="EL表達式獲得集合對象(Map)" var="關鍵字">
                   var="關鍵字":指向的map中一個鍵值對
                   讀取當前鍵值對中關鍵字:${關鍵字.key}
                   讀取當前鍵值對中value:${關鍵字.value}
               </c:forEach>


自定義標籤開發:
    一個JSTL標籤,就是一個java類
    1.開發一個標籤實現類需要繼承javax.servlet.jsp.tagext.TagSupport
        public class TextTag extends TagSupport {
            @Override
            /**
            * 當tomcat調用一個標籤類時,一定要調用標籤類中doStartTag()
            */
            public int doStartTag() throws JspException {
                /**  
                *  TagSupport提供pageContext屬性,
                *  這個屬性的賦值,是由tomcat負責賦值。
                *  pageContext指向當前標籤類所在的jsp文件中的pageContext
                */
                JspWriter out= super.pageContext.getOut();
                try {
                    out.print("<input type='text' value='自定義文本框'/>");
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return super.doStartTag();
            }
        }
        public class SelectTag extends TagSupport {
            private String num; // 接收用戶輸入的option的個數
            public String getNum() {
                return num;
            }
            public void setNum(String num) {
                this.num = num;
            }
            @Override
            public int doStartTag() throws JspException {
                JspWriter out=    super.pageContext.getOut();
                try{
                    out.print("<select>");
                    for(int i=1;i<=Integer.valueOf(num);i++){
                        out.print("<option >");
                        out.print(i);
                        out.print("</option>");
                    }
                    out.print("</select>");
                }catch(Exception ex){}
                return super.doStartTag();
            }
        }

    2.開發一個標籤庫配置文件 (xxx.tld)
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
                                "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
        <taglib>
            <tlib-version>1.0</tlib-version>
            <jsp-version>2.0</jsp-version>
            <short-name>自定義名稱</short-name>
            <uri>靜態資源路徑/http://com.bjpowernode/669/tag</uri>

            <!-- 配置標籤類的別名,用於在JSP頁面使用 -->
            <tag>
                <name>textTag</name>
                <tag-class>com.bjpowernode.tag.TextTag</tag-class>
            </tag>

            <tag>
                <name>selectTag</name>
                <tag-class>com.bjpowernode.tag.SelectTag</tag-class>
                <!-- 配置當前標籤類,在jsp中使用屬性 -->
                <attribute>
                    <name>num</name>
                    <required>true</required>
                </attribute>
            </tag>
        </taglib>
    3.在JSP中應用
        <%@ taglib uri="http://com.bjpowernode/669/tag" prefix="yz"%>
        <html>
            <yz:textTag></yz:textTag><br/>
            <yz:selectTag num="5"></yz:selectTag>
        </html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章