一、核心标签库(Core Tags):
1、<c:out> :用于输出表达式的结果到页面
<c:out value="表达式" [escapeXml="布尔值"] [scope="作用域"] />
-
value
属性指定了要输出的表达式值。 -
escapeXml
属性可选,用于指定是否对 XML 特殊字符进行转义,默认为true
。 -
scope
属性可选,用于指定变量的作用域,有效的作用域包括 page、request、session 和 application。如果没有指定作用域,则默认为 page。
以下是一些 <c:out>
的用法示例:
- 输出一个字符串:
<c:out value="Hello Tom!" /> //上述代码将在页面上输出字符串 "Hello Tom!"。
- 输出一个变量的值:
<c:set var="message" value="Hello Tom!" /> <c:out value="${message}" /> //上述代码将在页面上输出变量 message 的值,即 "Hello Tom!"。
- 输出一个对象的属性值:
<c:set var="product" value="{name:'shirt', price:10}" /> <c:out value="${product.name}" /> //上述代码将在页面上输出变量 product 的 name 属性值,即 "shirt"。
- 输出一个表达式的计算结果:
<c:set var="discount" value="5" /> <c:out value="${discount * 10}" /> //上述代码将在页面上输出变量 discount 乘以 10 的结果,即 50。
- 在循环中使用
<c:out>
:<c:forEach var="item" items="${list}"> <c:out value="${item.name}" /> </c:forEach> //上述代码在循环中输出每个循环项的 name 属性值。
2、<c:set>:用于设置一个变量的值。
<c:set var="变量名" value="表达式" [scope="作用域"] />
-
var
属性指定了要设置的变量名。 -
value
属性指定了要设置的表达式值。 -
scope
属性可选,用于指定变量的作用域,有效的作用域包括 page、request、session 和 application。如果没有指定作用域,则默认为 page。
以下是一些 <c:set>
的用法示例:
- 字符串变量用法:
<c:set var="message" value="Hello Tom!" /> //上述代码将在 page 作用域中设置一个名为 message 的变量,其值为 "Hello Tom!"。
- 表达式变量用法:
<c:set var="price" value="${product.price + discount}" /> //上述代码将在 page 作用域中设置一个名为 price 的变量,其值为 product.price 和 discount 的和。
- 在条件判断中使用
<c:set>
:<c:set var="choie" value="${discount > 0 ? 'true' : 'false'}" /> //上述代码将在 page 作用域中设置一个名为 choie 的变量,如果 discount 大于 0,则其值为 "true",否则为 "false"。
- 在循环中使用
<c:set>
:<c:forEach var="item" items="${list}"> <c:set var="itemName" value="${item.name}" /> <p>${itemName}</p> </c:forEach> //上述代码在循环中设置了 itemName 变量,其值为当前循环项的 name 属性值,然后在循环体中输出该变量的值。
3、<c:remove>:用于从作用域中移除变量
<c:remove var="变量名" [scope="作用域"] />
-
var
属性可选,指定要删除的变量名。 -
scope
属性可选,用于指定变量的作用域,有效的作用域包括 page、request、session 和 application。如果没有指定作用域,则默认为 page。
以下是一些 <c:remove>
的用法示例:
- 删除一个变量:
<c:set var="message" value="Hello Tom!" /> <c:remove var="message" /> //上述代码将在 page 作用域中删除名为 message 的变量
- 删除一个标签:
<c:set var="message" value="Hello Tom!" /> <c:out value="${message}" /> <c:remove var="message" /> //上述代码将在 page 作用域中删除名为 message 的变量,首先输出该变量的值,然后将其从 page 作用域中删除。
- 在循环中使用
<c:remove>
:<c:forEach var="item" items="${list}"> <c:out value="${item.name}" /> <c:remove var="item" scope="request" /> </c:forEach> //上述代码在循环中输出每个循环项的 name 属性值,并将当前循环项从 request 作用域中删除。注意每个循环项的 item 变量仅在当前的循环迭代中有效。
4、<c:if>:用于执行条件判断
<c:if test="条件表达式">
<!-- 条件为真时执行的代码块 -->
</c:if>
-
test
属性指定了要进行条件判断的表达式。当表达式的结果为真时,会执行<c:if>
标签内部的内容。
以下是一些用 <c:if>
的示例:
- 简单示例:
<c:if test="${user.isAdmin}"> <p>Welcome admin!</p> </c:if> //在上述示例中,如果 user 对象的 isAdmin 属性为真,那么将显示 "Welcome admin!" 文本。
- 在
<c:if>
中嵌套其他 JSTL 标签,以根据条件执行更复杂的操作:<c:if test="${user.isAdmin}"> <p>Welcome admin!</p> <c:out value="${user.name}" /> </c:if> <c:if test="${!user.isAdmin}"> <p>Welcome guest!</p> </c:if> //在上述示例中,如果 user 对象的 isAdmin 属性为真,将显示 "Welcome admin!" 文本,并输出 user 对象的名称。如果 user 对象的 isAdmin 属性为假,则显示 "Welcome guest!" 文本。
5、<c:choose>,<c:when>,<c:otherwise>:用于实现多条件判断
<c:choose>
<c:when test="${condition1}">
<!-- 当 condition1 为真时执行的代码块 -->
</c:when>
<c:when test="${condition2}">
<!-- 当 condition2 为真时执行的代码块 -->
</c:when>
<c:otherwise>
<!-- 当以上条件都不满足时执行的代码块 -->
</c:otherwise>
</c:choose>
-
在这个示例中,
<c:choose>
标签包含了一个或多个<c:when>
标签和一个<c:otherwise>
标签。当condition1
或condition2
为真时,相应的<c:when>
标签中的代码块将被执行。如果condition1
和condition2
都不为真,则<c:otherwise>
标签中的代码块将被执行。
以下是一个使用 <c:choose>
, <c:when>
, <c:otherwise>
的示例:
- 假设我们有一个
user
对象,它有一个role
属性,我们可以根据这个属性的值来显示不同的信息:<c:choose> <c:when test="${user.role == 'admin'}"> <p>Welcome Admin!</p> </c:when> <c:when test="${user.role == 'user'}"> <p>Welcome User!</p> </c:when> <c:otherwise> <p>Welcome Guest!</p> </c:otherwise> </c:choose> //在这个示例中,如果 user.role 的值为 "admin",将显示 "Welcome Admin!";如果 user.role 的值为 "user",将显示 "Welcome User!";否则,将显示 "Welcome Guest!"。
6、<c:forEach>:用于遍历集合或数组中的元素并执行指定的操作
<c:forEach var="变量名" items="集合或数组" [varStatus="变量状态"] [begin="起始索引"] [end="结束索引"] [separator="分隔符"] />
-
var
属性指定了要遍历的集合或数组中每个元素的变量名。 -
items
属性指定了要遍历的集合或数组。 -
varStatus
属性可选,用于指定一个变量来保存当前迭代的状态信息,如当前迭代索引、是否是第一个或最后一个元素等。 -
begin
和end
属性可选,用于指定迭代的起始和结束位置,其中begin
是可选的,而end
是必须的。 -
separator
属性可选,用于指定每个元素之间的分隔符。
以下是一些 <c:forEach>
的使用示例:
- 遍历数组中的元素:
<c:set var="numbers" value="1,2,3,4,5" /> <c:forEach var="number" items="${numbers}"> ${number} </c:forEach> //上述代码将输出数组中的每个数字,即 1,2,3,4,5。
- 遍历集合中的元素:
<c:set var="list" value="${1,2,3,4,5}" /> <c:forEach var="number" items="${list}"> ${number} </c:forEach> //上述代码将输出集合中的每个数字,即 1,2,3,4,5。
- 遍历数组或集合中的元素并应用分隔符:
<c:set var="numbers" value="1,2,3,4,5" /> <c:forEach var="number" items="${numbers}" separator=", "> ${number} </c:forEach> //上述代码将输出数组或集合中的每个数字并用逗号分隔,即 1,2,3,4,5。
- 遍历数组或集合中的元素并使用
varStatus
属性:<c:set var="numbers" value="1,2,3,4,5" /> <c:forEach var="number" items="${numbers}" varStatus="status"> ${status.index + 1}.${number} </c:forEach> //上述代码将输出数组或集合中的每个数字,并显示当前迭代索引,即 1.1,2.2,3.3,4.4,5.5。
7、<c:import>用于在 JSP 页面中包含其他页面的内容。
<c:import url="URL" [charEncoding="字符编码"] [pageContext="页面上下文"] [requestContext="请求上下文"] />
-
url
属性指定要导入的资源的 URL。 -
charEncoding
属性可选,指定要使用的字符编码。 -
pageContext
属性可选,指定要使用的页面上下文。 -
requestContext
属性可选,指定要使用的请求上下文。
以下是 <c:import>
的使用示例:
- 导入资源文件并指定字符编码:
<c:import url="/path/to/page.html" charEncoding="UTF-8" /> //上述代码将导入路径为 /path/to/page.html 的 HTML 文件,并使用 UTF-8 编码,将其内容插入到当前位置。
- 具体用法:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <title><c:import> 标签示例</title> </head> <body> <h1>主页</h1> <p>这是主页的内容。</p> <!-- 使用 <c:import> 标签包含其他页面的内容 --> <c:import url="include.jsp" /> <p>主页的其他内容。</p> </body> </html> /*在这个示例中,我们首先导入了 JSTL 核心标签库,以便使用 <c:import> 标签。 然后,我们在主页中使用了 <c:import> 标签,将名为 include.jsp 的页面包含到主页中。 <c:import> 标签的 url 属性指定了要包含的页面的 URL。在这个示例中,我们将 include.jsp 页面的内容嵌入到主页中。 当您运行主页时,它将显示主页的内容,然后包含 include.jsp 页面的内容。这允许您在不同的页面之间共享或重用通用内容,以便更好地管理和维护您的 JSP 应用程序。*/
二、格式化标签库(Formatting Tags):
1、<fmt:formatDate>
:用于格式化日期。
<fmt:formatDate value="Date对象" [format="日期格式"] />
-
value
属性指定要格式化的日期对象。 -
format
属性可选,指定日期对象的格式。如果未指定该属性,则默认使用 Java 的SimpleDateFormat
类中的short
格式。
以下是一些 fmt:formatDate
的使用示例:
- 将日期对象转换为默认格式的字符串:
<fmt:formatDate value="${today}" /> //上述代码中,${today} 是一个日期对象,它会被格式化为默认格式的字符串。
- 将日期对象转换为指定格式的字符串:
<fmt:formatDate value="${today}" format="yyyy-MM-dd HH:mm:ss" /> //上述代码中,${today} 是一个日期对象,它会被格式化为 "yyyy-MM-dd HH:mm:ss" 格式的字符串。
- 在表单中显示当前日期:
<form> <fmt:formatDate value="${new java.util.Date()}" /> <input type="submit" value="Submit" /> </form> /*上述代码中,${new java.util.Date()} 创建了一个当前日期和时间的对象,它会被格式化为默认格式的字符串,并在表单中显示出来。当用户提交表单时,将发送一个请求,该请求将包含当前日期和时间的字符串。*/
2、<fmt:formatNumber>
:用于格式化数字。
<fmt:formatNumber value="数字对象" [format="数字格式"] [currencyStyle="货币样式"] [pattern="模式"] [locale="地区"] />
-
value
属性指定要格式化的数字对象。 -
format
属性可选,指定数字对象的格式。如果未指定该属性,则默认使用 Java 的DecimalFormat
类中的DEFAULT
格式。 -
currencyStyle
属性可选,指定货币样式。如果指定了该属性,则将数字格式化为指定货币样式的字符串。 -
pattern
属性可选,指定自定义模式。如果指定了该属性,则使用指定的模式格式化数字。 -
locale
属性可选,指定地区。如果指定了该属性,则使用指定地区的格式规则进行格式化。
以下是一些 fmt:formatNumber
的使用示例:
- 将数字对象格式化为默认格式的字符串:
<fmt:formatNumber value="${number}" /> //上述代码中,${number} 是一个数字对象,它会被格式化为默认格式的字符串。
- 将数字对象格式化为百分比格式的字符串:
<fmt:formatNumber value="${percentage}" format="0.00%" /> /*上述代码中,${percentage} 是一个数字对象,它会被格式化为百分比格式的字符串,保留两位小数并显示为百分数形式。*/
- 将数字对象格式化为指定货币样式的字符串:
<fmt:formatNumber value="${amount}" currencyStyle="Currency" /> //上述代码中,${amount} 是一个数字对象,它会被格式化为指定货币样式的字符串,例如美元 ($)。
- 将数字对象按照自定义模式格式化:
<fmt:formatNumber value="${price}" pattern="#,##0.00" /> /*使用 <fmt:formatNumber> 标签,我们格式化了数字 12345.6789。value 属性指定了要格式化的数字,pattern 属性定义了格式化模式。在这个示例中,我们使用' #' 表示可选数字,', '表示千位分隔符,'0 '表示必填数字,'.00 '表示保留两位小数。 <fmt:formatNumber> 标签将格式化后的结果存储在名为 formattedNumber 的变量中。 在页面的其他部分,我们使用 ${formattedNumber} 来显示格式化后的数字。 当您运行这个页面时,它将显示格式化后的数字,例如 12,345.68。这演示了如何使用 <fmt:formatNumber> 标签来格式化数字,使其更易于阅读和呈现。您可以根据需要调整 pattern 属性来满足不同的数字格式化要求。*/
- 将数字对象按照指定地区的格式规则进行格式化:
<fmt:formatNumber value="${number}" locale="fr_FR" /> /*上述代码中,${number} 是一个数字对象,它会被按照法国地区的格式规则进行格式化,例如可能使用逗号作为千位分隔符。*/