JavaWeb:JSP標准標簽庫


JavaWeb:JSP標准標簽庫

說明

什么是JSTL?

  JSP標准標簽庫(JavaServer Pages Standard Tag Library,JSTL)是一個定制的標簽庫的集合,用來解決像遍歷map或者集合、條件測試、XML處理,甚至數據庫訪問和數據操作等常見的問題。

JSTL庫的安裝

下載地址:
  • 官方下載地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
  • 菜鳥教程網下載地址:jakarta-taglibs-standard-1.1.2.zip
安裝
  將jakarta-taglibs-standard-1.1.2/lib/下的兩個jar文件:standard.jar和jstl.jar文件拷貝到/WEB-INF/lib/下並添加至環境變量。
  然后在IDEA中加入tld約束文件: 

  

  
  同樣的操作加入其余四個tld約束文件:

區域 URI 前綴
XML http://java.sun.com/jsp/jstl/xml x
國際化 http://java.sun.com/jsp/jstl/fmt fmt
數據庫 http://java.sun.com/jsp/jstl/sql sql
函數 http://java.sun.com/jsp/jstl/functions fn


在JSP中使用JSTL

  在JSP頁面中引用JSTL庫,必須在在JSP頁面的開頭做以下聲明:

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core">
  <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml">
  <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt">
  <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql">
  <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions">

說明:

  前綴可以使任意的,但是為了更加規范,建議采用如此簡寫形式

一般行為

<c:out>標簽

說明:
  out標簽可以將一個表達式的結果打印到網頁上,這個表達式可以是基於<%=?%>的傳統形式,也可以是EL表達式
演示:

 1 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core">
 2 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 3 <html>
 4   <head>
 5     <title>$Title$</title>
 6   </head>
 7   <body>
 8     <%--默認值有兩種表示方式--%>
10     <c:out value="${param.username}">
11       默認值
12     </c:out>
13     
14     <c:out value="${param.username}" default="默認值"/>
15   </body>
16 </html>

<c:set>標簽

說明:

  set標簽具有以下三個作用:
  1.為String類型的命名變量設定值。
  2.如果命名變量為JavaBean,那么為這個JavaBean對象的特定屬性設定值。
  3.如果命名變量為Map類型,那么為這個Map對象中的特定Key設定值。
演示:
  1.為String類型的命名變量設定值。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <c:set var="命名變量的名字" value="哈哈哈" scope="session"/>
    <c:set var="user" value="Tom" scope="session"/>
    <c:out value="${sessionScope.user}" default="unknow"/>
</body>
</html>


  2.如果命名變量為JavaBean,那么為這個JavaBean對象的特定屬性設定值。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:useBean id="product" scope="session" class="domain.Product"/>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <c:set target="${product}" property="name" value="白象方便面"/>
    <c:out value="${product.name}" default="unknow"/>
</body>
</html>

  3.如果命名變量為Map類型,那么為這個Map對象中的特定Key設定值。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:useBean id="hashmap" class="java.util.HashMap" scope="request"/>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <c:set target="${hashmap}" property="1" value="Monday"/>
    <c:set target="${hashmap}" property="2" value="Tuesday"/>
    <c:set target="${hashmap}" property="3" value="Wednesday"/>
    <c:out value="${hashmap.get('1')}" default="unknow"/>
</body>
</html>

<c:remove>標簽

說明:
  reomve標簽用於刪除特定范圍內的命名變量。
演示:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:useBean id="hashmap" class="java.util.HashMap" scope="request"/>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <c:set target="${hashmap}" property="1" value="Monday"/>
    <c:remove var="hashmap" scope="request"/>
    <c:out value="${hashmap.get('1')}" default="unknow"/>
</body>
</html>

條件行為

<c:if>標簽

說明:
  用於實現Java語言中的if語句的功能。
演示:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--測試結果將保存在result變量中--%>
    <c:if test="${param.username=='Tom'}" var="result" scope="request">
        <%--如果測試成功,則會輸出true--%>
        <c:out value="${result}"/>
    </c:if>
</body>
</html>

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

說明:
  <c:choose>、<c:when>、<c:otherwise>三個標簽一起連用,可以實現Java語言中的if-else語句的功能。
演示:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<c:choose>
    <c:when test="${empty param.username}">
        Noknown user
    </c:when>
    <c:when test="${param.username=='Tom'}">
        Tom
    </c:when>
    <c:otherwise>
        Other
    </c:otherwise>
</c:choose>
</body>
</html>

迭代標簽

<c:forEach標簽>

說明:
  forEach標簽用於遍歷集合中的對象,並且能重復執行標簽主體。
演示:
  
1.基本用法:

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        List books = new ArrayList();
        books.add("JavaWeb程序設計");
        books.add("Java程序設計");
        books.add("JSP程序設計");
    %>
    <c:forEach var="book" items="<%=books%>">
        ${book} &nbsp;
    </c:forEach>
</body>
</html>

  2.foreach的varStatus屬性
  varStatus屬性用於設定一個LoopTagStatus類型的命名變量,它位於NESTED范圍,這個命名變量包含了從集合中取出的當前元素的狀態信息。
  • count 當前元素在集合中的序號,從1開始計數。
  • index 當前元素在集合中的索引,從0開始計數。
  • first 當前元素是否時集合中的第一個元素
  • last 當前元素是否是集合中的最后一個元素

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        List books = new ArrayList();
        books.add("JavaWeb程序設計");
        books.add("Java程序設計");
        books.add("JSP程序設計");
    %>
    <c:forEach var="book" items="<%=books%>" varStatus="status">
       ${status.count} &nbsp;${status.index}&nbsp;${status.first}&nbsp;${status.last}&nbsp;${book}<br>
    </c:forEach>
</body>
</html>

  3.begin、end、step
  begin、end、step分別指定循環的起始索引、結束索引和步長。

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        List books = new ArrayList();
        books.add("JavaWeb程序設計");
        books.add("Java程序設計");
        books.add("JSP程序設計");
    %>
    <c:forEach var="book" items="<%=books%>" varStatus="status" begin="1" end="2" step="1">
       ${status.count} &nbsp;${status.index}&nbsp;${status.first}&nbsp;${status.last}&nbsp;${book}<br>
    </c:forEach>
</body>
</html>


  
4.可以遍歷的集合
 
 forEach可以遍歷的集合包括:
  • Set、List、Map、Iterator、Enumeration接口的實現類。

<%@ page import="java.util.HashMap" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        HashMap hashMap = new HashMap();
        hashMap.put("one","Monday");
        hashMap.put("two","Tuesday");
        hashMap.put("three","Wednesday");

    %>
    <c:forEach var="week" items="<%=hashMap%>">
      ${week.key} &nbsp;${week.value}<br>
    </c:forEach>
</body>
</html>

• Java數組
• 以逗號隔開的字符串

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
String names = "Tom,Mike,Juice";

    %>
    <c:forEach var="name" items="<%=names%>">
        ${name}<br>
    </c:forEach>
</body>
</html>

<c:forTokens>標簽

說明:
  forTokens標簽用於遍歷字符串中用特定分隔符分割的子字符串,並且能重復執行標簽主體。
演示:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
String names = "Tom|Mike|Juice";

    %>
    <c:forTokens var="name" items="<%=names%>" delims="|">
        ${name}<br>
    </c:forTokens>
</body>
</html>

未完待續...





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM