JSTL
简介
JSTL(JSP Standard Tag Library, JSP标准标签库),扩展了JSP标签的功能,在JSP中能够用更少代码实现更复杂的操作。
要使用JSTL,需要导入jar包到项目中
- 手动导入:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/,将lib目录下的standard.jar和jstl.jar添加到项目中(WEB-INF/lib/)
- 自动导入(maven, gradle):https://mvnrepository.com/artifact/javax.servlet/jstl,粘贴构建语句到项目构建文件中即可。
JSTL的标签分为五类:
- 核心标签(core),以c开头
- 格式化标签(format),以fmt开头
- XML标签,以xml开头
- SQL标签,以sql开头
- 函数标签,以fn开头
使用
仅仅导入了库还不能直接用JSTL,还需要在相应JSP页面中通过taglib指令导入标签库。这里以JSTL核心标签库(core)为例:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
导入之后就可以使用JSTL标签了。
截止目前,JSTL核心库的标签共13个,分成如下三类:
- 表达式控制:out、set、remove
- 流程控制:catch、if、choose、when、otherwise、forEach、forTokens
- URL操作:import、url、redirect
out - 页面输出:
<c:out value="val"></c:out> <%--页面中显示val字样-->
其中val可为常量也可为变量。
如果是常量,直接使用字面值即可。
如果是变量,需要使用EL表达式${表达式},更多关于EL表达式详见另一篇博客。
当变量不存在时,通过设置out标签的default属性,用来输出value变量不存在的情况:
<c:out value="val" default="WTF"></c:out>
如果val中包含转义字符(<、>等),需要设置out标签的escapeXml属性为false:
<c:out value="<2333>" escapeXml="false"></c:out> <%--页面中显示<2333>字样-->
set - 定义值:
可以在某个作用域中定义值,也可以在JavaBean中定义值。
<%-- 在session作用域中定义变量username,值为"ValdisW" --> <c:set var="username" value="ValdisW" scope="session"></c:set> <%-- 或者 --> <c:set var="username" scope="session">ValdisW</c:set>
当给JavaBean中定义值时,需要在此之前使用useBean注册好一个JavaBean。
<%-- 给id为essay的JavaBean的id属性设置为e12345 --> <c:set target="${essay}" property="id" value="e12345"></c:set>
<%-- 当然这里的value的值也可以写在标签对中间 --->
remove - 删除变量
只能删除某个作用域中定义的变量,不可以删除JavaBean的。
<c:remove var="username" scope="session"></c:remove>