一、概述
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,自定义解析格式 -->