JavaWeb之JSTL標簽庫

title: JavaWeb之JSTL標簽庫
tags: JavaWeb JSTL
categories: JavaWeb JSTL


之前學習EL表達式和JSTL標簽庫的時候只將EL的知識總結(jié)后上傳到了blog上彼妻,沒抽時間將JSTL的知識總結(jié)出來嫌佑,如今做項目時在JSP頁面中涉及到太多JSTL標簽的語法豆茫,于是便抽時間將這篇博客補上。


首先需要說明的是: 此博客參考孤傲蒼狼這位技術(shù)大牛對JSTL標簽的理解屋摇,寫的非常通俗易懂揩魂。原文鏈接: http://www.cnblogs.com/xdp-gacl/p/3943390.html

1.JSTL標簽庫介紹

JSTL標簽庫的使用是為彌補html標簽的不足,規(guī)范自定義標簽的使用而誕生的炮温。使用JSLT標簽的目的就是不希望在jsp頁面中出現(xiàn)java邏輯代碼火脉。JSTL也是對EL表達式的擴展(也就是說JSTL依賴EL),是一門標簽語言倦挂。JSTL標簽使用起來非常方便,它與JSP動作標簽一樣犯戏,只不過它不是JSP內(nèi)置的標簽,需要我們自己導(dǎo)包,一定要指定標簽庫岸裙。

如果你使用MyEclipse開發(fā)JavaWeb,那么把項目發(fā)布到Tomcat時拟糕,你會發(fā)現(xiàn)MyEclipse在lib目錄下自動存放了JSTL的Jar包。如果你使用其他IDE,那么你需要手動導(dǎo)入這個JSTL的Jar包:jstl-1.2.jar褂微。

2.JSTL標簽庫的分類

  • core:核心標簽庫(用得最多)
  • fmt:國際化標簽庫(只需學習兩個式撼,日期和數(shù)字)
  • sql:數(shù)據(jù)庫標簽庫(過時了,不需要學習)
  • xml:xml標簽庫(過時了美浦,不需要學習)

3.核心標簽庫使用說明

JSTL的核心標簽庫標簽共13個,使用這些標簽?zāi)軌蛲瓿蒍SP頁面的基本功能,減少編碼工作。

從功能上可以分為4類:表達式控制標簽访递、流程控制標簽旱函、循環(huán)標簽券腔、URL操作標簽。

  • (1) 表達式控制標簽:out標簽诗鸭、set標簽、remove標簽请唱、catch標簽
  • (2) 流程控制標簽:if標簽、choose標簽、when標簽甚亭、otherwise標簽
  • (3) 循環(huán)標簽:forEach標簽、forTokens標簽
  • (4) URL操作標簽

在JSP頁面引入核心標簽庫的代碼為:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

3.1表達式控制標簽——out標簽使用

3.1.1<c:out>標簽的功能

<c:out>標簽主要是用來輸出數(shù)據(jù)對象(字符串暇唾、表達式)的內(nèi)容或結(jié)果宫仗。

在使用Java腳本輸出時常使用的方式為:<% out.println("字符串"); %>或者<%=表達式 %>,在web開發(fā)中梭姓,為了避免暴露邏輯代碼會盡量減少頁面中的Java腳本铸题,使用<c:out>標簽就可以實現(xiàn)以上功能探熔。

<c:out value="字符串"/>或者<c:out value="EL表達式"/>  

JSTL的使用是和EL表達式分不開的其垄,EL表達式雖然可以直接將結(jié)果返回給頁面臂外,但有時得到的結(jié)果為空橘霎,<c:out>有特定的結(jié)果處理功能蔫浆,EL的單獨使用會降低程序的易讀性,建議把EL的結(jié)果輸入放入<c:out>標簽中姐叁。

3.1.2<c:out>標簽的語法

<c:out>標簽的使用有兩種語法格式:

  • 語法1:<c:out value="要顯示的數(shù)據(jù)對象" [escapeXml="true|false"][default="默認值"]/>
  • 語法2:<c:out value="要顯示的數(shù)據(jù)對象" [escapeXml="true|false"]>默認值</c:out>

這兩種方式?jīng)]有本質(zhì)的區(qū)別瓦盛,只是格式上的差別。[escapeXml="true|false"][defult="默認值"]這些使用[]屬性表示是不是必須的七蜘。

3.1.3<c:out>標簽的屬性

屬性名 是否支持EL 屬性類型 屬性描述
Value true Object 指定要輸出的內(nèi)容
escapeXml true Boolean 指定是否將>、<碧库、&驹溃、' 灵临、"等特殊字符進行HTML編碼轉(zhuǎn)換后再進行輸出舔痪。默認值為true。
default true Object 指定如果value屬性的值為null時所輸出的默認值

