JSTL使用入門

來源:互聯網
上載者:User

一、JSTL 簡介
JSP標準標記庫(JSP Standard Tag Library,JSTL)是一個實現Web應用程式中常見的通用功能的定製標記庫集,這些功能包括迭代和條件判斷、資料管理格式化、XML操作以及資料庫訪問。
JSTL 1.0 有四個定製標記庫:core、format、xml 和 sql.
1.core 標記庫提供了定製操作,通過限制了範圍的變數管理資料,以及執行頁面內容的迭代和條件操作。
2.format 標記庫定義了用來格式化資料(尤其是數字和日期)的操作。它還支援使用本地化資源束進行 JSP 頁面的國際化。
3.xml 庫包含一些標記,這些標記用來操作通過 XML 表示的資料。
4.sql 庫定義了用來查詢關聯式資料庫的操作。

二、運算式語言(Expression Language)
1.隱含對象(常用)
1)requestScope:與請求範圍屬性的名稱和值相關聯的 Map 類
2)sessionScope:與會話範圍屬性的名稱和值相關聯的 Map 類  
3)applicationScope:與Application 領域屬性名稱和值相關聯的 Map 類
4)pageScope:與頁面範圍屬性的名稱和值相關聯的 Map 類
5)param:按名稱儲存請求參數的主要值的 Map 類
6)paramValues:請求參數的所有值作為 String 數組儲存的 Map 類
2.EL 運算式的格式:
用貨幣符號($)定界,內容包括在花括弧({})中,eg:${value}
3.EL的存取器:使用點運算子(.)和方括弧運算子([]).
1)點運算子通常用於訪問對象的特性。例如,在運算式 ${user.firstName} 中,使用點運算子來訪問 user 標識符所引用對象的名為 firstName 的特性。
2)方括弧運算子用來檢索數組和集合的元素。在數組和有序集合的情況下,把要檢索的元素的下標放在方括弧中。對於實現 java.util.Map 介面的集合,方括弧運算子使用關聯的鍵尋找儲存在映射中的值。在方括弧中指定鍵,並將相應的值作為運算式的值返回。
3)點運算子和方括弧運算子可能實現某種程度的互換
4.EL運算子
1)算術運算子: +、-、*、/(或 div)和 %(或 mod)
2)關係運算子: ==(或 eq)、!=(或 ne)、<(或 lt)、>(或 gt)、<=(或 le)和 >=(或 ge)
3)邏輯運算子: &&(或 and)、||(或 or)和 !(或 not)
4)驗證運算子: empty
三、常用的JSTL core tag
1.set定義變數標記:定義限制了範圍的變數
Syntax:
1):<c:set value=”value” var=”varName” [scope=”{page|request|session|application}”]/>
2):<c:set var=”varName” [scope=”{page|request|session|application}”]> body content  </c:set>
2.out列印標記:顯示運算式的值,取代jsp scriptlet中的<%=variableName%>
Syntax:
1):<c:out value=”${variableNam}” [escapeXml=”{true|false}”]> default value </c:out>
2):<c:out value=”value” escapeXml=”{true|false}”] [default=”defaultValue”] />
3.forEach迴圈標記(for/while):提供指定的迴圈次數(適用syntax 2)或在某個資料結構(Collection/Array)(適用syntax 1)上進行迴圈的能力
Syntax:
1):<c:forEach [var=”varName”]  items=”collection”  [varStatus=”varStatusName”]   [begin=”begin”]  [end=”end”]  [step=”step”] > body content </c:forEach>
2):<c:forEach  [var=”varName”]  [varStatus=”varStatusName”] begin=”begin”  end=”end”  [step=”step”]> body content</c:forEach>
4.forTokens迴圈標記:允許對一個String值進行迴圈,使用所選擇的字元作為記號(token)之間的定界符
Syntax:
<c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]> body content </c:forTokens >
5.if條件求值標記(if):只在指定的測試條件為真時求具體的值,沒有”else”條件—要麼執行要麼忽略執行體
Syntax:
1):<c:if test=”testCondition” var=”varName” [scope=”{page|request|session|application}”]/>
2):<c:if test=”testCondition” [var=”varName”] [scope=”{page|request|session|application}”]>body content</c:if>
6.choose條件求值標記(switch-case/if-else):使用嵌套when標記(類似case)和otherwise標記(可選,類似default)
Syntax:
1):<c:choose> body content (<when> and <otherwise> subtags)</c:choose>
2):<c:when test=”testCondition”>body content</c:when>
3):<c:otherwise> conditional block</c:otherwise>
7.remove 刪除變數標記:用來刪除限制了範圍的變數的
Syntax:
<c:remove var=”varName” [scope=”{page|request|session|application}”]/>
四、開始使用JSTL
1.必需的檔案:
1)jar檔:jstl.jar,standard.jar.一般是放置在lib目錄下
2)tld檔案:c.tld,一般會是在WEB-INF目錄下,依tld檔案的位置修改web.xml文檔
3)一個web.xml的例子:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <taglib>
    <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
    <taglib-location>/WEB-INF/c.tld</taglib-location>
  </taglib>   
