JavaWeb之JSTL標籤庫

首先須要說明的是: 此博客參考孤傲蒼狼這位技術大牛對JSTL標籤的理解,寫的很是通俗易懂。原文連接:http://www.cnblogs.com/xdp-gacl/p/3943390.htmlhtml

1.JSTL標籤庫介紹

JSTL標籤庫的使用是爲彌補html標籤的不足,規範自定義標籤的使用而誕生的。使用JSLT標籤的目的就是不但願在jsp頁面中出現java邏輯代碼。JSTL也是對EL表達式的擴展(也就是說JSTL依賴EL),是一門標籤語言。JSTL標籤使用起來很是方便,它與JSP動做標籤同樣,只不過它不是JSP內置的標籤,須要咱們本身導包,必定要指定標籤庫。java

若是你使用MyEclipse開發JavaWeb,那麼把項目發佈到Tomcat時,你會發現MyEclipse在lib目錄下自動存放了JSTL的Jar包。若是你使用其餘IDE,那麼你須要手動導入這個JSTL的Jar包:jstl-1.2.jar。web

2.JSTL標籤庫的分類

  • core:核心標籤庫(用得最多)
  • fmt:國際化標籤庫(只需學習兩個,日期和數字)
  • sql:數據庫標籤庫(過期了,不須要學習)
  • xml:xml標籤庫(過期了,不須要學習)

3.核心標籤庫使用說明

JSTL的核心標籤庫標籤共13個,使用這些標籤可以完成JSP頁面的基本功能,減小編碼工做。sql

從功能上能夠分爲4類:表達式控制標籤、流程控制標籤、循環標籤、URL操做標籤。數據庫

  • (1) 表達式控制標籤:out標籤、set標籤、remove標籤、catch標籤
  • (2) 流程控制標籤:if標籤、choose標籤、when標籤、otherwise標籤
  • (3) 循環標籤:forEach標籤、forTokens標籤
  • (4) URL操做標籤

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

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

3.1.1<c:out>標籤的功能

<c:out>標籤主要是用來輸出數據對象(字符串、表達式)的內容或結果。網絡

在使用Java腳本輸出時常使用的方式爲:<% out.println("字符串"); %>或者<%=表達式 %>,在web開發中,爲了不暴露邏輯代碼會盡可能減小頁面中的Java腳本,使用<c:out>標籤就能夠實現以上功能。session

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

JSTL的使用是和EL表達式分不開的,EL表達式雖然能夠直接將結果返回給頁面,但有時獲得的結果爲空,<c:out>有特定的結果處理功能,EL的單獨使用會下降程序的易讀性,建議把EL的結果輸入放入<c:out>標籤中。app

3.1.2<c:out>標籤的語法

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

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

這兩種方式沒有本質的區別,只是格式上的差異。[escapeXml=」true|false」][defult=」默認值」]這些使用[]屬性表示是否是必須的。

3.1.3<c:out>標籤的屬性

屬性名 是否支持EL 屬性類型 屬性描述
Value true Object 指定要輸出的內容
escapeXml true Boolean 指定是否將>、<、&、’ 、」等特殊字符進行HTML編碼轉換後再進行輸出。默認值爲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的使用,以及在不一樣屬性值狀態下的結果。"/></h3>
<hr/>
<ul>
    <%--(1)直接輸出了一個字符串。 --%>
    <li>(1)<c:out value="JSTL的out標籤的使用" /></li>

    <li>(2)<c:out value="<a href='http://www.cnblogs.com/'>點擊連接到博客園</a>" /></li>
    <%--escapeXml="false"表示value值中的html標籤不進行轉義,而是直接輸出 --%>
    <li>(3)<c:out value="<a href='http://www.cnblogs.com/'>點擊連接到博客園</a>" escapeXml="false"/></li>

    <%--(4)字符串中有轉義字符,但在默認狀況下沒有轉換。 --%>
    <li>(4)<c:out value="&lt未使用字符轉義&gt" /></li>
    <%--(5)使用了轉義字符&lt和&gt分別轉換成<和>符號。 --%>
    <li>(5)<c:out value="&lt使用字符轉義&gt" escapeXml="false"></c:out></li>

    <%--(6)設定了默認值,從EL表達式${null}獲得空值,因此直接輸出設定的默認值。 --%>
    <li>(6)<c:out value="${null}">使用了默認值</c:out></li>
    <%--(7)未設定默認值,輸出結果爲空。 --%>
    <li>(7)<c:out value="${null}"></c:out></li>

    <%--(8)設定了默認值,從EL表達式${null}獲得空值,因此直接輸出設定的默認值。 --%>
    <li>(8)<c:out value="${null}" default="默認值"/></li>
    <%--(9)未設定默認值,輸出結果爲空。 --%>
    <li>(9)<c:out value="${null}"/></li>
</ul>
</body>
</html>

運行結果以下:

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

3.2.1<c:set>標籤的功能

<c:set>標籤用於把某一個對象存在指定的域範圍內,或者將某一個對象存儲到Map或者JavaBean對象中。

