一、概述

1.是什么?

  1. 全称是指JSP Standard Tag LibraryJSP标准标签库。<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 的语法有两种形式:没有主体内容、有主体内容

  1. <%
  2. //定义一个变量
  3. int a = 66;
  4. //存入request作用域
  5. request.setAttribute("a",a);
  6. %>
  7. <!--if标签 -->
  8. <c:if test="${a>50}" var= "flag" scope="session" >
  9. <!--test="",一个表达式,结果为Boolean值,如果是true则执行标签中的代码,var定义一个键名,
  10. 存储test的Boolean值,scope表示的是flag存储的作用域是哪个 -->
  11. <h2>a比较大</h2>
  12. </c:if>
  13. <c:if test="${empty a} }">
  14. <!--empty判断a是否存在 -->
  15. <h2>a是存在的</h2>
  16. </c:if>
  17. <!--结果:页面只显示a比较大 -->

(2)choose、when 和 otherwise 标签

  1. choose when 标签的作用与 Java 中的 switch case 关键字相似。
  1. <!--choose,when和otherwise标签 ,
  2. 起作用类似于java中的switch表达式 -->
  3. <!--注意
  4. 1,choose标签中只能有when和otherwise标签,when和otherwise标签中可有其他标签
  5. 2,choose标签中至少有一个when标签
  6. 3,choose标签和otherwise标签中没有属性,when标签必须有test属性
  7. 4,otherwise标签必须放在最后一个when标签之后
  8. 5,当所有的when标签的条件都不成立时,才执行otherwise标签中的语句
  9. 6,when标签不存在穿透
  10. -->
  11. <%
  12. request.setAttribute("a", 4);
  13. %>
  14. <c:choose>
  15. <c:when test="${a>=3&&a<=5} ">
  16. <h2>现在是春天</h2>
  17. </c:when>
  18. <c:when test="${a>=6&&a<=8} ">
  19. <h2>现在是夏天</h2>
  20. </c:when>
  21. <c:when test="${a>=9&&a<=11} ">
  22. <h2>现在是秋天</h2>
  23. </c:when>
  24. <c:when test="${a==4 }">
  25. <h2>现在是初春</h2>
  26. </c:when>
  27. <c:otherwise>
  28. <h2>现在是冬天</h2>
  29. </c:otherwise>
  30. </c:choose>
  31. <!--结果显示为初春 -->

(3)forEach 标签

  1. forEach 是将一个主体内容迭代多次,或者迭代一个对象集合。可以迭代的对象包括所有的 java.util.Collection java.util.Map 接口的实现,以及对象或者基本类型的数组。
  1. <!--forEach标签;
  2. 两种作用,1,将主体内容循环多次
  3. 2,迭代集合 -->
  4. <!--将主体内容循环多次 -->
  5. <c:forEach var="i" begin="1" end="7">
  6. <!--var:用来存放现在被指到的对象,begin开始的位置,end结束的位置 -->
  7. 主体内容:${i }
  8. </c:forEach>
  9. <!--结果为:主体内容:1 主体内容:2 主体内容:3 主体内容:4 主体内容:5 主体内容:6 主体内容:7 主体内容 -->
  10. <!-- 迭代集合 -->
  11. <!-- list -->
  12. <%
  13. List<String> list = new ArrayList<String>();
  14. list.add("xiaoyan");
  15. list.add("lingdong");
  16. list.add("yefan");
  17. request.setAttribute("list", list);
  18. %>>
  19. <c:forEach items="${list}" var="str" varStatus="status" >
  20. ${str }:${status.index }:${status.count }:${status.first }:${status.last }
  21. <!--index表示索引,count表示出现的位数,first表示是否是第一个,last表示是否是最后一个 -->
  22. </c:forEach>
  23. <!--map -->
  24. <%
  25. Map<String,Object> map = new HashMap<String,Object>();
  26. map.put("user1",new User("zs","123"));
  27. map.put("user2", new User("ls","1234"));
  28. request.setAttribute("map",map);
  29. %>
  30. <c:forEach items="${map}" var="user">
  31. ${user.key }:${user.value }
  32. ${user.value.uname }
  33. ${user.value.upwd }
  34. </c:forEach>

