Java Web(七) JSTL標籤庫

一杯涼茶發表於2017-02-23

    在之前我們學過在JSP頁面上為了不使用指令碼,所以我們有了JSP內建的行為、行為只能提供一小部分的功能,大多數的時候還是會用java指令碼,接著就使用了EL表示式,基本上EL表示式看似能滿足我們的要求,它能夠獲取各種物件,各種值,並且還不會丟擲NullPointerException之類的錯誤,但是EL表示式功能還是有限,例如不能遍歷集合等,因此為了完善JSP,讓其完全不使用java程式碼,就有了jstl標籤庫,使用jstl和EL的配合使用,基本上可以實現所有的功能,顯示資料,遍歷資料等。

    

一、為什麼使用標籤?

    JSP是用來顯示資料的,前面我們在JSP中的HTML中嵌入java程式碼,與<%%>等混在一起,可讀性和可維護性都很差,而且使用java指令碼不便於程式碼重用,要實現比較複雜的顯示功能,也不方便,而JSP標籤和HTML程式碼很類似,使用JSP標籤顯得JSP整潔而乾淨,可讀性好,標籤能夠重複使用,所以就像我們上面說的,我們慢慢意識到不足,就自然在一步步改進,從使用JSP行為,使用EL,在使用標籤,都是為了一個目的,讓JSP更加完全,方便,只顯示資料,而不嵌入邏輯程式碼。這個涉及到了分層思想,後面說講解到。

  

二、JSTL標籤庫

    JSTL標籤庫中包括很多種類的標籤core、fmt、fn方法庫、sql標籤庫,使用JSTL標籤庫,需要用taglib指令匯入JSTL標籤庫      

    core標籤庫

      <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

      講解<c:out/>、<c:set/>、<c:remove/>、<c:if  test=""/>、<c:choose  />、<c:forTokens />、<c:catch /> 、<c:url  />、 <c:redirect />、<c:forEach/>、

    <c:out/>標籤

      out :將指定內容輸出到瀏覽器,預設支援el表示式,

      <c:out value="" default="" escapeXml />

          value:輸出的值,可以為EL表示式

          default:如果value屬性的值不存在,會輸出default屬性值

          excapeXml:如果為true,則會為value中的特殊字元進行轉義,預設為true

            

            

 

      <c:set/>和<c:remove/>標籤

            

          圖中只介紹set標籤的一種用法,其中var不能接受EL表示式,只能是字元,

          <c:set target="" property="" value="" />

            target:跟var類似,但是它能夠接受EL表示式,可以是一個物件,一個map等,和var進行互補

            property:物件中的屬性名 

            value:屬性賦值

            

 

          使用哪種set標籤,就看自己的需求了。

 

 

      <c:if  test=""/>標籤

            if條件語句

            

      <c:choose  />標籤

            

 

      <c:forTokens > 標籤

            將自定義字串,按照指定字元進行分割,並遍歷輸出

            items:自定義字串

            delims:指定字元

            var:遍歷的變數名。

            

      <c:catch > 標籤

            相當於try catch

            

            

            var:捕捉後的異常物件

 

       <c:forEach/>標籤

          增強的for迴圈,

          格式:

            <c:forEach items="" var="" /> 

            items:需要遍歷的物件

            var:用於存放遍歷的每一項內容,存放在page作用域,只能在迴圈體中使用

          1、items為字串或字串陣列

              為字串,直接輸出,為字串陣列,遍歷輸出

              

             

          2、items為list集合

              

 

          3、items為map集合

              

          4、普通for迴圈

              

              begin:從1開始

              end:到10結束

              step:每次加2

              var:迴圈的變數,

 

      <c:url  />標籤

          記得講session的時候,如果cookie禁用了,那麼只能將url進行重寫才能讓session繼續生效,而使用的api是response.encodeURL();就是將SESSIONID當作引數帶過來,而url標籤的作用就是實現類似功能

          <c:url value="" var="" scope="" />  就講解三個屬性

            value:要進行重寫的url

            var:如果寫了該變數,那麼就會將其重寫後的url存入page作用域中,如果scope沒有的話,預設就是page,否則以scope屬性值為準,在作用域範圍內就可以直接拿著這個變數使用了,如下面所展示的。

            scope:作用域範圍,預設是page,

              

            訪問後點選超連結

              沒有關閉cookie,所以不會將SESSIONID寫入url中 。

              

 

      <c:redirect />標籤

          

 

    

      <c:import />標籤

          類似於JSP的include行為和include指令,JSTL也提供了include功能的標籤<c:import/>,不過import標籤功能更強大,甚至可以把Internet上的網頁包含進來。

          <c:import url="http://www.baidu.com" charEncoding="utf-8"/>

          

          

 

      

     fmt標籤庫

        是一些輔助性功能標籤,就講解一個把,用的不多,等用到的時候在去詳細學

        <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

        標籤只有一個屬性,value  

         <fmt:requestEncoding/>設定編碼,

          相當於Java中的request.setCharacterEncoding("");

          post提交中文引數,使用<fmt:requestEncoding value="utf-8"/>來設定編碼,就不會出現中文亂碼了。

          get提交中文引數,該標籤就會失效,除非到TOMCAT的server.xml中,將URLEncoding設定為UTF-8(預設為ISO-8859-1)。

        <fmt:setLocale/>顯示所有地區的資料格式

        等等

    fn方法庫

        提供一些方法,函式,例如字串查詢,擷取之類。之所以不叫fn標籤庫而叫fn方法庫,因為與core,fmt標籤格式不一樣,並且必須在el表示式中使用

        格式:fn:methodName()的格式,比如,fn:contains()

        contains方法判斷是否包含指定的字串,相當於java裡String類的contains方法。

           fn:contains(String string1,String string2);

        containsIgnoreCase方法,判斷是否包含指定字串,忽略大小寫

           fn:contains(String string1,String string2)

        endsWith方法,判斷某字串是否以指定的引數結尾,

           fn:endWith(String string1,String string2);

        startsWith方法,判斷某字串是否以指定引數開始

           fn:startsWith(String string1,String string2);

        escapeXml方法,是否轉義字元

           fn:escapeXml(source);

        indexOf方法,查詢字串在另一個字串中第一次出現的位置

           fn:indexOf(String string1,String string2);

        split方法,將字串以指定引數為界分割成多個字串形成字串陣列

           。。

        join方法,與split方法相反,將字串陣列以引數為界連線成字串

        length方法,取字串,陣列,集合的長度

        等等

    SQL標籤庫

        JSP中直接可以運算元據庫,但是大多數時候我們都不會這樣用。。

 

    XML標籤庫

        為了方便地處理XML,

          

三、總結

    重點講解了一下JSTL中的core標籤庫,其實也就是一些控制流程的標籤,沒什麼思想,只要會用就行了,以後忘記了就回過頭來查檢視,最重要的是思想,這些死東西記錄一下就行了。

 

相關文章