乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      JSTL標(biāo)簽庫,自定義標(biāo)簽

       邵飛翔 2016-05-08

       JSTL 簡介

      JavaServer Pages Standard Tag Library由JCP(Java Community Process)指定標(biāo)準(zhǔn)

      提供給 Java Web 開發(fā)人員一個(gè)標(biāo)準(zhǔn)通用的標(biāo)簽函數(shù)庫

      和 EL 配合來取代傳統(tǒng)直接在頁面上嵌入 Java 程序(Scripting)的做法,以提高程序可讀性、維護(hù)性和方便性


      JSTL1.1安裝

      下載

          JSTL 主要由Apache組織的Jakarta Project 實(shí)現(xiàn)

          http://tomcat./taglibs/standard/

          容器必須支持Servlet 2.4 且JSP 2.0 以上版本

          JavaEE1.4 

      安裝

          解壓縮后將lib 中的jstl.jar、standard.jar 復(fù)制到WEB應(yīng)用程序的WEB-INF\lib 下


      1.核心標(biāo)簽庫(core)

      <c:out> 標(biāo)簽用于輸出一段文本內(nèi)容到pageContext對(duì)象當(dāng)前保存的“out”對(duì)象中。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
        <h1>HTML轉(zhuǎn)義輸出</h1><hr>
        <a href="#">xxx</a>
        <c:out value="<a href='#'>xxx</a>" ></c:out>
        ${fn:escapeXml('<a href="#">xxx</a>') }
         
        <h1>輸出默認(rèn)值</h1><hr>
        <%
        String addr = "西二旗";
        //pageContext.setAttribute("addr",addr);
         %>
      <c:out value="${addr}" default="北京"></c:out>
      ${addr == null?"北京" : addr }
        <h1>輸出變量</h1><hr>
        <%
        String name = "無雙";
        pageContext.setAttribute("name",name);
         %>
         <c:out value="${name}"></c:out>
         ${name }
        <h1>輸出常量</h1><hr>
        <c:out value="阿斯蒂芬"></c:out>
        ${"啦啦啦啦" }


      <c:set>標(biāo)簽用于設(shè)置、修改域中的屬性和值,默認(rèn)的域是page

      或者設(shè)置、修改Web域中的Map的鍵和值,JavaBean屬性。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
        <h1>修改域中的JavaBean的屬性的值</h1><hr>
        <%
        Person p = new Person();
        pageContext.setAttribute("p",p);
         %>
         <c:set target="${p}" property="name" value="克林頓"></c:set>
         ${p.name }
         
        <h1>設(shè)置或修改域中的Map的值</h1><hr>
        <%
        Map map = new HashMap();
        pageContext.setAttribute("map",map);
         %>
      <c:set target="${map}" property="cellphone" value="10010"></c:set>  
      <c:set target="${map}" property="cellphone" value="10086"></c:set>  
      ${map.cellphone }
         
        <h1>設(shè)置或修改域中的屬性值</h1><hr>
        <c:set var="name" value="韋小寶"></c:set>
        <c:set var="name" value="阿珂"></c:set>

       

      <c:remove>標(biāo)簽用于刪除各種Web域中的屬性如果不寫域名,則刪除4個(gè)域中所有的同名的屬性。

      1
          <c:remove var="name" scope=”request”/>

      <c:catch>標(biāo)簽用于捕獲嵌套在<c:catch>標(biāo)簽體中的內(nèi)容拋出的異常,

      其語法格式如下:<c:catch  var="e" >nested actions</c:catch> 將捕獲的異常對(duì)象以e為的名字,存放到page域中,再利用el表達(dá)式, ${e.message} ,頁面就會(huì)顯示出異常信息。

      1
      2
      3
      4
      5
      6
        <c:catch var="e">
        <%
            int i = 1/0;
         %>
         </c:catch>
         ${e.message }




      *<c:if test=“$(2>1)>標(biāo)簽可以構(gòu)造簡單的“if-then”結(jié)構(gòu)的條件表達(dá)式

      test后接一個(gè)el表達(dá)式,el返回值為boolean類型,若為true,則執(zhí)行標(biāo)簽體中的內(nèi)容。想達(dá)到if-else的目的,只能在寫一次c:if,將條件取反。

      1
      2
      3
      4
      5
      6
        <c:if test="${2>1}">
        確實(shí)是這樣的....
        </c:if>
        <c:if test="${2<=1}">
          你確定嗎?
        </c:if>

      *<c:choose>標(biāo)簽用于指定多個(gè)條件選擇的組合邊界,它必須與<c:when><c:otherwise>標(biāo)簽一起使用。使用<c:choose><c:when><c:otherwise>三個(gè)標(biāo)簽,可以構(gòu)造類似 “if-else if-else” 的復(fù)雜條件判斷結(jié)構(gòu)。

      1
      2
      3
      4
      5
      6
      7
      <c:choose>
      <c:when test="${count == 0}">
      對(duì)不起,沒有符合您要求的記錄。
      </c:when>
      <c:otherwise>
      符合您要求的記錄共有${count}條.
      </c:otherwise>


      *<c:forEach>標(biāo)簽用于對(duì)一個(gè)集合對(duì)象中的元素進(jìn)行循環(huán)迭代操作,或者按指定的次數(shù)重復(fù)迭代執(zhí)行標(biāo)簽體中的內(nèi)容。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
        <h1>實(shí)驗(yàn):遍歷10到100的偶數(shù),如果數(shù)字所在的位置是3的倍數(shù),顯示成紅色</h1><hr>
        <c:forEach begin="10" end="100" step="2" var="i" varStatus="stat">
        <c:if test="${stat.count % 3 == 0}"> //count表示當(dāng)前數(shù)字的總數(shù) index自然數(shù)的位置
        <font color="red">
        ${i }
        </font>
        </c:if>
        <c:if test="${stat.count % 3 != 0}">
        <font color="blue">
        ${i }
        </font>
        </c:if>
        </c:forEach>
         
        <h1>循環(huán)執(zhí)行指定的內(nèi)容若干次</h1><hr>
        <c:forEach begin="0" end="10" step="2" var="i" >
        ${i },  //0,2,4,6,8,10,
        </c:forEach>
        
        <h1>遍歷Map中的數(shù)據(jù)</h1><hr>
        <%
        Map map = new LinkedHashMap();
        map.put("name","曹操");
        map.put("age","59");
        map.put("wife","小喬");
        map.put("gender","男");
        pageContext.setAttribute("map",map);
         %>
        <c:forEach items="${map}" var="entry" >  //entry存放的是一對(duì)鍵值
        ${entry.key } : ${entry.value }<br>
        </c:forEach>
         
        <h1>遍歷集合中的數(shù)據(jù)</h1><hr>
        <%
          List list = new ArrayList();
          list.add("美國");
          list.add("中國");
          list.add("俄羅斯");
          list.add("印度");
          list.add("巴西");
            pageContext.setAttribute("list",list);
         %>
         <c:forEach items="${list}" var="c">
         ${c }<br>
         </c:forEach>
          
        <h1>遍歷數(shù)組中的數(shù)據(jù)</h1><hr>
        <%
        String   city = {"北京","上海","廣州","鐵嶺","葫蘆島"};
        pageContext.setAttribute("city",city);
         %>
         <c:forEach items="${city}" var="c"
         ${c }<br>
         </c:forEach>

       

      *<c:forTokens>切割字符串,將切好的字符串對(duì)象存在數(shù)組了,遍歷數(shù)組的字符串對(duì)象。

      1
      2
      3
        <c:forTokens items="www." delims="." var="str">
        ${str }<br>  //str表示數(shù)組中的一個(gè)字符串對(duì)象
        </c:forTokens>  //wwwitheimacom

       

      <c:import> 標(biāo)簽,實(shí)現(xiàn)include操作

      1
      2
      <c:import url="/index.jsp" var="p" scope="page"></c:import>
      //將index.jsp內(nèi)容,作為對(duì)象p 存到當(dāng)前頁面的page域中,方便引用。

       

      <c:url>標(biāo)簽用于在JSP頁面中構(gòu)造一個(gè)URL地址,其主要目的是實(shí)現(xiàn)URL重寫。URL重寫就是將會(huì)話標(biāo)識(shí)號(hào)以參數(shù)形式附加在URL地址后面

      1
      2
      3
      4
      5
      6
        <%
        String url = response.encodeURL(request.getContextPath()+"/index.jsp");
        %>
        <a href="<%= url %>">hhhh</a>
        <c:url value="/index.jsp" context="${pageContext.request.contextPath}" var="url" scope="page"></c:url>
        <a href="${url }">xxx</a>

       

      <c:redirect>標(biāo)簽用于實(shí)現(xiàn)請(qǐng)求重定向

      1
      2
      3
        <c:redirect url="/index.jsp" context="${pageContext.request.contextPath}">
          <c:param name="name" value="zhang"></c:param>
        </c:redirect>

      <c:param>標(biāo)簽  JSP頁面進(jìn)行URL的相關(guān)操作時(shí),經(jīng)常要在URL地址后面附加一些參數(shù)。<c:param>標(biāo)簽可以嵌套在<c:import>、<c:url><c:redirect>標(biāo)簽內(nèi),為這些標(biāo)簽所使用的URL地址附加參數(shù)。

       

      自定義標(biāo)簽技術(shù): 

      傳統(tǒng)標(biāo)簽:

      (1)寫一個(gè)類實(shí)現(xiàn)Tag接口  javax.servlet.jsp.tagext.Tag

      (2)寫一個(gè)tld文件,描述寫好的類

       tld文件放在WEB-INF文件夾下(classeslib以外)。tld文件的schemaLocation不對(duì),要修改為,也就是把前面的地址復(fù)制一下粘貼到后面的地址再加個(gè)/

      xsi:schemaLocation="http://java./xml/ns/j2ee http://java./xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"

      (3)在jsp頁面中引入tld文件,就可以在jsp頁面中使用自定義標(biāo)簽了

       

      生命周期:

          第一次自定義標(biāo)簽被訪問的時(shí)候產(chǎn)生對(duì)象,駐留在內(nèi)存中,隨著web應(yīng)用的銷毀而銷毀。

      執(zhí)行過程:

      setPageContext  getParent  dastart doend releast

      特點(diǎn):

      分為doStartTag doEndTag方法來分別處理發(fā)現(xiàn)開始標(biāo)簽和發(fā)現(xiàn)結(jié)束標(biāo)簽時(shí)的代碼,doStartTag可以通過返回值來控制標(biāo)簽體是否允許執(zhí)行,doEndTag方法里可以通過返回值控制標(biāo)簽之后的剩余頁面是否允許執(zhí)行

      傳統(tǒng)標(biāo)簽的這種開發(fā)方式,需要我們分析發(fā)現(xiàn)開始標(biāo)簽和發(fā)現(xiàn)結(jié)束標(biāo)簽時(shí)都需要執(zhí)行什么代碼,還需要分析到底要返回什么樣的標(biāo)簽體控制程序執(zhí)行,相對(duì)來說相當(dāng)?shù)姆爆?/span>。

      簡單標(biāo)簽:

      (1)寫一個(gè)類實(shí)現(xiàn)SimpleTag接口(繼承SimpleTag接口的默認(rèn)實(shí)現(xiàn)類SimpleTagSupport)

      (2)寫一個(gè)tld文件,描述寫好的類

      (3)在jsp頁面中引入tld文件,就可以在jsp頁面中使用自定義標(biāo)簽了

       

      生命周期+執(zhí)行過程

      1.當(dāng)jsp在執(zhí)行的過程中,每當(dāng)遇到一個(gè)簡單標(biāo)簽時(shí),都會(huì)創(chuàng)建一個(gè)處理類對(duì)象.

      2.調(diào)用setJspContext傳入當(dāng)前jsp頁面的PageContext對(duì)象.

      3.如果當(dāng)前標(biāo)簽有父標(biāo)簽則調(diào)用setParent方法將父標(biāo)簽傳入,如果沒有父標(biāo)簽則這個(gè)方法不會(huì)被調(diào)用.

      4.如果該標(biāo)簽具有屬性,調(diào)用屬性的setXXX方法將屬性的值傳入

      5.如果當(dāng)前標(biāo)簽具有標(biāo)簽體,則會(huì)調(diào)用setJspBody將封裝了標(biāo)簽體信息的JspFragment傳入,如果沒有標(biāo)簽體,這個(gè)方法不執(zhí)行

      6.最后調(diào)用doTag方法,在這個(gè)方法里我們可以書寫處理標(biāo)簽事件的java代碼

      7.當(dāng)自定義標(biāo)簽執(zhí)行完成后,簡單標(biāo)簽對(duì)象就銷毀掉了.

       

      要實(shí)現(xiàn)的功能:

      控制標(biāo)簽體是否執(zhí)行<c:if>

      控制標(biāo)簽之后的內(nèi)容是否執(zhí)行

      控制標(biāo)簽體重復(fù)執(zhí)行<c:foreach>

      修改標(biāo)簽體后輸出<c:out>

       

      為自定義標(biāo)簽來增加一個(gè)屬性:

      在標(biāo)簽處理類中增加一個(gè)javabean屬性,這個(gè)屬性就是要增加的標(biāo)簽的屬性,并對(duì)外提供setXXX方法。

      tld文件中這個(gè)標(biāo)簽的描述中描述一下該屬性

       

      *想要開發(fā)一個(gè)簡單標(biāo)簽,

      寫一個(gè)類繼承SimpleTagSupport覆蓋doTag方法就可以了,可以調(diào)用getJspContext/getJspBody來獲取需要的內(nèi)容

       

      *在tld文件中對(duì)標(biāo)簽進(jìn)行描述

      <tlib-version>1.0</tlib-version>  

      <short-name>MyTag</short-name>  //標(biāo)識(shí)tld文件

      <uri>http://www./MyTag</uri>

      <tag>

      <name>simpleDemo1</name>  //標(biāo)簽的名字

      <tag-class>com.itheima.simletag.SimpleDemo1</tag-class>  //標(biāo)簽的處理類

      <body-content>scriptless</body-content>

      //標(biāo)簽體的類型 JSP(簡單標(biāo)簽不能寫) Scriptless(任意的jsp內(nèi)容,不包括java代碼) empty(空標(biāo)簽) tagdependent(標(biāo)簽體是給后臺(tái)用的,一般不用這種類型)

      <attribute>  //聲明一個(gè)屬性,可以聲明多個(gè)屬性

      <name>times</name>   //屬性的名字

      <required>true</required>  //是否為必須存在的屬性

      <rtexprvalue>true</rtexprvalue>  //是否支持el表達(dá)式

      <type>int</type>  // 屬性的java類型

      </attribute>

      </tag>

          

              

      自定義標(biāo)簽開發(fā)_案例

       

      自定義標(biāo)簽打jar

      1、新建一個(gè)java工程,Exec

      2、將繼承SimpleTagSupportjava類復(fù)制到src目錄下

      3、工程名 - 右鍵 -  build path -  configure build path  -  libraries  -  add library

       - myeclipes library - javaEE 5 libraries

      4. 工程名 右鍵新建文件夾META-INF 文件夾

      5. tld文件放入WEB-INF文件夾下

      6. 工程名 右鍵-Export - jar - JAR file - 勾選要打包的工程 - 選好保存的路徑

       

      IFTag.java

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      public class IFTag extends SimpleTagSupport {
      private boolean test;
      public void setTest(boolean test) {
      this.test = test;
      }
        
      @Override
      public void doTag() throws JspException, IOException {
      if(test){
      getJspBody().invoke(null);
      }
      }
      }

       

       

      Exec.tld

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
       <tlib-version>1.0</tlib-version>
       <short-name>exec</short-name>
       <uri>http://www./exec</uri>
       <tag>
           <name>if</name>
           <tag-class>com.itheima.exec.IFTag</tag-class>
          <body-content>scriptless</body-content>
          <attribute>
              <name>test</name>
              <required>true</required>
              <rtexprvalue>true</rtexprvalue>
              <type>boolean</type>
          </attribute>
       </tag>

       

      exec.jsp

      1
      2
      3
      4
      5
      6
      7
      <exec:if test="${3>2}">
          確實(shí)是這樣的!
      </exec:if>
      <exec:if test="${3<=2}">
          你確定嗎?
      </exec:if>
       、

       


        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多