3.1.4<c:out>標簽的使用范例

<%@ page language="java" pageEncoding="UTF-8"%>
<%--引入JSTL核心標簽庫 --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML>
<html>
<head>
<title>JSTL: --表達式控制標簽“out”標簽的使用</title>
</head>

<body>
<h3><c:out value="下面的代碼演示了c:out的使用搀突,以及在不同屬性值狀態(tài)下的結(jié)果。"/></h3>
<hr/>
<ul>
    <%--(1)直接輸出了一個字符串。 --%>
    <li>(1)<c:out value="JSTL的out標簽的使用" /></li>
    
    <li>(2)<c:out value="<a  /></li>
    <%--escapeXml="false"表示value值中的html標簽不進行轉(zhuǎn)義,而是直接輸出 --%>
    <li>(3)<c:out value="<a  escapeXml="false"/></li>
    
    <%--(4)字符串中有轉(zhuǎn)義字符斟薇,但在默認情況下沒有轉(zhuǎn)換症革。 --%>
    <li>(4)<c:out value="&lt未使用字符轉(zhuǎn)義&gt" /></li>
    <%--(5)使用了轉(zhuǎn)義字符&lt和&gt分別轉(zhuǎn)換成<和>符號袖牙。 --%>
    <li>(5)<c:out value="&lt使用字符轉(zhuǎn)義&gt" escapeXml="false"></c:out></li>
    
    <%--(6)設(shè)定了默認值禁添,從EL表達式${null}得到空值,所以直接輸出設(shè)定的默認值。 --%>
    <li>(6)<c:out value="${null}">使用了默認值</c:out></li>
    <%--(7)未設(shè)定默認值,輸出結(jié)果為空台猴。 --%>
    <li>(7)<c:out value="${null}"></c:out></li>
    
    <%--(8)設(shè)定了默認值朽合,從EL表達式${null}得到空值,所以直接輸出設(shè)定的默認值饱狂。 --%>
    <li>(8)<c:out value="${null}" default="默認值"/></li>
    <%--(9)未設(shè)定默認值曹步,輸出結(jié)果為空。 --%>
    <li>(9)<c:out value="${null}"/></li>
</ul>
</body>
</html>

運行結(jié)果如下:

image

3.2表達式控制標簽——set標簽的使用

3.2.1<c:set>標簽的功能

<c:set>標簽用于把某一個對象存在指定的域范圍內(nèi)休讳,或者將某一個對象存儲到Map或者JavaBean對象中讲婚。

3.2.2<c:set>標簽的語法

<c:set>標簽的編寫共有4種語法格式。

  • 語法1:存值俊柔,把一個值放在指定的域范圍內(nèi).<c:set value=”值1” var=”name1” [scope=”page|request|session|application”]/>

含義:把一個變量名為name1值為“值1”的變量存儲在指定的scope范圍內(nèi)筹麸。

  • 語法2:<c:set var=”name2” [scope=”page|request|session|application”]>值2</c:set>

含義:把一個變量名為name2,值為值2的變量存儲在指定的scope范圍內(nèi)雏婶。

  • 語法3: <c:set value=”值3” target=”JavaBean對象” property=”屬性名”/>

含義:把一個值為“值3”賦值給指定的JavaBean的屬性名物赶。相當與setter()方法。

  • 語法4: <c:set target=”JavaBean對象” property=”屬性名”>值4</c:set>

含義:把一個值4賦值給指定的JavaBean的屬性名留晚。

從功能上分語法1和語法2酵紫、語法3和語法4的效果是一樣的,只是把value值放置的位置不同错维,至于使用那個根據(jù)個人的喜愛奖地,語法1和語法2是向scope范圍內(nèi)存儲一個值,語法3和語法4是給指定的JavaBean賦值赋焕。

3.2.3<c:set>標簽的屬性

屬性名 是否支持EL 屬性類型 屬性描述
Value true Object 用于指定屬性值
var false String 用于指定要設(shè)置的Web域?qū)傩缘拿Q
scope false String 用于指定屬性所在的Web域
target true Object 用于指定要設(shè)置屬性的對象参歹,這個對象必須是JavaBean對象或java.util.Map對象
property true string 用于指定當前要為對象設(shè)置的屬性名稱

3.2.4<c:set>標簽的使用范例

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--引入JSTL核心標簽庫 --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%--使用JSP的指令元素指定要使用的JavaBean --%>
<jsp:useBean id="person" class="javabean.Person"/>
<%--負責實例化Bean,id指定實例化后的對象名宏邮,可以通過${person}得到person在內(nèi)存中的值(或者使用person.toString()方法)泽示。 --%>
<!DOCTYPE HTML>
<html>
<head>