三、格式化标签

导入:<%@ taglib uri=“http://java.sun.com/jsp/jstl/fmt” prefix=“fmt” %>
JSTL 提供了格式化和解析数字和日期的标签,我们讨论的有:formatNumber、formatDate、 parseNumber 及 parseDate。

(1)formatNumber 标签

  1. <!-- number格式化 -->
  2. <!--type:按照什么类型进行格式化数据
  3. number:数字
  4. currency:货币
  5. percent:百分比
  6. value:指定要格式化的数值,可以写字面值,还可以从域对象中获取
  7. var:指定格式化红的结果存储到域对象中的键名
  8. scope:指定存储的域范围,page,request,session,application
  9. -->
  10. <!-- 没有主体内容,通过value指定要格式化的数值 -->
  11. <%
  12. request.setAttribute("num1",1000);
  13. request.setAttribute("num2", 88888.6666);
  14. %>
  15. <fmt:formatNumber value="0.49" type="percent" ></fmt:formatNumber>
  16. <fmt:formatNumber value="${num1 }" type="currency"></fmt:formatNumber>
  17. <fmt:formatNumber value="${num1}" type="currency" currencySymbol="$"></fmt:formatNumber>
  18. <fmt:formatNumber value="${num2 }" maxIntegerDigits="3" minFractionDigits="7"></fmt:formatNumber>
  19. <!-- 有主体内容,把要格式化的数据放到两个标签内部 -->
  20. <fmt:formatNumber type="percent">
  21. 12
  22. </fmt:formatNumber>
  23. <fmt:formatNumber type="percent" var = "num" scope="request">
  24. 12
  25. </fmt:formatNumber>
  26. <!--12存入request后,内容不会显示,,需再次写${num} 才会显示-->
  27. ${num }


(2)formatDate 标签

pattern 属性指定更精确的处理日期:

  1. <%
  2. request.setAttribute("date", new Date());
  3. %>
  4. <!--
  5. value:指定要格式化的时间
  6. type:
  7. time:时:分:秒
  8. date:年-月-日
  9. both: 年-月-日 时:分:秒
  10. ***pattern***:自定义格式化时间
  11. -->
  12. <fmt:formatDate value="${date }" type="both" /><br/>
  13. <!-- 2019-9-11 21:34:02 -->
  14. <fmt:formatDate value="${date }" type="time" /><br>
  15. <!-- 21:34:02 -->
  16. <fmt:formatDate value="${date }" type="date" /><br>
  17. <!--2019-9-11 -->
  18. <!--自定义 -->
  19. <fmt:formatDate value="${date}" pattern="yyyy年M月d日--H时:m分:s秒" ></fmt:formatDate>
  20. <!-- 2019年9月11日--21时:34分:2秒 -->

(3)parseNumber 标签

  1. <!--利用 parseNumber 标签可以将数字、货币或百分比的字符串表示法解析成指定语言环境的数字。 -->
  2. <fmt:parseNumber value="20%" type="percent"></fmt:parseNumber>
  3. <!--结果:0.2 -->
  4. <fmt:parseNumber value="¥1000" type="currency"></fmt:parseNumber>
  5. <!--结果:1000 -->
  6. <!--value要转化的内容,type按什么类型转换 -->
  7. <fmt:parseNumber type="percent">
  8. 36%
  9. </fmt:parseNumber>

(4)parseDate 标签

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

  1. <%
  2. request.setAttribute("date", "13:34:56");
  3. request.setAttribute("date2", "2019年09月06号23时56分59秒");
  4. %>
  5. <fmt:parseDate value="${date }" type="time"></fmt:parseDate>
  6. <!-- Thu Jan 01 13:34:56 CST 1970 ,每规定年份就从头开始-->
  7. <fmt:parseDate value="${date2 }" pattern="yyyy年M月d号HH时mm分ss秒"></fmt:parseDate>
  8. <!-- Fri Sep 06 23:56:59 CST 2019,自定义解析格式 -->