</web-app>
2.在JSP頁面中聲明標記庫:
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
五、參考資料
JSTL規範:http://java.sun.com/products/jsp/jstl/index.jsp
JSTL 1.0相關下載:http://www.apache.org/dist/jakarta/taglibs/standard-1.0/
JSTL1.0規範書:http://www.jcp.org/aboutJava/communityprocess/first/jsr052/index.html
運算式語言:http://www-900.ibm.com/developerWorks/cn/java/j-jstl0211/
六、綜合使用Core Tag的例子:
<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<html>
<head>
<title>
UseJSTLCoreTag
</title>
</head>
<body bgcolor="#ffffff">
<h1>
JSTL Core Tag
</h1>
taglib declare<br />
&lt;%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %&gt;
<table border="1">
  <tr>
    <td>Tag
    </td>
    <td>
      Example
    </td>
    <td>
      Result
    </td>
  </tr>
  <tr>
    <td>
      set
    </td>
    <td>
      &lt;c:set value="sessionVariableValue" scope="session" var="sessionVariable"/&gt;
    </td>
    <td>
      <c:set value="sessionVariableValue" scope="session" var="sessionVariable"/>&nbsp;
    </td>
  </tr>
  <tr>
    <td>out
    </td>
    <td>
      &lt;c:out value="${sessionScope.sessionVariable}" default="none" escapeXml="false"/&gt;   <br/>
      <br/>
      &lt;c:out value="${sessionScope['sessionVariable']}" default="none" escapeXml="false"/&gt;
    </td>
    <td>
      <c:out value="${sessionScope.sessionVariable}" default="none" escapeXml="false"/>  <br />
      <br />
      <c:out value="${sessionScope['sessionVariable']}" default="none" escapeXml="false"/>
    </td>
  </tr>
  <tr>
    <td>
      remove
    </td>
    <td>
      &lt;c:remove var="sessionVariableValue" scope="session"/&gt;
    </td>
    <td>
      <c:remove var="sessionVariable" scope="session"/>
    </td>
  </tr>
  <tr>
    <td colspan="2">
      after remove,&lt;c:out value="${sessionScope.sessionVariable}" default="none" escapeXml="false"/&gt;
    </td>
     <td>
      <c:out value="${sessionScope.sessionVariable}" default="none" escapeXml="false"/>
    </td>
  </tr>
  <tr>
    <td>
      forEach
    </td>
    <td>
      &lt;table&gt;
        &lt;tr&gt;
      &lt;c:forEach begin="1" end="10" step="1" var="loop"&gt;
        &lt;td&gt;
        &lt;c:out value="${loop}"/&gt;
        &lt;/td&gt;
      &lt;/c:forEach&gt;
        &lt;/tr&gt;
      &lt;/table&gt;
    </td>
    <td>
      <table>
        <tr>
      <c:forEach begin="1" end="10" step="1" var="loop">
        <td>
        <c:out value="${loop}"/>
        </td>
      </c:forEach>
        </tr>
      </table>
    </td>
  </tr>
  <tr>
    <td>
      forTokens
    </td>
    <td>
      &lt;c:forTokens var="token" delims="#,;4" items="0#1,2,34,5,6,7;8,9,A,B,C#,;4D" begin="3" end="10" step="2"&gt;
        &lt;c:out value="${token}"&gt;
        &lt;/c:out&gt;
      &lt;/c:forTokens&gt;
    </td>
    <td>
      <c:forTokens var="token" delims="#,;4" items="0#1,2,34,5,6#,7;8,9,A,B,C#,;4D" begin="3" end="10" step="2">
        <c:out value="${token}">
        </c:out>
      </c:forTokens>
    </td>
  </tr>
  <tr>
    <td>
      if
    </td>
    <td>
      &lt;c:if test="${sessionScope.sessionVariable=='none'}"&gt;
        There is not sessionVariable
      &lt;/c:if&gt;
      <br />
      &lt;c:if test="${sessionScope.sessionVariable!='none'}"&gt;
        The value of sessionVariable is not none
      &lt;/c:if&gt;
    </td>
    <td>
      <c:if test="${sessionScope.sessionVariable=='none'}">
        There is not sessionVariable
      </c:if>
      <c:if test="${sessionScope.sessionVariable!='none'}">
        The value of sessionVariable is not none
      </c:if>
    </td>
  </tr>
  <tr>
    <td>
      choose
    </td>
    <td>
      &lt;c:choose&gt;<br/>
        &lt;c:when test="${empty sessionScope.sessionVariable}"&gt;<br/>
          There is not sessionVariable
        &lt;/c:when&gt;<br/>
        &lt;c:otherwise&gt;<br/>
          The value of sessionVariable is not none
        &lt;/c:otherwise&gt;<br/>
      &lt;/c:choose&gt;<br/>
    </td>
    <td>
      <c:choose>
        <c:when test="${empty sessionScope.sessionVariable}">
          There is not sessionVariable
        </c:when>
        <c:otherwise>
          The value of sessionVariable is not none
        </c:otherwise>
      </c:choose>
    </td>
  </tr>
</table>
<form  method="post">
  <table>
    <c:forEach var="loop" begin="1" end="10" step="1">
      <tr>
        <td>
          <input type="checkbox" name="checkBox" value="<c:out value='${loop}' />"/><c:out value='${loop}' />
        </td>
      </tr>
    </c:forEach>
  </table>
  <input type="hidden" name="hiddenVar" value="hiddenValue"/>
  <input type="submit" value="submit"/>
</form>
&lt;c:out value="param.hiddenVar" default="none"/&gt;
<c:out value="${param.hiddenVar}" default="none"/>
<c:if test="${not empty param.hiddenVar}">
<p>
  after click submit button,display following:
</p>
you select:
<c:forEach var="checkboxValues" items="${paramValues.checkBox}" varStatus="status">
  <c:out value="${checkboxValues}"/>
  <c:if test="${!status.last}">,
  </c:if>
</c:forEach>
</c:if>
<P>請通過參看該頁源檔案的下列部分以體驗out標記的escapeXml屬性的作用。<br/>
<c:set var="tempVar" scope="page">
  <pre><&></pre> 
</c:set>
set escapeXml=false,output:
<c:out value="${tempVar}" escapeXml="false"/>
set escapeXml=true,output:
<c:out value="${tempVar}" escapeXml="true"/>
</p>
</body>
</html>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.