<title>JSTL: --表達式控制標簽“set”標簽的使用</title>

</head>

<body>
<h3>代碼給出了給指定scope范圍賦值的示例。</h3>
<ul>
    <%--通過<c:set>標簽將data1的值放入page范圍中蜜氨。--%>
    <li>把一個值放入page域中:<c:set var="data1" value="xdp" scope="page"/></li>
    <%--使用EL表達式從pageScope得到data1的值械筛。--%>
    <li>從page域中得到值:${pageScope.data1}</li>
    
    <%--通過<c:set>標簽將data2的值放入request范圍中。--%>
    <li>把一個值放入request域中:<c:set var="data2" value="gacl" scope="request"/></li>
    <%--使用EL表達式從requestScope得到data2的值飒炎。--%>
    <li>從request域中得到值:${requestScope.data2}</li>
    
    <%--通過<c:set>標簽將值name1的值放入session范圍中埋哟。--%>
    <li>把一個值放入session域中。<c:set value="孤傲蒼狼" var="name1" scope="session"></c:set></li>
    <%--使用EL表達式從sessionScope得到name1的值郎汪。--%>
    <li>從session域中得到值:${sessionScope.name1} </li>
    
    <%--把name2放入application范圍中赤赊。 --%>
    <li>把一個值放入application域中。<c:set var="name2" scope="application">白虎神皇</c:set></li>
    <%--使用EL表達式從application范圍中取值煞赢,用<c:out>標簽輸出使得頁面規(guī)范化抛计。 --%>
    <li>使用out標簽和EL表達式嵌套從application域中得到值: 
         <c:out value="${applicationScope.name2}">未得到name的值</c:out>
    </li>
    
    <%--不指定范圍使用EL自動查找得到值 --%> 
    <li>未指定scope的范圍,會從不同的范圍內(nèi)查找得到相應(yīng)的值:${data1}照筑、${data2}吹截、${name1}、${name2}</li>
</ul>
<hr/>
<h3>使用Java腳本實現(xiàn)以上功能</h3>
<ul>

    <li>把一個值放入page域中凝危。<%pageContext.setAttribute("data1","xdp");%></li>
    <li>從page域中得到值:<%out.println(pageContext.getAttribute("data1"));%></li>
    
    <li>把一個值放入request域中波俄。<%request.setAttribute("data2","gacl");%></li>
    <li>從request域中得到值:<%out.println(request.getAttribute("data2"));%></li>
    
    <li>把一個值放入session域中。<%session.setAttribute("name1","孤傲蒼狼");%></li>
    <li>從session中域得到值:<%out.println(session.getAttribute("name1"));%></li>
    <%--out.println()方法與<%=%>表達式輸出功能一樣 
    但使用表達式輸出(<%=%>)明顯要比使用out.println()輸出更好蛾默。
    --%>
    <li><%=session.getAttribute("name1") %></li>
    <li>把另一個值放入application域中懦铺。<%application.setAttribute("name2","白虎神皇");%></li>
    <li> 從application域中得到值:<%out.println(application.getAttribute("name2"));%></li>
    <li><%=application.getAttribute("name2")%></li>
    
    <li>未指定scope的范圍,會從不同的范圍內(nèi)查找得到相應(yīng)的值:
        <%=pageContext.findAttribute("data1")%>支鸡、
        <%=pageContext.findAttribute("data2")%>冬念、
        <%=pageContext.findAttribute("name1")%>、
        <%=pageContext.findAttribute("name2")%>
    </li>
    
</ul>
<hr/>
<h3>操作JavaBean牧挣,設(shè)置JavaBean的屬性值</h3>
<%--設(shè)置JavaBean的屬性值刘急,等同與setter方法,Target指向?qū)嵗蟮膶ο蠼龋琾roperty指向要插入值的參數(shù)名叔汁。
注意:使用target時一定要指向?qū)嵗蟮腏avaBean對象,也就是要跟<jsp:useBean>配套使用检碗,
也可以java腳本實例化据块,但這就失去了是用標簽的本質(zhì)意義。
使用Java腳本實例化:
<%@page import="javabean.Person"%
<% Person person=new Person(); %>
 --%>
