什么是JSTL
JSTL是对EL表达式的扩展,JSTL是标签语言!规范了每个标签的职责范围。
JSTL标签库
core:核心标签库
fmt:格式化标签库
导标签包
<%@ page pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%@ taglib prefix="ths" uri="/WEB-INF/tag/ths.tld"%>
<c:set var="ctx" value="${pageContext.request.contextPath}" />
外部文件导入方式
静态导入:
<%@ include file="included.htm" %>
被导入页面的编译指令会起作用;
先把文件包含就来,然后统一编译;
如果含有同一个变量名最后编译通不过。
动态导入
<jsp:include page="inlayingJsp.jsp" flush="true"/>
动态导入则在Servlet中使用include方法来引入被导入页面的内容。
动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的body内容。
11个内置对象
-
pageScope:获取pageContext域属性,相当于pageContext.getAttribute(“xxx”)
-
requestScope:获取request域属性,相当于request.getAttribute(“xxx”)
-
sessionScope:获取session域属性,相当于session.getAttribute(“xxx”)
-
applicationScope:获取application域属性,相当于application.getAttribute(“xxx”)
-
param:对应参数,它是一个Map,其中key是参数,value是参数值,适用于单值的参数,相当于request.getParameter(“xxx”)
-
paramValues:对应参数,她是一个Map,其中key是参数,value是多个参数值,适用于多值的参数,相当于request.getParameterValues(“xxx”)
-
header:对应请求头,它是一个Map,其中key表示头名称,value是单个头值,适用于单值的请求头,相当于request.getHeader(“xxx”)
-
headerValues:对应请求头,它是一个Map,其中key表示头名称,value是多个头值,适用于多值的请求头,相当于request.getHeaders(“xxx”)
-
initParam:获取web.xml中内的参数,${ initParam.xxx},xxx就是标签内的值,进而得到中的值
-
cookie:用于获取cookie,Map<String,Cookie>,其中key是cookie的name,value是cookie对象,例如${cookie.JSESSIONID.value }就是获取sessionId
-
pageContext:可以获取JSP九大内置对象,相当于使用该对象调用getxxx()方法,例如pageContext.getRequest()可以写为${pageContext.request)
四个域
- pageScope
- requestScop
- sessionScope
- applicationScope
c:out
<c:out value=”aaa”/>
输出aaa字符串常量 aaa
<c:out value=”${aaa}” default=”xxx”/>
输出aaa变量值 与${aaa}相同 默认值xxx填充
c:set
<c:set var=”a” value=”hello” scope=”session”/>
在session中添加name为a,value为hello的数据。默认pageContext域
c:remove
<c:remove var="a" scope=”page”/>
删除page域的a变量;不写时默认所有域a变量
c:url
<c:url value="/liuy/list">
<c:param name="username" value="abc"/>
<c:param name="password" value="123"/>
</c:url>
返回路径:/demo/liuy/list?username=abc&password=123
如果参数中包含中文,那么会自动使用URL编码!
c:if
<c:set value="1" var="v1"/>
<c:set value="4" var="v2"/>
<c:if test="${v1 lt v2}">v1 ==v2</c:if>
如果v1<v2 输出v1==v2---》结果v1==v2
c:forEach c:choose
varStatus :循环状态对象。
count:int类型,当前以遍历元素的个数;
index:int类型,当前元素的下标;
first:boolean类型,是否为第一个元素;
last:boolean类型,是否为最后一个元素;
current:Object类型,表示当前项目。
//循环List
<c:forEach items="${list}" var="item" varStatus="vs">
<c:choose>
<c:when test="${item mod 2==0}">
<td bgcolor="aqua">${item}
</c:when>
<c:otherwise>
<td>${item}
</c:otherwise>
</c:choose>
</td>
<td>${vs.index}</td>
</c:forEach>
//循环Map
<c:forEach var="item" items="${stu }">
<c:out value="${item.key }: ${item.value }"/><br/>
</c:forEach>
fmt:formatDate
2021-11-30 <fmt:formatDate value="${today}" type="date"/>
13:40:00 <fmt:formatDate value="${today}" type="time"/>
2021-11-30 13:40:00 <fmt:formatDate value="${today}" type="both"/>
2021年11月30日 <fmt:formatDate value="${today}" dateStyle="long"/>
2021年11月30日 星期二 <fmt:formatDate value="${today}" dateStyle="full"/>
2021-11-30 13:49:02 <fmt:formatDate value="${today}" pattern="yyyy-MM-dd HH:mm:ss"/>
fmt:formatNumber
12,456,789.123 <fmt:formatNumber value="${n}" />
¥12,456,789.12 <fmt:formatNumber value="${n}" type="currency"/>
12,456,789.123 <fmt:formatNumber value="${n}" pattern="###,###,###.####"/>
12,456,789.1230 <fmt:formatNumber value="${n}" pattern="###,###,###.0000"/>
12456789.123 <fmt:formatNumber value="${n}" groupingUsed="false"/>
0,012,456,789.123 <fmt:formatNumber value="${n}" maxIntegerDigits="12" minIntegerDigits="10"/>
12,456,789.12 <fmt:formatNumber value="${n}" maxFractionDigits="2" minFractionDigits="2"/>
12% <fmt:formatNumber value="${p}" type="percent"/>