JSTL
一、认识JSTL表达式
1.什么是JSTL
- JSTL是Java server pages standarded tag library的缩写,即java标准标签库
- JSTL百度百科
- JSTL是java中的一个订制标签库集
- JSTL标准标签库(JSTL)是一个JSP标准集合,它封装了JSP应用的通用核心功能。
- 根据JSTL标签所提供的功能,可以将其分为五5个类别。
- 核心标签(常用)
- 格式化标签
- SQL标签
- XML标签
- JSTL函数
2.为什么要使用JSTL
- 实现了JSP页面代码的复用
- 基于标签库原理,重复
- 书写JSP页面的可读性强
- 长得很像XML,方便前端检查和参与修改
二、JSTL环境搭建
- maven官网搜索jstl的依赖
- 导入到项目
- 在JSP页面引入jar包
三、JSTL表达式的核心标签
1.13个核心标签
2.按功能划分四类
从功能上可以分为4类:
按照功能划分 | 包含的标签 |
---|---|
表达式控制标签 | out set remove catch |
流程控制标签 | if choose when otherwise |
循环标签 | forEach forTokens |
URL标签 | import url redirect |
四、JSTL常用标签详细讲解
1.表达式控制标签
out标签的用法:
- 输出常量
- 可以在value属性中直接赋值
- 输出变量
- 变量不存在的时候可以配合default属性输出默认值,还可以通过escapeXml控制转义字符的输出格式
- var设定存放值的变量
实例:
<c:set var="age" scope="page" value="18"></c:set>
<c:out value="${pageScope.age}"/>
<c:out value="你好,Jstl"/>
set标签的用法:
-
存值到scope中
- 可以将值以变量的形式存放到指定的范围
- scope设定存放值的内容
- value指定存放值的内容
- var设定存放的变量
实例:
<c:set var="age" value="18" scope="page"/>
${age-1}
- 存值到JavaBean的属性中
- target属性指定javabean的对象
- property属性指定要赋值给javabean对象的那个属性
- value指定存放值的内容
remove标签的用法:
- remove掉某一个变量
- var属性是必选的
- scope属性是必选的
注意:
如果不同的scope中存在一样的变量,可以通过scope属性指定删除哪个scope中的变量
实例:
<c:set var="address" scope="page" value="hn"></c:set>
<c:out value="${pageScope.address}"/>
<c:remove var="address" scope="page"/>
<c:out value="${pageScope.address}"/>
catch标签的用法:
- catch标签可以包含容易出错的JSTL标签(逻辑)
- var属性定义错误信息的输出的变量名
实例:
<%--catch标签--%>
<c:catch var="error">
<%--压根就没有student,看它报什么错--%>
<c:set target="student" property="name" value="xiaoming"/>
</c:catch>
<c:out value="${error}"/>
2.流程控制标签
if标签的用法:
- 用来实现分支条件的控制
- test属性用来存放判断条件,一般使用EL表达式来编写
- var属性指定名称用来存放判断结果类型为true还是false
- scope属性用来存放指定var属性存放的范围
实例:
<c:set var="age" value="18" scope="page"> </c:set>
<c:if test="${pageScope.age>17}">我大于17</c:if>
<c:if test="${pageScope.age<=17}">我小于等于17</c:if>
choose、when、otherwise标签的用法:
- 通常这三个标签放在一起来使用。
<c:choose>
标签嵌套在<c:when>
和<c:otherwise>
标签的外面作为父标签来使用。<c:choose>
标签和<c:when>
标签也可以组合使用。
实例一:三个标签一起使用
<c:set var="score" value="88"/>
<c:choose>
<c:when test="${score>90}">优秀</c:when>
<c:when test="${score<=90 and score>80}">良好</c:when>
<c:when test="${score<=80 and score>70}">良好</c:when>
<c:otherwise>不及格</c:otherwise>
</c:choose>
结果显示:良好
实例二:只用choose和when标签
<c:choose>
<c:when test="${score>90}">优秀</c:when>
<c:when test="${score<=90 and score>80}">良好</c:when>
<c:when test="${score<=80 and score>70}">良好</c:when>
<c:when test="${score<=70}">不及格</c:when>
</c:choose>
结果显示为:良好
3.循环标签
forEach标签的用法(重点!!):
- 根据循环条件遍历集合中的元素
- var设定变量名用于存储从集合中取出的元素(必须无默认值)
- items指定要遍历的集合
- begin、and用于指定遍历的起始位置和终止位置(有默认值)
- step指定循环的步长(有默认值)
- varStatus通过index、count、first、last几个状态值,描述begin和end子集中的元素的状态。
实例1(遍历常量):
<table border="1">
<c:forEach var="i" begin="1" end="10" step="1" varStatus="j">
<%//设置隔行变色%>
<tr <c:if test="${j.index%2==0}"> style="background-color: pink" </c:if> >
<td>
<c:out value="${i}"/>
</td>
</tr>
</c:forEach>
</table>
实例2(遍历实体对象集合):
<%
Student student1=new Student(1,"小红");
Student student2=new Student(2,"小明");
List<Student> list=new ArrayList<>();
list.add(student1);
list.add(student2);
pageContext.setAttribute("list",list);
%>
<table border="1">
<tr><td>ID</td><td>姓名</td></tr>
<c:forEach var="student" items="${pageScope.list}" step="1" varStatus="j">
<%//设置隔行变色%>
<tr <c:if test="${j.index%2==0}"> style="background-color: pink" </c:if> >
<td>
<c:out value="${student.id}"/>
</td>
<td>
<c:out value="${student.name}"/>
</td>
</tr>
</c:forEach>
</table>
forTookens标签的用法
- 用于浏览字符串,并根据指定的字符串将字符串截取。
- items指定被迭代的字符串
- delims指定使用的分隔符
- var指定用来存放遍历的元素
实例:
<c:set var="zifu" value="中国,美国,英国,法国" scope="page"/>
<c:forTokens items="${pageScope.zifu}" delims="," var="z">
${z}<br>
</c:forTokens>
效果:
4.URL标签
import标签的用法:
- 可以把其他静态或者动态文件包含到本jsp页面。
- 同< jsp:include>的区别为:只能包含同一个web应用中的文件
- 而< c:import>可以包含其他web应用下的文件,甚至是网络上的资源
redirect标签的用法:
- 该标签用来实现请求的重定向,同时可以在url中加入指定的参数
- url指定重定向页面的地址,可以是一个String类型的绝对地址或者相对地址
- context用来导入其他web应用 中的页面。
实例:
<c:if test="${2>1}">
<c:redirect url="testImport.jsp"/>
</c:if>
url标签的用法:
- 该标签用于动态生成一个String类型的url,可以同<c:param>标签共同使用,也可以使用html的< a>
标签实现超链接。- value表示url路径值
- var将url的路径存放在变量中
- scope var变量的范围
实例:
<c:url var="myurl" value="test.jsp">
<c:param name="id" value="1"/>
<c:param name="name" value="xiaoming"/>
</c:url>
内容是:${myurl}<br>
<a href="${myurl}">我的超链接</a>
效果:
五、顺便一提格式化标签库
1.formatDate标签的详解
实例:
--不要忘记这个标签库的导入
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
--正文代码
<%
Date date=new Date();
pageContext.setAttribute("date",date);
%>
${pageScope.date}
<br>
<fmt:formatDate value="${pageScope.date}" pattern="yyyy-MM-dd hh:mm:ss"/>
效果:
六、顺便一提函数标签库
1.length标签
实例:
${fn:length("abc")}
页面显示:3