<c:set target="${person}" property="name">孤傲蒼狼</c:set>
<c:set target="${person}" property="age">25</c:set>
<c:set target="${person}" property="sex">男</c:set>
<c:set target="${person}" property="home">中國</c:set>
<ul>
    <li>使用的目標對象為:${person}</li>
    <li>從Bean中獲得的name值為:<c:out value="${person.name}"></c:out></li>
    <li>從Bean中獲得的age值為:<c:out value="${person.age}"></c:out></li>
    <li>從Bean中獲得的sex值為:<c:out value="${person.sex}"></c:out></li>
    <li>從Bean中獲得的home值為:<c:out value="${person.home}"></c:out></li>
</ul>
<hr/>
<h3>操作Map</h3>
 <% 
    Map map = new HashMap();
    request.setAttribute("map",map);
 %>
 <%--將data對象的值存儲到map集合中 --%>
<c:set property="data" value="gacl" target="${map}"/>
    ${map.data}
</body>
</html>

jsp頁面中使用到的javabean.Person類的代碼如下:

package javabean;

/**
* 項目名稱:JSTLStudy 
* 類名稱:Person 
* 類描述:一個只有g(shù)etter和setter方法的JavaBean或者說一個pojo(簡單的Java對象(Plain Old Java Objects))類折剃,
* 作為一個vo(數(shù)據(jù)傳輸對象)另假。定義了四個變量age、name怕犁、sex和home边篮。 
*/
public class Person {

    private String age;

    private String home;

    private String name;

    private String sex;

    public String getAge() {
        return age;
    }

    public String getHome() {
        return home;
    }

    public String getName() {
        return name;
    }

    public String getSex() {
     return sex;
   }

    public void setAge(String age) {
        this.age = age;
    }

    public void setHome(String home) {
        this.home = home;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public void setSex(String sex) {
        this.sex = sex;
    }
}

運行結(jié)果如下:

image

3.3表達式控制標簽——remove標簽的使用

3.3.1<c:remove>標簽的功能

<c:remove>標簽主要用來從指定的JSP范圍內(nèi)移除指定的變量己莺。

3.3.2<c:remove>標簽的語法

<c:remove var="變量名" [scope=”page|request|session|application”]/>其中var屬性是必須的,scope可以以省略戈轿。

3.3.3<c:remove>標簽的使用范例

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--引入JSTL核心標簽庫 --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML>
<html>
<head>
<title>JSTL: --表達式控制標簽“remove”標簽的使用</title>
</head>

<body>
    <ul>
        <c:set var="name" scope="session">孤傲蒼狼</c:set>
        <c:set var="age" scope="session">25</c:set>
        <li><c:out value="${sessionScope.name}"></c:out></li>
        <li><c:out value="${sessionScope.age}"></c:out></li>
        <%--使用remove標簽移除age變量 --%>
        <c:remove var="age" />
        <li><c:out value="${sessionScope.name}"></c:out></li>
        <li><c:out value="${sessionScope.age}"></c:out></li>
    </ul>
</body>
</html>

運行結(jié)果如下:

image

3.4表達式控制標簽——catch標簽的使用

3.4.1<c:catch>標簽的功能

<c:catch>標簽用于捕獲嵌套在標簽體中的內(nèi)容拋出的異常凌受。

3.4.2<c:catch>標簽的語法

其語法格式如下:<c:catch [var="varName"]>容易產(chǎn)生異常的代碼</c:catch>

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

3.4.3<c:catch>標簽的使用范例

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--引入JSTL核心標簽庫 --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML>
<html>
<head>
    <title>JSTL: --表達式控制標簽“catch”標簽實例</title>
</head>

<body>
    <h4>catch標簽實例</h4>
    <hr>
    
    <%--把容易產(chǎn)生異常的代碼放在<c:catch></c:catch>中胜蛉,自定義一個變量errorInfo用于存儲異常信息 --%>
    <c:catch var="errorInfo">
    <%--實現(xiàn)了一段異常代碼,向一個不存在的JavaBean中插入一個值--%>
    <c:set target="person" property="hao"></c:set>
    </c:catch>
    
    <%--用EL表達式得到errorInfo的值色乾,并使用<c:out>標簽輸出 --%>
    異常:<c:out value="${errorInfo}" /><br />
    異常 errorInfo.getMessage:<c:out value="${errorInfo.message}" /><br />
    異常 errorInfo.getCause:<c:out value="${errorInfo.cause}" /><br />
    異常 errorInfo.getStackTrace:<c:out value="${errorInfo.stackTrace}" />

</body>
</html>

運行結(jié)果如下:

image

3.5流程控制標簽——if標簽使用總結(jié)

3.5.1<c:if>標簽的功能

<c:if> 標簽和程序中的if語句作用相同誊册,用來實現(xiàn)條件控制暖璧。

3.5.2<c:if>標簽的語法

