javaweb回顧第十篇JSTL,javaweb第十篇jstl

來源:互聯網
上載者:User

javaweb回顧第十篇JSTL,javaweb第十篇jstl

  前言:JSTL(JSP Standard Tag Library)JSP標準標籤庫。它的目的是為了簡化JSP的開發,如何沒有JSTL可能我們開發的時候就需要寫大量的自訂標籤,無疑會加大開發難度,有了JSTL以後我們就不需要寫那些普通的標籤(除非特殊的)這樣一來我們的開發效率也會提升,在這裡我主要講解一下http://java.sun.com/jsp/jstl/core標籤庫。

1:普通的標籤

JSTL普通標籤有<c:out>、<c:set>、<c:remove>、<c:catch>

1.1:<c:out>

首先為了使用JSTL標籤庫的內容我們先在maven項目中引入jar包,我使用的是

<dependency>            <groupId>javax.servlet</groupId>            <artifactId>jstl</artifactId>            <version>1.2</version></dependency>

如果我們在聲明一下jsp的指令元素<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>,如果就可以進行我們的開發。out無疑是輸出的意思,所以<c:out>主要作用就是輸出我們的變數值,和指令碼元素<%=%>有相同的功能。

<c:out>有三個屬性值,value,escapeXml,default。value就是我們要輸出的值,escapeXml是已轉換功能比喻<和&lt的轉換預設是true,default是預設值。下面我們來寫一個<c:out>。

   <%      int i=1+1;      request.setAttribute("i", i);    %><c:out value="${i}"></c:out>

