JSTL

JSTL

if标签

定义:
    Java Server Pages Standard Tag Libray(JSTL):JSP 标准标签库、可以解决迭代一个映射或者集		合、条件测试、XML 处理,甚至数据库和访问数据库操作等
准备工作:
	1、导包  jstl.jar以及standard.jar 放到WEB-INF/lib下
	2、<%@taglib uri=”核心标签库路径” prefix=”前缀”%>
			uri中写http://java.sun.com/jsp/jstl/core(叫核心标签库)
			或者http://java.sun.com/jsp/jstl/fmt	(叫格式化标签库)
			前缀可以随意指定,但是一般按照约定熟成的规范来写
	c:if标签:
		格式:
			<c:if test="条件" var="指定将条件结果存域对象中键的名称" scope="指定将条件结果存在哪一个域对象中,默认page|request|session|application">
				主体内容
			</c:if>
			相当于
			if(条件){
				主体内容
			}

代码:

<%--无主体部分 --%>
	<!--
    <c:if test="条件" var="用于存储条件结果的变量" scope="var属性的作用域,默认page">
    </c:if>
    -->
    <%
    request.setAttribute("num", "1");
    %>
    <c:if test="${'1==1'}" var="flag"></c:if> <!-- flase -->
    <c:if test="1==1" var="flag"></c:if> <!-- flase -->
    <c:if test="${'num==1'}" var="flag"></c:if> <!-- true -->
    <c:if test="${1==1}" var="flag"></c:if> <!-- true -->
<%--有主体部分 --%>
	<!--
    <c:if test="条件" var="用于存储条件结果的变量" scope="var属性的作用域,默认page">
    主体内容,条件为true时才执行
    </c:if>
    -->
	<%
    request.setAttribute("num", "1");
    %>
    <c:if test="${num < 10 }">
    <h1>num比10小</h1>
    </c:if>
    <c:if test="${num > 10 }">
    <h1>num比10大</h1>
	</c:if>

choose、when 和 otherwise 标签

choose 和 when 标签的作用与 Java 中的 switch 和 case 关键字相似。otherwise 标签用于默认的条件代码块,如果所有的 when 标签的测试条件运算结果都不为 true,就会执行该代码块。如果有 otherwise 标签,它必须放在最后一个when 标签之后,否则会报错。choose 和 otherwise 标签没有属性,when标签则必须使用 test 属性设定一个条件,用于确定是否处理主体内容。
注意点:
	1、choose标签中只能有when和otherwise标签,when和otherwise标签中可有其他标签
    2、choose中至少有一个when标签
    3、choose标签和otherwise标签没有属性,when标签必须要有test属性
    4、otherwise标签必须放在最后一个when标签之后
    5、当所有的when标签的条件都不成立时,才执行otherwise标签中的语句

代码

 	<%
   	 request.setAttribute("score", 80);
    %>
        <c:choose>
        <c:when test="${score >= 90 }">
        <h2>很优秀!</h2>
        </c:when>
        <c:when test="${score >= 80 && score < 90 }">
        <h2>良好!</h2>
        </c:when>
        <c:when test="${score >= 60 && score < 80 }">
        <h2>及格!</h2>
        </c:when>
        <c:otherwise>
        <h2>学渣!</h2>
        </c:otherwise>

迭代标签forEach

forEach 是将一个主体内容迭代多次,或者迭代一个对象集合。可以迭代的对象包括所有的
java.util.Collection 和 java.util.Map 接口的实现,以及对象或者基本类型的数组。他还可以迭代
java.util.Iterator 和 java.util.Enumeration,但不能在多个动作指令中使用 Iterator 或者
Enumeration,因为 Iterator 或者 Enumeration 都不能重置(reset)。

20190911225633.png