  • 語法1:沒有標簽體內(nèi)容:<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"]/>
  • 語法2: 有標簽體內(nèi)容。<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]>標簽體內(nèi)容殴泰。</c:if>

參數(shù)說明:

  • 1)test屬性用于存放判斷的條件浮驳,一般使用EL表達式來編寫。
  • 2)var屬性用來存放判斷的結(jié)果至会,類型為true或false。
  • 3)scopes屬性用來指定var屬性存放的范圍宵蛀。

3.5.3<c:if>標簽的屬性

屬性名 是否支持EL 屬性類型 屬性描述
test true boolean 決定是否處理標簽體中的內(nèi)容的條件表達式
var false String 用于指定將test屬性的執(zhí)行結(jié)果保存到某個Web域中的某個屬性的名稱
scope false String 指定將test屬性的執(zhí)行結(jié)果保存到哪個Web域中

3.5.4<c:if>標簽的使用范例

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--引入JSTL核心標簽庫 --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML>
<html>
<head>
    <title>JSTL: --流程控制標簽 if標簽示例</title>
</head>

<body>
    <h4>if標簽示例</h4>
    <hr>
    <form action="JSTL_if_tag.jsp" method="post">
        <input type="text" name="uname" value="${param.uname}"> 
        <input type="submit" value="登錄">
    </form>
    
    <%--使用if標簽進行判斷并把檢驗后的結(jié)果賦給adminchock县貌,存儲在默認的page范圍中。 --%>
    <c:if test="${param.uname=='admin'}" var="adminchock">
    <%--可以把adminchock的屬性范圍設(shè)置為session梧宫,這樣就可以在其他的頁面中得到adminchock的值摆碉,
使用<c:if text=”${adminchock}”><c:if>判斷塘匣,實現(xiàn)不同的權(quán)限。 --%>
        <c:out value="管理員歡迎您驰徊!"/>
    </c:if>
    <%--使用EL表達式得到adminchock的值棍厂,如果輸入的用戶名為admin將顯示true。 --%>
    ${adminchock}
</body>
</html>  

3.6流程控制標簽——choose標簽例驹、when標簽、otherwise標簽配合使用講解

3.6.1<c:choose><c:when><c:otherwise>標簽的功能

<c:choose>盆驹、<c:when><c:otherwise>這3個標簽通常情況下是一起使用的躯喇,<c:choose>標簽作為<c:when><c:otherwise>標簽的父標簽來使用。

使用<c:choose><c:when><c:otherwise>三個標簽焦履,可以構(gòu)造類似 “if-else if-else” 的復(fù)雜條件判斷結(jié)構(gòu)裁良。

3.6.2語法

<c:choose>
     <c:when test="條件1">
            //業(yè)務(wù)邏輯1
     </c:when>
     <c:when test="條件2">
            //業(yè)務(wù)邏輯2
     </c:when>
     <c:when test="條件n">
            //業(yè)務(wù)邏輯n
     </c:when>
     <c:otherwise>
            //業(yè)務(wù)邏輯
     </c:otherwise>
</c:choose>

3.6.3使用范例

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--引入JSTL核心標簽庫 --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML>
<html>
<head>
    <title>JSTL: -- choose及其嵌套標簽標簽示例</title>
</head>

<body>
    <h4>choose及其嵌套標簽示例</h4>
    <hr/>
    <%--通過set標簽設(shè)定score的值為85 --%>
    <c:set var="score" value="85"/>
    
    <c:choose>
    
    <%--使用<c:when>進行條件判斷价脾。
    如果大于等于90犀变,輸出“您的成績?yōu)閮?yōu)秀”秋柄;
    如果大于等于70小于90,輸出“您的成績?yōu)榱己谩保?    大于等于60小于70骇笔,輸出“您的成績?yōu)榧案瘛保?    其他(otherwise)輸出“對不起笨触,您沒能通過考試”。
 --%>
 
        <c:when test="${score>=90}">
        你的成績?yōu)閮?yōu)秀粗俱!
        </c:when>
    
        <c:when test="${score>70 && score<90}">
        您的成績?yōu)榱己?
        </c:when>
   
        <c:when test="${score>60 && score<70}">
        您的成績?yōu)榧案?        </c:when>
    
        <c:otherwise>
        對不起寸认,您沒有通過考試串慰!
   
        </c:otherwise>
    </c:choose>
</body>
</html>

3.7循環(huán)標簽——forEach標簽的使用

3.7.1<c:forEach>標簽的功能

該標簽根據(jù)循環(huán)條件遍歷集合(Collection)中的元素邦鲫。

