JavaWeb:JSTL
JSTL
说明
什么是JSTL?
JSP标准标签库(JavaServer Pages Standard Tag Library,JSTL)是一个定制的标签库的集合,用来解决像遍历map或者集合、条件测试、XML处理,甚至数据库访问和数据操作等常见的问题。
JSTL库的安装
下载地址:
• 官方下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
• 菜鸟教程网下载地址:jakarta-taglibs-standard-1.1.2.zip
安装:
将jakarta-taglibs-standard-1.1.2/lib/下的两个jar文件:standard.jar和jstl.jar文件拷贝到/WEB-INF/lib/下并添加至环境变量。
然后在IDEA中加入tld约束文件:
同样的操作加入其余四个tld约束文件:
区域 | URI | 前缀 |
---|---|---|
XML | http://java.sun.com/jsp/jstl/xml | x |
国际化 | http://java.sun.com/jsp/jstl/fmt | fmt |
数据库 | http://java.sun.com/jsp/jstl/sql | sql |
函数 | http://java.sun.com/jsp/jstl/functions | fn |
在JSP中使用JSTL
在JSP页面中引用JSTL库,必须在在JSP页面的开头做以下声明:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core">
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml">
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt">
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql">
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions">
说明:
前缀可以使任意的,但是为了更加规范,建议采用如此简写形式。
一般行为
<c:out>标签
说明:
out标签可以将一个表达式的结果打印到网页上,这个表达式可以是基于<%=?%>的传统形式,也可以是EL表达式。
演示:
1 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"> 2 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 3 <html> 4 <head> 5 <title>$Title$</title> 6 </head> 7 <body> 8 <%--默认值有两种表示方式--%> 10 <c:out value="${param.username}"> 11 默认值 12 </c:out> 13 14 <c:out value="${param.username}" default="默认值"/> 15 </body> 16 </html>
<c:set>标签
说明:
set标签具有以下三个作用:
1.为String类型的命名变量设定值。
2.如果命名变量为JavaBean,那么为这个JavaBean对象的特定属性设定值。
3.如果命名变量为Map类型,那么为这个Map对象中的特定Key设定值。
演示:
1.为String类型的命名变量设定值。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <c:set var="命名变量的名字" value="哈哈哈" scope="session"/> <c:set var="user" value="Tom" scope="session"/> <c:out value="${sessionScope.user}" default="unknow"/> </body> </html>
2.如果命名变量为JavaBean,那么为这个JavaBean对象的特定属性设定值。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <jsp:useBean id="product" scope="session" class="domain.Product"/> <html> <head> <title>Title</title> </head> <body> <c:set target="${product}" property="name" value="白象方便面"/> <c:out value="${product.name}" default="unknow"/> </body> </html>
3.如果命名变量为Map类型,那么为这个Map对象中的特定Key设定值。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <jsp:useBean id="hashmap" class="java.util.HashMap" scope="request"/> <html> <head> <title>Title</title> </head> <body> <c:set target="${hashmap}" property="1" value="Monday"/> <c:set target="${hashmap}" property="2" value="Tuesday"/> <c:set target="${hashmap}" property="3" value="Wednesday"/> <c:out value="${hashmap.get('1')}" default="unknow"/> </body> </html>
<c:remove>标签
说明:
reomve标签用于删除特定范围内的命名变量。
演示:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <jsp:useBean id="hashmap" class="java.util.HashMap" scope="request"/> <html> <head> <title>Title</title> </head> <body> <c:set target="${hashmap}" property="1" value="Monday"/> <c:remove var="hashmap" scope="request"/> <c:out value="${hashmap.get('1')}" default="unknow"/> </body> </html>
条件行为
<c:if>标签
说明:
用于实现Java语言中的if语句的功能。
演示:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <%--测试结果将保存在result变量中--%> <c:if test="${param.username=='Tom'}" var="result" scope="request"> <%--如果测试成功,则会输出true--%> <c:out value="${result}"/> </c:if> </body> </html>
<c:choose>、<c:when>、<c:otherwise>
说明:
<c:choose>、<c:when>、<c:otherwise>三个标签一起连用,可以实现Java语言中的if-else语句的功能。
演示:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <c:choose> <c:when test="${empty param.username}"> Noknown user </c:when> <c:when test="${param.username=='Tom'}"> Tom </c:when> <c:otherwise> Other </c:otherwise> </c:choose> </body> </html>
迭代标签
<c:forEach标签>
说明:
forEach标签用于遍历集合中的对象,并且能重复执行标签主体。
演示:
1.基本用法:
<%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% List books = new ArrayList(); books.add("JavaWeb程序设计"); books.add("Java程序设计"); books.add("JSP程序设计"); %> <c:forEach var="book" items="<%=books%>"> ${book} </c:forEach> </body> </html>
2.foreach的varStatus属性
varStatus属性用于设定一个LoopTagStatus类型的命名变量,它位于NESTED范围,这个命名变量包含了从集合中取出的当前元素的状态信息。
• count 当前元素在集合中的序号,从1开始计数。
• index 当前元素在集合中的索引,从0开始计数。
• first 当前元素是否时集合中的第一个元素
• last 当前元素是否是集合中的最后一个元素
<%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% List books = new ArrayList(); books.add("JavaWeb程序设计"); books.add("Java程序设计"); books.add("JSP程序设计"); %> <c:forEach var="book" items="<%=books%>" varStatus="status"> ${status.count} ${status.index} ${status.first} ${status.last} ${book}<br> </c:forEach> </body> </html>
3.begin、end、step
begin、end、step分别指定循环的起始索引、结束索引和步长。
<%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% List books = new ArrayList(); books.add("JavaWeb程序设计"); books.add("Java程序设计"); books.add("JSP程序设计"); %> <c:forEach var="book" items="<%=books%>" varStatus="status" begin="1" end="2" step="1"> ${status.count} ${status.index} ${status.first} ${status.last} ${book}<br> </c:forEach> </body> </html>
4.可以遍历的集合
forEach可以遍历的集合包括:
• Set、List、Map、Iterator、Enumeration接口的实现类。
<%@ page import="java.util.HashMap" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% HashMap hashMap = new HashMap(); hashMap.put("one","Monday"); hashMap.put("two","Tuesday"); hashMap.put("three","Wednesday"); %> <c:forEach var="week" items="<%=hashMap%>"> ${week.key} ${week.value}<br> </c:forEach> </body> </html>
• Java数组
• 以逗号隔开的字符串
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% String names = "Tom,Mike,Juice"; %> <c:forEach var="name" items="<%=names%>"> ${name}<br> </c:forEach> </body> </html>
<c:forTokens>标签
说明:
forTokens标签用于遍历字符串中用特定分隔符分割的子字符串,并且能重复执行标签主体。
演示:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% String names = "Tom|Mike|Juice"; %> <c:forTokens var="name" items="<%=names%>" delims="|"> ${name}<br> </c:forTokens> </body> </html>