一、概述
1.是什么?
全称是指JSP Standard Tag Library;JSP标准标签库。<br /> EL表达式主要是为了替换jsp中的表达式脚本,而标签库则是为了替换代码脚本;让jsp页面更加简洁。
2.五个不同功能标签库组成
| 功能范围 | url | 前缀 |
|---|---|---|
| 核心标签库 (重) | http://java.sun.com/jsp/jstl/core | c |
| 格式化 | http://java.sun.com/jsp/jstl/fmt | fmt |
| 函数 | http://java.sun.com/jsp/jstl/functions | fn |
| 数据库(不使用) | http://java.sun.com/jsp/jstl/sql | sql |
| xml(不使用) | http://java.sun.com/jsp/jstl/xml | x |
在jsp标签库中使用taglib指令引入标签库
二、使用核心标签
导入:<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core“ %>
含 Web 应用的常见工作,比如:循环、表达式 值、基本输入输出等。
(1)if标签
if 标签先对某个条件进行测试,如果该条件运算结果为 true,则处理它的主体内容,测试结果保存 在一个 Boolean 对象中,并创建一个限域变量来引用 Boolean 对象。可以利用 var 属性设置限域变量 名,利用 scope 属性来指定其作用范围。
if 的语法有两种形式:没有主体内容、有主体内容
<%//定义一个变量int a = 66;//存入request作用域request.setAttribute("a",a);%><!--if标签 --><c:if test="${a>50}" var= "flag" scope="session" ><!--test="",一个表达式,结果为Boolean值,如果是true则执行标签中的代码,var定义一个键名,存储test的Boolean值,scope表示的是flag存储的作用域是哪个 --><h2>a比较大</h2></c:if><c:if test="${empty a} }"><!--empty判断a是否存在 --><h2>a是存在的</h2></c:if><!--结果:页面只显示a比较大 -->
(2)choose、when 和 otherwise 标签
choose 和 when 标签的作用与 Java 中的 switch 和 case 关键字相似。
<!--choose,when和otherwise标签 ,起作用类似于java中的switch表达式 --><!--注意1,choose标签中只能有when和otherwise标签,when和otherwise标签中可有其他标签2,choose标签中至少有一个when标签3,choose标签和otherwise标签中没有属性,when标签必须有test属性4,otherwise标签必须放在最后一个when标签之后5,当所有的when标签的条件都不成立时,才执行otherwise标签中的语句6,when标签不存在穿透--><%request.setAttribute("a", 4);%><c:choose><c:when test="${a>=3&&a<=5} "><h2>现在是春天</h2></c:when><c:when test="${a>=6&&a<=8} "><h2>现在是夏天</h2></c:when><c:when test="${a>=9&&a<=11} "><h2>现在是秋天</h2></c:when><c:when test="${a==4 }"><h2>现在是初春</h2></c:when><c:otherwise><h2>现在是冬天</h2></c:otherwise></c:choose><!--结果显示为初春 -->
(3)forEach 标签
forEach 是将一个主体内容迭代多次,或者迭代一个对象集合。可以迭代的对象包括所有的 java.util.Collection 和 java.util.Map 接口的实现,以及对象或者基本类型的数组。
<!--forEach标签;两种作用,1,将主体内容循环多次2,迭代集合 --><!--将主体内容循环多次 --><c:forEach var="i" begin="1" end="7"><!--var:用来存放现在被指到的对象,begin开始的位置,end结束的位置 -->主体内容:${i }</c:forEach><!--结果为:主体内容:1 主体内容:2 主体内容:3 主体内容:4 主体内容:5 主体内容:6 主体内容:7 主体内容 --><!-- 迭代集合 --><!-- list --><%List<String> list = new ArrayList<String>();list.add("xiaoyan");list.add("lingdong");list.add("yefan");request.setAttribute("list", list);%>><c:forEach items="${list}" var="str" varStatus="status" >${str }:${status.index }:${status.count }:${status.first }:${status.last }<!--index表示索引,count表示出现的位数,first表示是否是第一个,last表示是否是最后一个 --></c:forEach><!--map --><%Map<String,Object> map = new HashMap<String,Object>();map.put("user1",new User("zs","123"));map.put("user2", new User("ls","1234"));request.setAttribute("map",map);%><c:forEach items="${map}" var="user">${user.key }:${user.value }${user.value.uname }${user.value.upwd }</c:forEach>
三、格式化标签
导入:<%@ taglib uri=“http://java.sun.com/jsp/jstl/fmt” prefix=“fmt” %>
JSTL 提供了格式化和解析数字和日期的标签,我们讨论的有:formatNumber、formatDate、 parseNumber 及 parseDate。
(1)formatNumber 标签
<!-- number格式化 --><!--type:按照什么类型进行格式化数据number:数字currency:货币percent:百分比value:指定要格式化的数值,可以写字面值,还可以从域对象中获取var:指定格式化红的结果存储到域对象中的键名scope:指定存储的域范围,page,request,session,application--><!-- 没有主体内容,通过value指定要格式化的数值 --><%request.setAttribute("num1",1000);request.setAttribute("num2", 88888.6666);%><fmt:formatNumber value="0.49" type="percent" ></fmt:formatNumber><fmt:formatNumber value="${num1 }" type="currency"></fmt:formatNumber><fmt:formatNumber value="${num1}" type="currency" currencySymbol="$"></fmt:formatNumber><fmt:formatNumber value="${num2 }" maxIntegerDigits="3" minFractionDigits="7"></fmt:formatNumber><!-- 有主体内容,把要格式化的数据放到两个标签内部 --><fmt:formatNumber type="percent">12</fmt:formatNumber><fmt:formatNumber type="percent" var = "num" scope="request">12</fmt:formatNumber><!--12存入request后,内容不会显示,,需再次写${num} 才会显示-->${num }
(2)formatDate 标签
pattern 属性指定更精确的处理日期:
<%request.setAttribute("date", new Date());%><!--value:指定要格式化的时间type:time:时:分:秒date:年-月-日both: 年-月-日 时:分:秒***pattern***:自定义格式化时间--><fmt:formatDate value="${date }" type="both" /><br/><!-- 2019-9-11 21:34:02 --><fmt:formatDate value="${date }" type="time" /><br><!-- 21:34:02 --><fmt:formatDate value="${date }" type="date" /><br><!--2019-9-11 --><!--自定义 --><fmt:formatDate value="${date}" pattern="yyyy年M月d日--H时:m分:s秒" ></fmt:formatDate><!-- 2019年9月11日--21时:34分:2秒 -->
(3)parseNumber 标签
<!--利用 parseNumber 标签可以将数字、货币或百分比的字符串表示法解析成指定语言环境的数字。 --><fmt:parseNumber value="20%" type="percent"></fmt:parseNumber><!--结果:0.2 --><fmt:parseNumber value="¥1000" type="currency"></fmt:parseNumber><!--结果:1000 --><!--value要转化的内容,type按什么类型转换 --><fmt:parseNumber type="percent">36%</fmt:parseNumber>
(4)parseDate 标签
此标签为指定区域解析日期和时间的字符串表示法。即解析一个代表着日期或时间的字符串。
<%request.setAttribute("date", "13:34:56");request.setAttribute("date2", "2019年09月06号23时56分59秒");%><fmt:parseDate value="${date }" type="time"></fmt:parseDate><!-- Thu Jan 01 13:34:56 CST 1970 ,每规定年份就从头开始--><fmt:parseDate value="${date2 }" pattern="yyyy年M月d号HH时mm分ss秒"></fmt:parseDate><!-- Fri Sep 06 23:56:59 CST 2019,自定义解析格式 -->