3.7.2<c:forEach>標簽的語法

<c:forEach var=”name” items=”Collection” 
  varStatus=”StatusName” begin=”begin” 
  end=”end” step=”step”>
    
    本體內(nèi)容
    
</c:forEach>

參數(shù)說明:

  • 1)var設(shè)定變量名用于存儲從集合中取出元素掂碱。
  • 2)items指定要遍歷的集合疼燥。
  • 3)varStatus設(shè)定變量名,該變量用于存放集合中元素的信息但狭。
  • 4)begin撬即、end用于指定遍歷的起始位置和終止位置(可選)剥槐。
  • 5)step指定循環(huán)的步長。

3.7.3<c:forEach>標簽的屬性

屬性名 是否支持EL 屬性類型 是否必須 默認值
var false String yes
items true Arrays Collection Iterator Enumeration Map String[]args
begin true int no 0
end true int no 集合中最后一個元素
step true int no 1
varStatus false String no

其中varStatus有4個狀態(tài)屬性几于,如下表所示:

屬性名 類型 說明
index int 當前循環(huán)的索引值
count int 循環(huán)的次數(shù)
first boolean 是否為第一個位置
last boolean 是否為最后一個位置

3.7.4<c:forEach>的使用范例

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--引入JSTL核心標簽庫 --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@page import="java.util.ArrayList"%>
<!DOCTYPE HTML>
<html>
<head>
    <title>JSTL: -- forEach標簽實例</title>
</head>

<body>
<h4><c:out value="forEach實例"/></h4>
    <% 
       List<String>list = new ArrayList<String>(); 
       list.add(0, "貝貝"); 
       list.add(1, "晶晶"); 
       list.add(2, "歡歡"); 
       list.add(3, "瑩瑩"); 
       list.add(4, "妮妮"); 
       request.setAttribute("list", list); 
    %>
    <B><c:out value="不指定begin和end的迭代:" /></B><br>
    <%--不使用begin和end的迭代沿后,從集合的第一個元素開始,遍歷到最后一個元素尖滚。 --%>
    
    <c:forEach var="fuwa" items="${list}">
     &nbsp;<c:out value="${fuwa}"/><br/>
    </c:forEach>

    <B><c:out value="指定begin和end的迭代:" /></B><br>
    <%--指定begin的值為1、end的值為3、step的值為2,
    從第二個開始首先得到晶晶,每兩個遍歷一次豺谈,
    則下一個顯示的結(jié)果為瑩瑩,end為3則遍歷結(jié)束嚼贡。 --%>
    <c:forEach var="fuwa" items="${list}" begin="1" end="3" step="2">
    <c:out value="${fuwa}"/><br/>
   </c:forEach>

    <B><c:out value="輸出整個迭代的信息:" /></B><br>
        <%--指定varStatus的屬性名為s占贫,并取出存儲的狀態(tài)信息 --%>
        <c:forEach var="fuwa" items="${list}" begin="3" end="4" varStatus="s" step="1">
            <c:out value="${fuwa}" />的四種屬性:<br>
        
        所在位置,即索引:<c:out value="${s.index}" /><br>
        
            總共已迭代的次數(shù):<c:out value="${s.count}" /><br>
     
            是否為第一個位置:<c:out value="${s.first}" /><br>
     
            是否為最后一個位置:<c:out value="${s.last}" /><br>  
        </c:forEach>
</body>
</html>

運行結(jié)果如下:

image

3.8URL操作標簽——import標簽的使用

3.8.1<c:import>標簽的功能

該標簽可以把其他靜態(tài)或動態(tài)文件包含到本JSP頁面恨锚,與<jsp:include>的區(qū)別為:<jsp:include>只能包含同一個web應(yīng)用中的文件猴伶。而<c:import>可以包含其他web應(yīng)用中的文件塌西,甚至是網(wǎng)絡(luò)上的資源捡需。

3.8.2<c:import>標簽的語法

  • 語法1:<c:import url=”url” [context=”context”][value=”value”] [scope=”page|request|session|application”] [charEncoding=”encoding”]/>
  • 語法2:<c:import url=”url” varReader=”name” [context=”context”] [charEncoding=”encoding”]/>

參數(shù)說明:

  • 1)URL為資源的路徑办桨,當引用的資源不存在時系統(tǒng)會拋出異常,因此該語句應(yīng)該放在<c:catch></c:catch>語句塊中捕獲饰剥。
  • 2)引用資源有兩種方式:絕對路徑和相對路徑殊霞。

