程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> javaweb回顧第十篇JSTL,javaweb第十篇jstl

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

編輯:JAVA綜合教程

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, "[email protected]");
        UserBean user2 = new UserBean("lisi", 15, "[email protected]");
        UserBean user3 = new UserBean("wangwu", 35, "[email protected]");
        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>

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved