JSTL標籤庫

1、JSTL 簡介

1JavaServer Pages Standard Tag Library

2JCPJava Community Process)指定標準

3提供給 Java Web 開發人員一個標準通用的標籤函數庫

4和 EL 配合來取代傳統直接在頁面上嵌入 Java 程序(Scripting)的做法,以提高程序可讀性、維護性和方便性

2、JSTL1.1安裝

1下載

JSTL 主要由Apache組織的Jakarta Project 實現

http://tomcat.apache.org/taglibs/standard/

容器必須支持Servlet 2.4 JSP 2.0 以上版本

JavaEE1.4 

2安裝

解壓縮後將lib 中的jstl.jarstandard.jar 複製到WEB應用程序的WEB-INF\lib 

3、JSTL標籤庫

1核心標籤庫 (core)  --- c

2國際化標籤 fmt

3數據庫標籤 sql --Servlet

4XML標籤  xml

5JSTL函數(EL函數) el

4、<c:out>標籤

<c:out> 標籤用於輸出一段文本內容到pageContext對象當前保存的“out”對象中。

       1.c:out 輸出內容到瀏覽器端

輸出固定值

<c:out value="Hello c out~"/>

輸出變量

<c:out value="${m}"/>

轉義html,默認爲轉義,可以設置escapeXml屬性爲false,禁止轉義

<c:out value="<a href='#'>link</a>" escapeXml="false"/>

允許輸出默認值,如果給定值不存在,輸出默認值

<c:out value="${city}" default="北京"/>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

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

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

  </head>

  <body>

   <hr><h1>進行html轉義輸出</h1>

   <a href="#">xxx</a>

   <c:out value="<a href='#'>xxx</a>" escapeXml="true"></c:out>

   ${fn:escapeXml("<a href='#'>xxx</a>") }

  

   <hr><h1>輸出默認值</h1>

   <%

   String age = "100";

   pageContext.setAttribute("age",age);

    %>

   <c:out value="${age}" default="99"></c:out>

   ${empty age ? 99 : age }

  

   <hr><h1>輸出變量</h1>

   <%

   String name = "itheima";

   pageContext.setAttribute("name",name);

    %>

    <c:out value="${name}"></c:out>

    ${name }

  

   <hr><h1>輸出常量</h1>

   <c:out value="123456"></c:out>

   ${123456 }

  </body>

</html>

5、<c:set>標籤

<c:set>標籤用於把某一個對象存在指定的域範圍內,或者設置Web域中的java.util.Map類型的屬性對象或JavaBean類型的屬性對象的屬性。  

2.c:set 設置值到四個域,設置四個範圍中的java對象的屬性性

在指定域中增加、修改屬性

<c:set var="name" value="value" scope="page"/>

設置一個保存在四個範圍的java對象的屬性值,cset不能設置對象進域,但是可以更改域中對象的屬性

<c:set targe="${person}" property="name" value="lisi"/>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%@page import="com.itheima.domain.Person"%>

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

  </head>

  <body>

   <hr><h1>設置JavaBean的屬性</h1>

   <%

   Person p = new Person();

   pageContext.setAttribute("p",p);

    %>

   <c:set target="${p}" property="name" value="小昭"></c:set>

   ${p.name }

   <c:set target="${p}" property="name" value="趙敏"></c:set>

   ${p.name }

  

   <hr><h1>向指定的Map中增加/修改屬性</h1>

   <%

   Map map = new HashMap();

   map.put("name","張無忌");

   map.put("age",19);

   pageContext.setAttribute("map",map);

    %>

   <c:set target="${map}" property="sex" value=""></c:set>

   ${map.sex }

   <c:set target="${map}" property="sex" value=""></c:set>

   ${map.sex }

  

   <hr><h1>向指定的域中增加/修改屬性</h1>

   <c:set var="name" scope="page" value="張三丰"></c:set>

   ${name }

   <c:set var="name" scope="page" value="張翠山"></c:set>

   ${name }

  </body>