使用絕對路徑的示例如下:<c:import url=”http://www.baidu.com”>
使用相對路徑的示例如下:<c:import url=”aa.txt”>,aa.txt放在同一文件目錄汰蓉。

  • 3)如果以“/”開頭表示應(yīng)用的根目錄下绷蹲。例如:tomcat應(yīng)用程序的根目錄文件夾為webapps。導(dǎo)入webapps下的文件bb.txt的編寫方式為:<c:import url=”/bb.txt”>
  • 4)context屬性用于在訪問其他web應(yīng)用的文件時顾孽,指定根目錄苞俘。例如锚贱,訪問root下的index.jsp的實現(xiàn)代碼為:<c:import url=”/index.jsp” context=”/root”>凰盔。等同于webapps/root/index.jsp
  • 5)var呢堰、scope钞翔、charEncoding、varReader是可選屬性环揽。

3.8.3<c:import>標簽使用范例

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--引入JSTL核心標簽庫 --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML>
<html>
<head>
    <title>JSTL: -- import標簽實例</title>
</head>

<body>
    <h4><c:out value="import實例"/></h4>
    <hr/>
    <h4><c:out value="絕對路徑引用的實例" /></h4>
    <%--使用絕對路徑導(dǎo)入百度首頁,導(dǎo)入時使用<c:catch></c:catch>捕獲異常。--%>
        <c:catch var="error1">
            <c:import url="http://wwww.baidu.com" charEncoding="utf-8"/>
        </c:catch>
            ${error1}
        <hr/>
        
    <h4><c:out value="相對路徑引用本應(yīng)用中的文件" /></h4>
    <%--使用相對路徑導(dǎo)入同一文件夾下的“JSTL的import標簽使用說明”文件巴粪,接收的字符編碼格式使用charEncoding設(shè)置為utf-8通今。 --%>
        <c:catch var="error2">
            <c:import url="JSTL的import標簽使用說明" charEncoding="utf-8"/>
        </c:catch>
            ${error2}
        <hr/>
        
    <h4><c:out value="使用字符串輸出相對路徑引用的實例,并保存在session范圍內(nèi)" /></h4>
    <%--導(dǎo)入“JSTL的import標簽使用說明.txt”肛根,使用var定義的變量接收要導(dǎo)入的文件辫塌,并存儲在session中,
      如果在其他頁面同樣也要導(dǎo)入該文件晶通,只須使用<c:out>輸出“JSTL的import標簽使用說明.txt”的值即可璃氢。--%>
        <c:catch var="error3">
        <c:import var="myurl" url="JSTL的import標簽使用說明" scope="session" charEncoding="utf-8"/>
            <c:out value="${myurl}"></c:out>
        <hr/>
            <c:out value="${myurl}" />
        </c:catch>
            ${error3}
       </body>
    </html>

3.9URL操作符——url標簽的使用

3.9.1<c:url>標簽的功能

<c:url>標簽用于在JSP頁面中構(gòu)造一個URL地址哟玷,其主要目的是實現(xiàn)URL重寫狮辽。

3.9.2<c:url>標簽的語法

  • 語法1:指定一個url不做修改,可以選擇把該url存儲在JSP不同的范圍中巢寡。<c:url value=”value” [var=”name”][scope=”page|request|session|application”] [context=”context”]/>

  • 語法2:配合 <c:param>標簽給url加上指定參數(shù)及參數(shù)值喉脖,可以選擇以name存儲該url。

      <c:url value=”value” [var=”name”] [scope=”page|request|session|application”] [context=”context”] 
          <c:param name=”參數(shù)名” value=”值”>
      </c:url>`
    

3.9.3<c:url>標簽的主要屬性

屬性名 是否支持EL 屬性類型 屬性描述
value true String 指定要構(gòu)造的URL
var false String 指定將構(gòu)造出的URL結(jié)果保存到Web域中的屬性名稱
scope false String 指定將構(gòu)造出的URL結(jié)果保存到哪個Web域中

3.9.4<c:url>標簽使用范例

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--引入JSTL核心標簽庫 --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE HTML>
<html>
<head>
    <title>JSTL: -- url標簽實例</title>
</head>

<body>
    <c:out value="url標簽使用"></c:out>
    <h4>使用url標簽生成一個動態(tài)的url抑月,并把值存入session中.</h4>
    <hr/>
    <c:url value="http://www.baidu.com" var="url" scope="session">
    </c:url>
    <a href="${url}">百度首頁(不帶參數(shù))</a>
    <hr/>
    <h4>
    配合 &lt;c:param&gt;標簽給url加上指定參數(shù)及參數(shù)值树叽,生成一個動態(tài)的url然后存儲到paramUrl變量中
    </h4>
    <c:url value="http://www.baidu.com" var="paramUrl">
        <c:param name="userName" value="codingxiaxw"/>
        <c:param name="pwd">123456</c:param>
    </c:url>
    <a href="${paramUrl}">百度首頁(帶參數(shù))</a>
</body>
</html>

說明: 此博客參考大神博客孤傲蒼狼

2018.3.19更

歡迎加入我的Java交流1群:659957958。群里目前已有1800人谦絮,每天都非程馑校活躍,但為了篩選掉那些不懷好意的朋友進來搞破壞层皱,所以目前入群方式已改成了付費方式性锭,你只需要支付9塊錢,即可獲取到群文件中的所有干貨以及群里面各位前輩們的疑惑解答叫胖;為了鼓勵良好風氣的發(fā)展草冈,讓每個新人提出的問題都得到解決,所以我將得到的入群收費收入都以紅包的形式發(fā)放到那些主動給新手們解決疑惑的朋友手中。在這里怎棱,我們除了談技術(shù)哩俭,還談生活、談理想拳恋;在這里凡资,我們?yōu)槟愕膶W習方向指明方向,為你以后的求職道路提供指路明燈谬运;在這里讳苦,我們把所有好用的干貨都與你分享。還在等什么吩谦,快加入我們吧鸳谜!

2018.4.21更:如果群1已滿或者無法加入,請加Java學習交流2群:305335626 式廷。群2作為群1的附屬群咐扭,除了日常的技術(shù)交流、資料分享滑废、學習方向指明外蝗肪,還會在每年互聯(lián)網(wǎng)的秋春招時節(jié)在群內(nèi)發(fā)布大量的互聯(lián)網(wǎng)內(nèi)推方式,話不多說蠕趁,快上車吧薛闪!

4.聯(lián)系

If you have some questions after you see this article,you can tell your doubts in the comments area or you can find some info by clicking these links.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市俺陋,隨后出現(xiàn)的幾起案子豁延,更是在濱河造成了極大的恐慌,老刑警劉巖腊状,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诱咏,死亡現(xiàn)場離奇詭異,居然都是意外死亡缴挖,警方通過查閱死者的電腦和手機袋狞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來映屋,“玉大人苟鸯,你說我怎么就攤上這事∨锏悖” “怎么了早处?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長乙濒。 經(jīng)常有香客問我陕赃,道長卵蛉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任么库,我火速辦了婚禮傻丝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诉儒。我一直安慰自己葡缰,他們只是感情好,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布忱反。 她就那樣靜靜地躺著泛释,像睡著了一般。 火紅的嫁衣襯著肌膚如雪温算。 梳的紋絲不亂的頭發(fā)上怜校,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音注竿,去河邊找鬼茄茁。 笑死,一個胖子當著我的面吹牛巩割,可吹牛的內(nèi)容都是我干的裙顽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼宣谈,長吁一口氣:“原來是場噩夢啊……” “哼愈犹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起闻丑,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤漩怎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后梆掸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扬卷,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡牙言,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年酸钦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咱枉。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡卑硫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蚕断,到底是詐尸還是另有隱情欢伏,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布亿乳,位于F島的核電站硝拧,受9級特大地震影響径筏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜障陶,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一滋恬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抱究,春花似錦恢氯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至妈候,卻和暖如春敢靡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背苦银。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工醋安, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人墓毒。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓吓揪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親所计。 傳聞我的和親對象是個殘疾皇子柠辞,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容

  • JSP總結(jié)(經(jīng)典) day1 JSP 定義: 1)Java Server Page, Java EE 組件,本...
    java日記閱讀 3,421評論 0 13
  • JSTL標簽庫的使用是為彌補html標簽的不足主胧,規(guī)范自定義標簽的使用而誕生的叭首。使用JSLT標簽的目的就是不希望在j...
    重山楊閱讀 642評論 0 3
  • 一、JSTL標簽庫介紹 JSTL標簽庫的使用是為彌補html標簽的不足踪栋,規(guī)范自定義標簽的使用而誕生的焙格。使用JSLT...
    孔垂云閱讀 550評論 0 0
  • 身后已成為記憶,不能后悔更無法彌補夷都,因為人要往前走眷唉。 拜越篇:熟悉的歌聲響起,想到相同的曲子封存的聲音囤官。記憶拉回以...
    烏哈閱讀 248評論 0 1
  • Android開發(fā)中集成信鴿推送還是比較簡單的冬阳,但是遇到了坑就麻煩 [TOC] 先介紹一下集成信鴿推送的步驟 1....
    起個名字真難999閱讀 4,869評論 2 7