3.2.2<c:set>標籤的語法

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

  • 語法1:存值,把一個值放在指定的域範圍內.<c:set value=」值1」 var=」name1」 [scope=」page|request|session|application」]/>

    含義:把一個變量名爲name1值爲「值1」的變量存儲在指定的scope範圍內。

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

    含義:把一個變量名爲name2,值爲值2的變量存儲在指定的scope範圍內。

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

    含義:把一個值爲「值3」賦值給指定的JavaBean的屬性名。至關與setter()方法。

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

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

從功能上分語法1和語法二、語法3和語法4的效果是同樣的,只是把value值放置的位置不一樣,至於使用那個根據我的的喜好,語法1和語法2是向scope範圍內存儲一個值,語法3和語法4是給指定的JavaBean賦值。

3.2.3<c:set>標籤的屬性

屬性名 是否支持EL 屬性類型 屬性描述
Value true Object 用於指定屬性值
var false String 用於指定要設置的Web域屬性的名稱
scope false String 用於指定屬性所在的Web域
target true Object 用於指定要設置屬性的對象,這個對象必須是JavaBean對象或java.util.Map對象
property true string 用於指定當前要爲對象設置的屬性名稱

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在內存中的值(或者使用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>標籤輸出使得頁面規範化。 --%>
    <li>使用out標籤和EL表達式嵌套從application域中獲得值: 
         <c:out value="${applicationScope.name2}">未獲得name的值</c:out>
    </li>

    <%--不指定範圍使用EL自動查找獲得值 --%> 
    <li>未指定scope的範圍,會從不一樣的範圍內查找獲得相應的值:${data1}、${data2}、${name1}、${name2}</li>
</ul>
<hr/>
<h3>使用Java腳本實現以上功能</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的範圍,會從不一樣的範圍內查找獲得相應的值:
        <%=pageContext.findAttribute("data1")%>、
        <%=pageContext.findAttribute("data2")%>、
        <%=pageContext.findAttribute("name1")%>、
        <%=pageContext.findAttribute("name2")%>
    </li>

</ul>
<hr/>
<h3>操做JavaBean,設置JavaBean的屬性值</h3>
<%--設置JavaBean的屬性值,等同與setter方法,Target指向實例化後的對象,property指向要插入值的參數名。
注意:使用target時必定要指向實例化後的JavaBean對象,也就是要跟<jsp:useBean>配套使用,
也能夠java腳本實例化,但這就失去了是用標籤的本質意義。
使用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 
* 類描述:一個只有getter和setter方法的JavaBean或者說一個pojo(簡單的Java對象(Plain Old Java Objects))類,
* 做爲一個vo(數據傳輸對象)。定義了四個變量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;
    }
}

運行結果以下:

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

3.3.1<c:remove>標籤的功能

<c:remove>標籤主要用來從指定的JSP範圍內移除指定的變量。

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>

運行結果以下:

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

3.4.1<c:catch>標籤的功能

<c:catch>標籤用於捕獲嵌套在標籤體中的內容拋出的異常。

3.4.2<c:catch>標籤的語法

其語法格式以下:<c:catch [var="varName"]>容易產生異常的代碼</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>

    <%--把容易產生異常的代碼放在<c:catch></c:catch>中,自定義一個變量errorInfo用於存儲異常信息 --%>
    <c:catch var="errorInfo">
       <%--實現了一段異常代碼,向一個不存在的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>

運行結果以下:

3.5流程控制標籤——if標籤使用總結

3.5.1<c:if>標籤的功能

<c:if> 標籤和程序中的if語句做用相同,用來實現條件控制。

3.5.2<c:if>標籤的語法

  • 語法1:沒有標籤體內容:<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"]/>
  • 語法2: 有標籤體內容。<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]>標籤體內容。</c:if>

參數說明:

  • 1)test屬性用於存放判斷的條件,通常使用EL表達式來編寫。
  • 2)var屬性用來存放判斷的結果,類型爲true或false。
  • 3)scopes屬性用來指定var屬性存放的範圍。

3.5.3<c:if>標籤的屬性

屬性名 是否支持EL 屬性類型 屬性描述
test true boolean 決定是否處理標籤體中的內容的條件表達式
var false String 用於指定將test屬性的執行結果保存到某個Web域中的某個屬性的名稱
scope false String 指定將test屬性的執行結果保存到哪一個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標籤進行判斷並把檢驗後的結果賦給adminchock,存儲在默認的page範圍中。 --%>
    <c:if test="${param.uname=='admin'}" var="adminchock">
    <%--能夠把adminchock的屬性範圍設置爲session,這樣就能夠在其餘的頁面中獲得adminchock的值,
使用<c:if text=」${adminchock}」><c:if>判斷,實現不一樣的權限。 --%>
        <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>三個標籤,能夠構造相似 「if-else if-else」 的複雜條件判斷結構。

3.6.2語法