如果運行我們就可以看到我們要的結果,有人說如果要是要標籤體怎麼辦,其實也很簡單,把value值置null即可,這個我們看下源碼

 public int doStartTag() throws JspException {      needBody = false;            // reset state related to 'default'      this.bodyContent = null;  // clean-up body (just in case container is pooling tag handlers)            try {    // print value if available; otherwise, try 'default'    if (value != null) {            out(pageContext, escapeXml, value);        return SKIP_BODY;    } else {        // if we don't have a 'default' attribute, just go to the body        if (def == null) {        needBody = true;        return EVAL_BODY_BUFFERED;        }

在部分源碼中我們可以看見只要Default和value值為null就可以展示標籤體內部的值了比喻<c:out value='<%=null%>'>no</c:out>。

1.2:<c:set>

這個主要目的是設定範圍變數的值或者JavaBean的屬性。在這裡我就不再展示源碼,大家有興趣可以自己查閱。以講解為主

<c:set>有5個屬性,分別是value、var、scope、target、 property,value是被計算的運算式,var計算結果的名稱,scope是JSP的範圍預設為page,target要設定屬性的JavaBean對象,最後一個是設定對象的屬性。下面用例子讓大家更加清晰

現在我要設定一個num=1+1的值並且儲存在Session中,那麼用<c:set>就是<c:set var="num" value="${1+1}" scope="session"></c:set>然後我們就可以引用這個值了

<c:out value="${num}"></c:out>。那麼如果是JavaBean對象呢我們就要用上target屬性了。如下

  <%        UserBean userBean = new UserBean();        pageContext.setAttribute("userBean", userBean);    %>    <c:set target="${userBean}" property="age" value="18">    </c:set>    <c:set target="${userBean}" property="userName" >張三</c:set>    <c:out value="${userBean.age}"></c:out>    <c:out value="${userBean.userName}"></c:out>
1.3:<c:remove/>

這個主要移除範圍變數,有2個屬性,var和scope。var要移除變數的名稱,scope是jsp的範圍,預設值是page。

比喻我要移除上面的userBean就是<c:remove var="userBean"  scope="session"/>意思就是移除Session中一個叫做userBean的屬性。

1.4:<c:catch>

 這個表示捕獲異常,其中有一個var屬性,表示把這個異常賦值給var。代碼如下

<c:catch var="exception">    <%    String userName="zhangsan";    %>    </c:catch>
<c:out value="${exception}"></c:out>
2:條件標籤

條件標籤包括<c:if>、<c:choose>、<c:when>、<c:otherwise>

2.1:<c:if>

這個意思很明顯就是實現java中if語句功能的。其中有三個屬性:test、var、scope。test表示測試的條件比喻(1>0),var表示測試結果匯出來的名稱,scope表示範圍。預設為page。例子如下

<c:if test="${1<2}" var="testName" scope="application"></c:if><c:out value="${testName}"></c:out>

所以我們開發的時候可以通過<c:if>來作為一個判斷語句,其他地方直接拿來用。

2.2:<c:choose>、<c:when>、<c:otherwise>

這個相當於Switch,case,Default。在我自訂標籤那篇提及過。其中<c:when>有一個屬性就是test是判斷的結果。舉個簡單例子如下

<c:choose>        <c:when test='${user}=="zhangsan"'>            <c:out value="張三"></c:out>        </c:when>        <c:when test='${user}=="lisi"'>    李四    </c:when>        <c:otherwise>    無匹配    </c:otherwise>
</c:choose>
3:迭代標籤

迭代標籤有2個一個是<c:forEach>,另一個是<c:forTokens>

3.1:<c:forEach>

這個主要針對包含多個對象集合進行迭代顯示。它有6個屬性,var、items、varStatus、begin、end、step。var表示迭代的對象,items表示要被迭代的集合對象,varStatus表示當前迭代對象的狀態,begin被迭代對象集合從哪個開始(預設是從第一個開始迭代),end表示被迭代對象集合從哪個結束(預設全部迭代完),step迭代的步長預設是1。

同樣舉個例子

ArrayList al = new ArrayList();        UserBean user1 = new UserBean("zhangsan", 25, "7808@outlook.com");        UserBean user2 = new UserBean("lisi", 15, "16455@qq.com");        UserBean user3 = new UserBean("wangwu", 35, "7808@outlook.com");        al.add(user1);        al.add(user2);        al.add(user3);<c:forEach var="userBean" items="<%=al%>" varStatus="status">            <tr>                <td><c:out value="${userBean.age}"></c:out></td>                <td>${userBean.userName}</td>                <td>${status.count}</td>                <td>${status.index}</td>                <td>${status.first}</td>                <td>${status.last}</td>            </tr>        </c:forEach>

我們看下結果

其中從結果我們可以看出varStatus的作用主要是判斷當前迭代對象的一個狀態,比statu.last表示判斷是否是最後一個對象。

3.2:<c:forTokens>

這個標籤主要針對字串,比喻String userNames="li;zhang;zhao"這個時候這個標籤就可以迭代把他們輸出來。這個屬性和上面標籤一樣,但是多了一個delims表示分割符。

String str="張三,李四,王五,";<c:forTokens items="<%=str%>" delims="," var="name">            <td><c:out value="${name}"></c:out></td></c:forTokens>
4:URL相關的標籤

Url標籤包含<c:import>、<c:url>、<c:redirect>、<c:param>

4.1:<c:param>

是作為一個URL請求添加的參數,主要和<c:url>,<c:redirect>等配合使用

4.2:<c:url>

可以用<c:url>來定義一個URL連結在另一個url出引用。有4個屬性value、var、context、scope。value是要處理的url,var是要 匯入url範圍變數的名稱,context是指定內容相關的名字scope是JSP範圍預設page。同樣舉個例子

比喻我先定義一個url<c:url value="http://www.cnblogs.com/cate/java/" var="myurl" scope="session"></url>,然後我就可以直接引用了<a href='<c:out value="${myurl}"></c:out>'>部落格園</a>,如果我要加請求參數怎麼辦呢,就要把上面的url改成

<c:url value="http://www.cnblogs.com/cate/java/" var="myurl" scope="session">    <c:param name="userName" value="zhangsan"></c:param>    <c:param name="password" value="123456"></c:param>
</c:url>

我們運行看下結果是否把請求參數加上了

4.3:<c:redirect>

這個表示重新導向,有2個屬性,一個是url表示定向到哪個地址,另一個則是content表示內容相關的路徑。這個很簡單,寫法如下

<c:redirect url="${myurl}"></c:redirect>當然也可以加上請求的參數

<c:redirect url="${myurl}">
<c:param name="userName" value="zhangsan"></c:param>
</c:redirect>

4.4:<c:import>

這個表示要匯入的資源,可以是一張照片,也可以是一個網站,(不僅可以匯入本應用程式的資源也可以匯入其他網站的資源)

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.