</html>

6、<c:remove>標籤 

<c:remove>標籤用於刪除各種Web域中的屬性。

其語法格式如下:

<c:remove var="varName" 

[scope="{page|request|session|application}"] />

3.c:remove用來刪除四個域中的值

<c:remove var="age" scope="page"/>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

  </head>

  <body>

  <hr><h1>cremove可以刪除各個域中的屬性,如果不寫scope屬性,cremove的時候會將四個域中指定名稱的屬性都刪掉</h1>

   <%

   pageContext.setAttribute("room","310");

request.setAttribute("room","311");

    %>

    ${room }${requestScope.room }

    <c:remove var="room"/>

    ${room }

  </body>

</html>

7、<c:catch>標籤

1<c:catch>標籤用於捕獲嵌套在標籤體中的內容拋出的異常,其語法格式如下:<c:catch [var="varName"]>nested actions</c:catch>

2var屬性用於標識<c:catch>標籤捕獲的異常對象,它將保存在page這個Web域中。 

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

<%@ page contentType="text/html;charset=gb2312" %>

<c:catch var="myex“ >

<%

10/0;

%>

</c:catch>

異常:<c:out value="${myex}" />  ${myex}<br />

異常 myex.getMessage<c:out value="${myex.message}" /><br />

異常 myex.getCause<c:out value="${myex.cause}" /><br />

異常 myex.getStackTrace<c:out value="${myex.stackTrace}" />

4.c:catch 用來捕獲程序的異常,將捕獲到的異常對象保存在page域中

<c:catch var="e">

<%

String s = null;

s.charAt(1);

%>

</c:catch>

${e.message}

8、<c:if>標籤

<c:if test=“”>標籤可以構造簡單的“if-then”結構的條件表達式

5.c:if 用來取代頁面中if語句,請記住,沒有c:else,想要寫else,只能再寫個c:if,然後條件是反的

<c:if test="${n>5}"></c:if>  

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

  </head>

  <body>

   <c:if test="${1 == 1}" var="flag" scope="page">

   1確實等於1

   </c:if>

   ${pageScope.flag }

  

   <c:if test="${1 != 1}">

   你確定嗎?

   </c:if>

  </body>

</html>

9、<c:choose>標籤 

<c:choose>標籤用於指定多個條件選擇的組合邊界,它必須與<c:when><c:otherwise>標籤一起使用。使用<c:choose><c:when><c:otherwise>三個標籤,可以構造類似 “if-else if-else” 的複雜條件判斷結構。

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

<%@ page contentType="text/html;charset=gb2312" %>

<c:set value="${param.count}" var="count“  /> pageContext(count,2)

<c:choose>

<c:when test="${count == 0}">

對不起,沒有符合您要求的記錄。

</c:when>

<c:otherwise>

符合您要求的記錄共有${count}.

</c:otherwise>

</c:choose>

6.c:choose c:when c:otherwise 一起使用,取代if elseif else 或 swich case

<c:choose>

<c:when test="${weekday==1}">

星期一

</c:when>

<c:when test="${weekday==1}">

星期二

</c:when>

<c:when test="${weekday==1}">

星期三

</c:when>

<c:otherwise>

輸入無效

</c:otherwise>

</c:choose>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

  </head>

  <body>

  <%

   pageContext.setAttribute("num",99);

   %>

   <c:choose>

   <c:when test="${num>100}">

   num 大於100

   </c:when>

   <c:when test="${num<100}">

   num 小於 100

   </c:when>

   <c:when test="${num == 100}">

   num 等於 100

   </c:when>

   <c:otherwise>

   num 是一個數字嗎?

   </c:otherwise>

   </c:choose>

  </body>

</html>

10、<c:forEach>標籤

語法1

<c:forEach [var="varName"] 

items="collection" [varStatus="varStatusName"] 