[外链图片转存失败(img-1njzsP8G-1568247823396)(https://i.loli.net/2019/09/11/wLs8SCuQziEFoGm.png)]

代码

<c:forEach var="每次循环的成员(限域变量)" begin="开始数" end="结束数" step="间隔数(默认
是1)" >
主体内容
</c:forEach>
<c:forEach var="i" begin="0" end="10">
${i }、主体内容<br/>
</c:forEach>
<c:forEach var="i" begin="0" end="10" step="3">
${i }、主体内容<br/>
</c:forEach>

迭代List集合

<%
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六");
// 将集合存到域对象中
request.setAttribute("list", list);
%>
<table border="1" style="border-collapse: collapse;">
<tr>
<td>当前成员内容</td>
<td>当前成员的下标</td>
<td>当前循环次数</td>
<td>是否是第一个成员</td>
<td>是否是最后一个成员</td>
</tr>
<c:forEach items="${list}" var="item" begin="0" end="9" varStatus="itemStr">
<tr>
<td>${item}</td>
<td>${itemStr.index }</td>
<td>${itemStr.count }</td>
<td>${itemStr.first }</td>
<td>${itemStr.last }</td>
</tr>
</c:forEach>
</table>
<%
List<User> userList = new ArrayList<>();
User user1 = new User();
user1.setUserId(1);
user1.setUname("张三");
user1.setAge("18");
user1.setSex("男");
User user2 = new User();
user2.setUserId(2);
user2.setUname("李四");
user2.setAge("19");
user2.setSex("女");
User user3 = new User();
user3.setUserId(3);
user3.setUname("王五");
user3.setAge("20");
user3.setSex("男");
userList.add(user1);
userList.add(user2);
userList.add(user3);
request.setAttribute("userList", userList);
%>
<table border="1" style="border-collapse: collapse;">
<tr>
<td>编号</td>
<td>姓名</td>
<td>年龄</td>
<td>性别</td>
</tr>
<c:forEach items="${userList }" var="user">
<tr>
<td>${user.userId }</td>
<td>${user.uname }</td>
<td>${user.age }</td>
<td>${user.sex }</td>
</tr>
</c:forEach>
</table>
<%
Map<String,User> map = new HashMap<>();
map.put("zhangsan", user1);
map.put("lisi", user2

20190911230244.png

迭代Map集合

<%
Map<String,User> map = new HashMap<>();
map.put("zhangsan", user1);
map.put("lisi", user2);
map.put("wangwu", user3);
request.setAttribute("map", map);
%>
<c:forEach items="${map }" var="item">
${item.key }---${item.value }---${item.value.uname }<br>
</c:forEach>

运行结果

20190911230437.png

格式化标签

formatNumber 标签

该标签用指定的格式或精度来格式化数字<fmt:formatNumber> 标签有如下属性:

20190911230635.png

代码(第一种语法,无主体内容)

<%
request.setAttribute("num", 1000);
%>
<fmt:formatNumber var="i" value="0.25" type="percent"></fmt:formatNumber>
${i }
<fmt:formatNumber value="${num }" type="currency"></fmt:formatNumber>
<!-- 25% ¥1,000.00 -->

有主体内容

<%
request.setAttribute("num", 123456.789);
%>
<fmt:formatNumber type="currency">
1000000
</fmt:formatNumber>
<fmt:formatNumber type="number" maxIntegerDigits="4" maxFractionDigits="2">
${num }
</fmt:formatNumber>
<!-- ¥1,000,000.00 3,456.79 -->

formatDate标签

使用指定的风格或模式格式化日期和时间<fmt:formatDate> 标签有如下属性:

20190911231054.png

parseNumber标签

parseNumber 标签可以将数字、货币或百分比的字符串表示法解析成指定语言环境的数字

代码

<%
request.setAttribute("num", "¥1,000.00");
request.setAttribute("num1", "123,456.789");
%>
<fmt:parseNumber value="20%" type="percent"></fmt:parseNumber>
<!-- 0.2 -->
<fmt:parseNumber value="${num }" type="currency"></fmt:parseNumber>
<!-- 1000 -->
<fmt:parseNumber value="${num1 }" type="number" var="aa"></fmt:parseNumber>${aa
}
<!-- 123456.789 -->

parseDate 标签

此标签为指定区域解析日期和时间的字符串表示法,即解析一个代表着日期或时间的字符串

<think>好的,我现在需要帮助用户了解JSTL的使用教程和示例。首先,我应该回顾用户提供的引用内容,确保回答准确。用户提到了几个引用,涉及JSTL的基本概念、核心标签库、与EL的结合以及特定标签的用法,比如<c:import>和<c:url>。用户可能希望了解如何开始使用JSTL,包括配置步骤、常用标签的示例以及最佳实践。 首先,我应该确认JSTL的基本介绍,包括它的作用和优势。根据引用[2],JSTL用于解决常见的逻辑控制问题,如遍历集合、条件测试等,而无需在JSP中编写Java代码。这需要提到JSTL的不同标签库,比如核心库、格式化库、SQL库等,但可能用户更关注核心库的使用。 接下来,用户需要教程和示例,所以需要分步骤说明如何配置JSTL。引用[4]提到需要导入标签库,可能需要说明如何在JSP页面中添加taglib指令,例如<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>。同时,用户可能需要知道如何下载JSTL库并将其添加到项目中,不过具体的下载步骤可能需要简略提及,或者建议查看官方文档。 然后,针对核心标签库的常用标签,需要给出示例。例如,变量操作标签<c:set>和<c:out>,条件判断标签<c:if>、<c:choose>,循环标签<c:forEach>和<c:forTokens>,URL处理标签<c:import>和<c:url>。每个标签都需要一个简单的代码示例,比如使用<c:forEach>遍历列表,用<c:if>进行条件判断。 另外,结合EL(表达式语言)的使用也很重要,引用[1]和[3]提到EL和JSTL的结合可以避免Java代码。因此,在示例中应该展示如何用EL表达式访问变量,例如${user.name}。 可能需要注意JSTL与JSP的版本兼容性,比如JSP 2.0及以上版本对EL的支持,但用户可能没有提到这个问题,所以可能不需要深入,但可以稍微提及。 最后,根据用户提供的引用[4],需要说明<c:import>与<jsp:include>的区别,指出前者可以包含其他Web应用或网络资源,而后者仅限于同一应用。这部分可以作为使用技巧或注意事项来强调。 在生成相关问题的时候,需要考虑用户可能进一步想知道的内容,比如JSTL的其他标签库(如格式化、SQL),与EL的协作细节,常见错误处理,或者性能优化等。因此,相关问题可以围绕这些主题展开。 现在需要确保回答结构清晰,分步骤说明,并包含实际示例。同时,引用正确的来源,比如引用[2]说明JSTL的功能,引用[4]说明<c:import>的用法。每个引用标识要正确对应,比如在讲解核心标签时引用[2],在讲解<c:import>时引用[4]。 检查是否有遗漏的部分,比如配置步骤是否需要详细说明jar包的添加,或者是否需要提及Maven依赖。不过用户可能只需要基础的教程,所以简要说明导入taglib即可,具体依赖管理可能属于更高级的内容,可以放在相关问题中。 总结,回答的结构应该是:简介、配置步骤、核心标签示例(变量、条件、循环、URL)、与EL结合的优势、注意事项或高级用法,最后相关问题。</think>### JavaServer Pages Standard Tag Library (JSTL) 使用教程和示例 #### **1. JSTL简介** JSTL 是 JSP 的标准标签库,提供了一系列标签用于简化页面逻辑控制,例如遍历集合、条件判断、格式化数据等。通过与 EL(Expression Language)结合,开发者可以避免在 JSP 中直接编写 Java 代码,提升代码可维护性[^2]。 --- #### **2. 配置 JSTL** - **步骤1**:下载 JSTL 库(如 `jstl-1.2.jar`),并将其添加到项目的 `WEB-INF/lib` 目录。 - **步骤2**:在 JSP 页面顶部声明标签库: ```jsp <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> ``` 这里 `prefix="c"` 表示使用核心标签库的简写前缀。 --- #### **3. 核心标签库示例** ##### **(1) 变量操作** - **设置变量**:`<c:set>` ```jsp <c:set var="userName" value="Alice" scope="session" /> ``` - **输出变量**:`<c:out>` ```jsp 用户名:<c:out value="${userName}" default="Guest" /> ``` ##### **(2) 条件判断** - **单条件判断**:`<c:if>` ```jsp <c:if test="${user.age >= 18}"> 已成年 </c:if> ``` - **多条件选择**:`<c:choose>` ```jsp <c:choose> <c:when test="${score >= 90}">优秀</c:when> <c:when test="${score >= 60}">及格</c:when> <c:otherwise>不及格</c:otherwise> </c:choose> ``` ##### **(3) 循环遍历** - **遍历集合**:`<c:forEach>` ```jsp <c:forEach items="${userList}" var="user" varStatus="status"> 第${status.index + 1}位用户:${user.name} </c:forEach> ``` - **分割字符串**:`<c:forTokens>` ```jsp <c:forTokens items="Java,Python,C++" delims="," var="lang"> 语言:${lang} </c:forTokens> ``` ##### **(4) URL 处理** - **生成动态 URL**:`<c:url>` ```jsp <a href="<c:url value='/user/profile?id=${userId}' />">查看详情</a> ``` - **包含外部资源**:`<c:import>` ```jsp <c:import url="https://example.com/api/data" charEncoding="UTF-8" /> ``` 与 `<jsp:include>` 不同,`<c:import>` 支持跨应用或网络资源包含[^4]。 --- #### **4. 结合 EL 简化逻辑** JSTL 通常与 EL 配合使用,例如通过 `${}` 直接访问变量或对象属性: ```jsp <c:if test="${empty cart.items}"> 购物车为空 </c:if> ``` --- #### **5. 注意事项** - **作用域管理**:使用 `scope` 属性明确变量作用域(如 `request`、`session`)。 - **错误处理**:可通过 `<c:catch>` 捕获异常: ```jsp <c:catch var="errorMsg"> <%-- 可能出错的代码 --%> </c:catch> <c:if test="${not empty errorMsg}"> 错误:${errorMsg} </c:if> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值