JSTL标签
1 分类
共有以下几种:
核心标签库 (c标签库) //常用,熟练运用
xml标签库(x标签库)//操作xml,但是一般在dao层做,不用了解
sql标签库(sql标签库)//操作sql数据库,但是一般在dao层做,不用了解
2 使用步骤
(标签背后隐藏的java代码,因为jstl标签语言(还有jsp标签)都会被编译成java代码,java代码需要jar包的支持)
需要2个包:核心包+辅助包。jstl-1.2.jar 点击打开链接 standard.jar 点击打开链接
注意:使用javaee5.0以上的项目,会自动导入jstl支持的jar包
使用taglib标签导入标签库: <%@ taglib uri="tld文件的uri名称" prefix="简写" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
注意:上面prefix一般都写c,也可以是其它字母。
核心标签了。若是要使用fmt标签库,fn函数库等,则需根据第2.2中,使用taglib标签指令,添加对应的uri,就能使用了。
3 核心标签库的重点标签
保存数据:<c:set></c:set>
获取数据:<c:out value=""></c:out>
单条件判断:<c:if test=""></c:if>
多条件判断:<c:choose></c:choose>
<c:when test=""></c:when>
<c:otherwise></c:otherwise>
循环数据:<c:forEach items=”” var=””></c:forEach>
<c:forTokens items="" delims=""></c:forTokens>
重定向:<c:redirect></c:redirect>
3.1 <c:set>标签
属性名 | 是否支持EL | 属性类型 | 属 性 描 述 |
value | true | Object | 用于指定属性值 |
var | false | String | 用于指定要设置的Web域属性的名称 |
scope | false | String | 用于指定属性所在的Web域(属性socope的值可为:page/request/session/application |
target | true | Object | 用于指定要设置属性的对象,这个对象必须是JavaBean对象或java.util.Map对象 |
property | true | string | 用于指定当前要为对象设置的属性名称 |
3.2 <c:out>标签
out标签:用于输出一段文本到浏览器中。也可以结合EL表达式,获取域中的值并输出。和EL表达式直接输出唯一区别是可以结合escapeXml属性和default属性作用。
属性名 | 是否支持EL | 属性类型 | 属 性 描 述 |
value | true | Object | 指定要输出的内容 |
escapeXml | true | Boolean | 指定是否将>、<、&、'、" 等特殊字符进行HTML编码转换后再进行输出。默认值为true |
default | true | Object | 指定如果value属性的值为null/””时所输出的默认值 |
3.3 <c:if>标签
if标签:单条件的判断
属性名 | 是否支持EL | 属性类型 | 属 性 描 述 |
test | true | boolean | 决定是否处理标签体中的内容的条件表达式 |
var | false | String | 用于指定将test属性的执行结果保存到某个Web域中的某个属性的名称 |
scope | false | String | 指定将test属性的执行结果保存到哪个Web域中 |
3.4 <c:choose>标签
<c:choose>标签用于指定多个条件选择的组合边界,它必须与<c:when>和<c:otherwise>标签一起使用。使用<c:choose>,<c:when>和<c:otherwise>三个标签,可以构造类似 “if-else if-else” 的复杂条件判断结构。
3.5<c:forEach>标签
< c:forEach > 标签用于对一个集合对象中的元素进行循环迭代操作,或者按指定的次数重复迭代执行标签体中的内容。
forEach中的属性:
begin:从集合中的第begin个元素开始进行迭代,begin的索引值默认从0开始编号。
end:到哪个索引值结束,默认到最后一个元素。
step:指定迭代的步长,即迭代因子的迭代增量,默认是1
items:将要迭代的集合对象
var:当前迭代到的对象
varStatus:当前正在遍历元素的状态对象。(其中count属性:当前遍历的位置,从1开始。)
属性名 | 是否支持EL | 属性类型 | 属 性 描 述 |
var | false | String | 指定将当前迭代到的元素保存到page这个Web域中的属性名称 |
items | true | 任何支持的类型 | 将要迭代的集合对象 |
varStatus | false | String | 指定将代表当前迭代状态信息的对象保存到page这个Web域中的属性名称 |
begin | true | int | 如果指定items属性,就从集合中的第begin个元素开始进行迭代,begin的索引值从0开始编号;如果没有指定items属性,就从begin指定的值开始迭代,直到end值时结束迭代 |
end | true | int | 参看begin属性的描述 |
step | true | int | 指定迭代的步长,即迭代因子的迭代增量 |
3.6 <c:forTokens>标签
forTokens标签:循环切割特殊字符串。
属性名 | 是否支持EL | 属性类型 | 属 性 描 述 |
Items | true | 任何支持的类型 | 将要迭代的集合对象 |
delims | false | String | 字符串的分割符,可以同时有几个分割符(依次写在引号内即可。) |
varStatus | false | String | 指定将代表当前迭代状态信息的对象保存到page这个Web域中的属性名称 |
begin | true | int | 如果指定items属性,就从集合中的第begin个元素开始进行迭代,begin的索引值从0开始编号;如果没有指定items属性,就从begin指定的值开始迭代,直到end值时结束迭代 |
end | true | int | 参看begin属性的描述 |
step | true | int | 指定迭代的步长,即迭代因子的迭代增量 |
var | False | String | 指定将当前迭代到的元素保存到page这个Web域中的属性名称 |
3.7 <c:redirect>标签
< c:redirect > 标签用于将当前的访问请求转发或重定向到其他资源,它可以根据 url 属性所指定的地址,执行类似 < jsp:forward > 这个 JSP 标准标签的功能,将访问请求转发到其他资源;或执行 response.sendRedirect () 方法的功能,将访问请求重定向到其他资源。
属性名 | 是否支持EL | 属性类型 | 属 性 描 述 |
url | true | String | 指定要转发或重定向到的目标资源的URL地址 |
验证Demo如下:
<%@ page language="java" import="java.util.*, com.cn.entity.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>使用jstl核心标签库</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <%-- 使用jstl中的核心标签 库 --%> <%-- set标签:保存数据(保存到域中),默认保存到page域中 --%> <h2>set标签:保存数据(保存到域中),默认保存到page域中,属性socope的值可为:page/request/session/application</h2> <c:set var="name" value="page1111"></c:set> 取出scope默认值(page域)中保存的数据:${name }<br/> <c:set var="name" value="page1111" scope="page"></c:set> 取出page域中保存的数据:${pageScope.name }<br/> <c:set var="name" value="request2222" scope="request"></c:set> 取出request域中保存的数据:${requestScope.name }<br/> <c:set var="name" value="session2222" scope="session"></c:set> 取出session域中保存的数据:${sessionScope.name }<br/> <c:set var="name" value="application2222" scope="application"></c:set> 取出application域中保存的数据:${applicationScope.name }<br/> <hr/> <%-- out标签:用于输出一段文本到浏览器中 --%> <h2>out标签:用于输出一段文本到浏览器中。也可以结合EL表达式,获取域中的值并输出。和EL表达式直接输出唯一区别是可以结合escapeXml属性和default属性作用</h2> 直接输出值:<c:out value="这里写什么,就直接输出什么"></c:out><br/> 默认从page域中获取数据:<c:out value="${name }"></c:out><br/> 用out标签从page域中获取数据:<c:out value="${pageScope.name }"></c:out><br/> 用out标签从request域中获取数据:<c:out value="${requestScope.name }"></c:out><br/> 用out标签从session域中获取数据:<c:out value="${sessionScope.name }"></c:out><br/> 用out标签从application域中获取数据:<c:out value="${applicationScope.name }"></c:out><br/> <%-- out标签与el表达式有区别吗?详见下面的例子。 out标签中的属性: default:当value的值为null后者""空时,可以输出默认值。但是el表达式只能输出空。 escapeXml:是否对value值进行转义(指定是否将>、<、&、'、" 等特殊字符进行HTML编码转换后再进行输出。) false,转义,则将其中的html、xml解析出来。 true,不转义(默认) --%> <% String msg = null; pageContext.setAttribute("msg", msg); %> out标签default属性的作用::<c:out value="${msg }" default="默认值:<h3>这里会原样输出吗?</h3>"></c:out><br/> out标签escapeXml属性的作用:<c:out value="${msg }" default="默认值:<h3>这里会原样输出吗?</h3>" escapeXml="false"></c:out><br/> out标签escapeXml属性的作用(使用EL表达式):<c:out value="${msg }" default="默认值:<h3>这里会原样输出吗?</h3>" escapeXml="${!(empty msg) }"></c:out><br/> EL表达式获取的值:${msg } <hr/> <%-- if标签:单条件的判断 --%> <h2>if标签:单条件的判断</h2> <c:if test="true"> 条件成立,这里会显示出来。<br/> </c:if> <c:if test="${5>3 }"> 条件成立,这里会显示出来。<br/> </c:if> <c:if test="${empty msg }"> 条件成立,这里会显示出来。<br/> </c:if> <c:if test="false"> 条件不成立,这里不会显示出来。<br/> </c:if> <c:if test="${5<3 }"> 条件不成立,这里不会显示出来。<br/> </c:if> <%-- choose标签+when标签+otherwise标签:多条件的判断 --%> <h2>choose标签+when标签+otherwise标签</h2> <c:set var="score" value="83" scope="page"></c:set> 考试成绩为${score }分,成绩为:<c:choose> <c:when test="${score>=90 && score<=100}">优秀</c:when> <c:when test="${score>=80 && score<90}">良好</c:when> <c:when test="${score>=60 && score<80}">一般</c:when> <c:otherwise>不及格</c:otherwise> </c:choose> <hr/> <%-- forEach标签:循环 --%> <% //创建List集合数据 List<Student> list = new ArrayList(); list.add(new Student(1, "木丁西", '男', 24)); list.add(new Student(2, "marry", '女', 18)); list.add(new Student(3, "刘先森", '男', 59)); //将集合保存到page域中 pageContext.setAttribute("list", list); //创建Map集合数据 Map<String, Student> map = new HashMap<String, Student>(); map.put("004", new Student(4, "吴莫愁", '女', 32)); map.put("005", new Student(5, "张馨予", '女', 35)); map.put("006", new Student(6, "木先生", '男', 33)); //将集合保存到page域中 pageContext.setAttribute("map", map); %> <%-- 注意我用c:set存储集合不行 --%> <%-- <c:set var="list2" value="${list }"></c:set> --%> >>>>>>>>>>>>>>>>>>>${empty list }<c:out value="${list }" default="哈哈哈"></c:out> <h2>forEach标签:循环</h2> <%-- forEach中的属性: begin:从集合中的第begin个元素开始进行迭代,begin的索引值默认从0开始编号。 end:到哪个索引值结束,默认到最后一个元素。 step:指定迭代的步长,即迭代因子的迭代增量,默认是1 items:将要迭代的集合对象 var:当前迭代到的对象 varStatus:当前正在遍历元素的状态对象。(其中count属性:当前遍历的位置,从1开始。) --%> <%-- 遍历List --%> <c:forEach begin="0" end="2" step="1" items="${pageScope.list }" var="stu" varStatus="varSta"> 第${varSta.count }个学生-->编号:${stu.id }#姓名:${stu.name }#性别:${stu.sex }#年龄:${stu.age }<br/> </c:forEach> <%-- 遍历Map --%> <c:forEach items="${map }" var="entry"> ${entry.key }=${entry.value }【编号:${entry.value.id }#姓名:${entry.value.name }#性别:${entry.value.sex }#年龄:${entry.value.age }】<br/> </c:forEach> <hr/> <%-- forTokens标签:循环切割特殊字符串 其属性如下: items:将要迭代的集合对象 delims:字符串的分割符,可以同时有几个分割符(依次写在引号内即可。) var:String类型,当前迭代的对象元素 --%> <h2>forTokens标签:循环切割特殊字符串</h2> <% String str = "刘先生+java-php*net-python-木先生"; pageContext.setAttribute("str", str); %> <c:forTokens delims="-*+" items="${str }" var="s" > ${s }<br/> </c:forTokens> <hr/> <%-- redirect:重定向 --%> <h2>redirect:重定向</h2> <%-- <c:redirect url="http://www.baidu.com"></c:redirect> --%> <%-- <c:redirect url="/index.jsp"></c:redirect> --%> </body></html>
效果:
标签:EL,迭代,标签,指定,JSTL,page,属性 From: https://blog.51cto.com/u_15769923/5773830