[begin="begin"]

[end="end"] 

[step="step"]>

//Body內容

</c:forEach>

public int getIndex()返回當前迭代的索引號

public java.lang.Integer getStep()返回爲標籤設置的step屬性的值,如果沒有設置step屬性則返回null

public boolean isFirst()返回當前是否是第一次迭代操作

public boolean isLast()返回當前是否是最後一次迭代操作

數組的遍歷:將arr數組中的每個元素取出,保存到page域的i

<c:forEach var="i" items="${arr}">

${i}

</c:forEach>

List遍歷

<c:forEach var="e" items="${list}">

${e}

</forEach>

Map遍歷

<c:forEach var="entry" items="map">

${entry.key}  ${entry.value}

</c:forEach>

控制指定次數的循環:1開始到10結束,步長爲1,保存到i,並求和

<c:forEach begin="1" end="10" step="1" var="i">

<c:set var="sum" value="${sum + i}">

</c:forEach>

<%

int atts[] = {1,2,3,4,5,6,7,8,9,10};

request.setAttribute("atts", atts);

%>

<c:forEach items="${atts}" var="item" 

begin="0" end="9" step="1" >

${item}</br>

</c:forEach>

語法2

<c:forEach [var="varName"] 

[varStatus="varStatusName"] 

begin="begin" 

end="end"

[step="step"]>

//Body內容

</c:forEach>

<c:forEach begin="1" end="10" var="item" >

${item}</br>

</c:forEach>

11varStatus屬性

用來存放現在指到之成員的相關信息

------------------------------------------------------------------------------------------------

<c:forEach begin="10" end="100" step="2" var="i" varStatus="status">

<c:if test="${status.count}%3 == 0">

<font color="red">${i}</font>

</c:if>

<c:if test="${status.count}%3 != 0">

<font color="blue">${i}</font>

</c:if>

</c:forEach>

<c:forEach var="i" begin="100" end="200" step="5" varStatus="status"> 

<c:if test="${status.first}"> 

begin:<c:out value="${status.begin}">begin</c:out>     

end:<c:out value="${status.end}">end</c:out>     

step:<c:out value="${status.step}">step</c:out>

<br/> 

sequence: 

</c:if>

<c:out value="${i}"/> 

<c:if test="${status.last}"> 

<br/>There are 

<c:out value="${status.count}"/> numbers in the list. 

</c:if> 

</c:forEach> 

----------------------------------------------------------------------------------------------

<%

Map<String,String> map = new HashMap<String,String>();

map.put("001","aaa");

map.put("002","bbb");

map.put("003","ccc");

request.setAttribute("map",map);

%>

<c:forEach var="m" items="${requestScope.map}">

${m.key } , ${m.value } <br/>

</c:forEach>

----------------------------------------------------------------------------------------------

<%

Map<String,String> map = new HashMap<String,String>();

map.put("001","aaa");

map.put("002","bbb");

map.put("003","ccc");

request.setAttribute("map",map);

%>

<c:forEach var="m" items="${requestScope.map}">

${m.key } , ${m.value } <br/>

</c:forEach>

實驗:遍歷10100的偶數,如果數字所在的位置是3的倍數,顯示成紅色

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

  </head>

  <body>

   <br><hr><h1>實驗:遍歷10100的偶數,如果數字所在的位置是3的倍數,顯示成紅色</h1>

   <c:forEach begin="10" end="100" step="2" var="i" varStatus="status">

   <c:if test="${status.count%3 == 0}">

   <font color="red" >${i }</font>

   </c:if>

   <c:if test="${status.count%3 != 0}">

   <font color="blue" >${i }</font>

   </c:if>

   </c:forEach>

  

   <br><hr><h1>控制重複執行標籤體</h1>

   <c:forEach begin="0" end="10" step="2" var="i" varStatus="status">

   ${i }

   </c:forEach>

  

  

   <br><hr><h1>迭代Map中的元素</h1>

<%

Map map = new HashMap();

map.put("name","楊過");

map.put("age",17);

pageContext.setAttribute("map",map);

 %>

 <c:forEach items="${map}" var="entry">

  ${entry.key }:${entry.value }

 </c:forEach>

  

   <hr><h1>迭代List中的元素</h1>

   <%

   List list = new ArrayList();

   list.add("天山童老");

   list.add("李秋水");

   list.add("無崖子");

   pageContext.setAttribute("list",list);

    %>

    <c:forEach items="${list }" var="name">

     ${name }

    </c:forEach>

  

   <hr><h1>迭代數組中的元素</h1>

   <%

   String [] strs = {"王語嫣","段譽","虛竹","喬峯"};

   pageContext.setAttribute("strs",strs);

    %>

<c:forEach items="${strs}" var="str">

${str }

</c:forEach>

  </body>

</html>

 12<c:forTokens>

用來瀏覽一字符串中所有的成員,其成員是由定義符號所分隔的

8.c:forTokens 切割字符串(複習 StiringTokenize類)

<c:forTokens items="${s}" delims="," var="e">

${e}

</c:forTokens>

<c:forTokens 

items="stringOfTokens" 

delims="delimiters" 

[var="varName"]

[varStatus="varStatusName"] 

[begin="begin"] 

[end="end"] 

[step="step"]>

  //body內容

</c:forTokens>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

  </head>

  <body>

  切割字符串

   <c:forTokens items="www.itheima.com" delims="." var="str">

   ${str } <br>

   </c:forTokens>

  </body>

</html>

13、<c:param>標籤 

(1)在JSP頁面進行URL的相關操作時,經常要在URL地址後面附加一些參數。<c:param>標籤可以嵌套在<c:import><c:url><c:redirect>標籤內,爲這些標籤所使用的URL地址附加參數。

(2)<c:param>標籤在爲一個URL地址附加參數時,將自動對參數值進行URL編碼,例如,如果傳遞的參數值爲“中國”,則將其轉換爲“%d6%d0%b9%fa”後再附加到URL地址後面,這也就是使用<c:param>標籤的最大好處。 

(3)示例:<c:param name="name" value="value" />

14、<c:import> 標籤

引入1.jsp的輸出,拼接到當前jsp的輸出中

<c:import url="/1.jsp" context="/day08"/>

引入1.jsp的輸出,保存到scope域中以var指定名爲名稱的屬性中

<c:improt url="/1.jsp" context="/day08" var="content" scope="page"/>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

  </head>

  <body>

   cimport用來進行頁面包含操作<br>

   <c:import url="/index.jsp" var="index" scope="page"></c:import>

   ${index }

  </body>

</html>

15<c:url>標籤 

<c:url>標籤用於在JSP頁面中構造一個URL地址,其主要目的是實現URL重寫。URL重寫就是將會話標識號以參數形式附加在URL地址後面 

<c:url value="/index.jsp"context="/day04" var="myurl2" scope="page">

<c:param name="username" value="張三"></c:param>

</c:url>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

  </head>

  <body>

  <hr><h1>java方式實現URL重寫</h1>

  <%

   String url = "/Day07/index.jsp";

   url = response.encodeURL(url);

   %>

   <%= url %>

   

  <hr><h1>curl標籤實現URL重寫</h1>

  <c:url context="/Day07" value="/index.jsp" var="url" scope="page">

   <c:param name="name" value="+"></c:param>

  </c:url>

  ${url }

  <a href="${url }">xxx</a>

  </body>

</html>

16<c:redirect>標籤

<c:redirect>標籤用於實現請求重定向

<c:redirect url="/index.jsp" context="/day08"/>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

  </head>

  <body>

   <c:redirect url="/index.jsp" context="${pageContext.request.contextPath}"></c:redirect>

  </body>

</html>

發佈了56 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章