<c:choose>
     <c:when test="條件1">
             //業務邏輯1
     </c:when>
     <c:when test="條件2">
             //業務邏輯2
     </c:when>
     <c:when test="條件n">
             //業務邏輯n
     </c:when>
     <c:otherwise>
             //業務邏輯
     </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標籤設定score的值爲85 --%>
    <c:set var="score" value="85"/>

    <c:choose>

    <%--使用<c:when>進行條件判斷。
    若是大於等於90,輸出「您的成績爲優秀」;
    若是大於等於70小於90,輸出「您的成績爲良好」;
    大於等於60小於70,輸出「您的成績爲及格」;
    其餘(otherwise)輸出「對不起,您沒能經過考試」。
 --%>

        <c:when test="${score>=90}">
        你的成績爲優秀!
        </c:when>

        <c:when test="${score>70 && score<90}">
        您的成績爲良好!
        </c:when>

        <c:when test="${score>60 && score<70}">
        您的成績爲及格
        </c:when>

        <c:otherwise>
        對不起,您沒有經過考試!

        </c:otherwise>
    </c:choose>
</body>
</html>

3.7循環標籤——forEach標籤的使用

3.7.1<c:forEach>標籤的功能

該標籤根據循環條件遍歷集合(Collection)中的元素。

3.7.2<c:forEach>標籤的語法

<c:forEach var=」name」 items=」Collection」 
  varStatus=」StatusName」 begin=」begin」 
  end=」end」 step=」step」>

    本體內容

</c:forEach>

參數說明:

  • 1)var設定變量名用於存儲從集合中取出元素。
  • 2)items指定要遍歷的集合。
  • 3)varStatus設定變量名,該變量用於存放集合中元素的信息。
  • 4)begin、end用於指定遍歷的起始位置和終止位置(可選)。
  • 5)step指定循環的步長。

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個狀態屬性,以下表所示:

屬性名 類型 說明
index int 當前循環的索引值
count int 循環的次數
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的值爲一、end的值爲三、step的值爲2,
    從第二個開始首先獲得晶晶,每兩個遍歷一次,
    則下一個顯示的結果爲瑩瑩,end爲3則遍歷結束。 --%>
    <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,並取出存儲的狀態信息 --%>
        <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>

             總共已迭代的次數:<c:out value="${s.count}" /><br>

             是否爲第一個位置:<c:out value="${s.first}" /><br>

             是否爲最後一個位置:<c:out value="${s.last}" /><br>  
        </c:forEach>
</body>
</html>

運行結果以下:

3.8URL操做標籤——import標籤的使用

3.8.1<c:import>標籤的功能

該標籤能夠把其餘靜態或動態文件包含到本JSP頁面,與<jsp:include>的區別爲:<jsp:include>只能包含同一個web應用中的文件。而<c:import>能夠包含其餘web應用中的文件,甚至是網絡上的資源。

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」]/>

參數說明:

  • 1)URL爲資源的路徑,當引用的資源不存在時系統會拋出異常,所以該語句應該放在<c:catch></c:catch>語句塊中捕獲。
  • 2)引用資源有兩種方式:絕對路徑和相對路徑。

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

  • 3)若是以「/」開頭表示應用的根目錄下。例如:tomcat應用程序的根目錄文件夾爲webapps。導入webapps下的文件bb.txt的編寫方式爲:<c:import url=」/bb.txt」>
  • 4)context屬性用於在訪問其餘web應用的文件時,指定根目錄。例如,訪問root下的index.jsp的實現代碼爲:<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>
    <%--使用絕對路徑導入百度首頁,導入時使用<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="相對路徑引用本應用中的文件" /></h4>
     <%--使用相對路徑導入同一文件夾下的「JSTL的import標籤使用說明」文件,接收的字符編碼格式使用charEncoding設置爲utf-8。 --%>
         <c:catch var="error2">
             <c:import url="JSTL的import標籤使用說明" charEncoding="utf-8"/>
         </c:catch>
              ${error2}
         <hr/>

      <h4><c:out value="使用字符串輸出相對路徑引用的實例,並保存在session範圍內" /></h4>
      <%--導入「JSTL的import標籤使用說明.txt」,使用var定義的變量接收要導入的文件,並存儲在session中,
      若是在其餘頁面一樣也要導入該文件,只須使用<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>標籤的功能

標籤用於在JSP頁面中構造一個URL地址,其主要目的是實現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加上指定參數及參數值,能夠選擇以name存儲該url。

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

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

屬性名 是否支持EL 屬性類型 屬性描述
value true String 指定要構造的URL
var false String 指定將構造出的URL結果保存到Web域中的屬性名稱
scope false String 指定將構造出的URL結果保存到哪一個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標籤生成一個動態的url,並把值存入session中.</h4>
    <hr/>
    <c:url value="http://www.baidu.com" var="url" scope="session">
    </c:url>
    <a href="${url}">百度首頁(不帶參數)</a>
    <hr/>
    <h4>
    配合 &lt;c:param&gt;標籤給url加上指定參數及參數值,生成一個動態的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}">百度首頁(帶參數)</a>
</body>
</html>
相關文章
相關標籤/搜索