![e50f9cb56deab1a2fa2e88e5cc344ba3.png](https://i-blog.csdnimg.cn/blog_migrate/0865a74fc237b66002ee9386ddbebd43.jpeg)
1、什么是JSTL标签库?
JSTL 是 apache 对 EL 表达式的扩展(也就是说 JSTL 依赖 EL), JSTL
是标签语言!JSTL 标签使用起来非常方便,它与 JSP 动作标签一样,只不过它不是 JSP 内置的标签,需要我们自己导包,以及指定标签库而已!
如果你使用 MyEclipse 开发 JavaWeb,那么在把项目发布到Tomcat 时,你会发现,MyEclipse 会在 lib 目录下存放 jstl 的 Jar 包!如果你没有使用 MyEclipse 开发那么需要自己来导入这个 JSTL 的 Jar包:jstl-1.2.jar。
2、JSTL标签库的作用?
虽然EL表达式,方便了我们在JSP页面中的取值,但是,遇到判断,循环的操作,只有EL表达式是远远不够的,故此,用来提升在 JSP 页面的逻辑代码的编码效率,使用标签来替换逻辑代码的直接书写,高效,美观,整洁,易读。
3、使用流程:
1、导入jar包:jstl-1.2.jar,
2、引入标签库:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3、常用标签学习:
out标签:
![e5b8d6a7856e7b0dbd3f1c226f03a939.png](https://i-blog.csdnimg.cn/blog_migrate/6579b0a95d986a9e28f9712fd60066bb.png)
作用:结合EL表达式将数据响应给浏览器,如果EL表达式没有取到数据则可以使用default属性声明默认值。
![cc835ffd75addefe0f80a41630c6c822.png](https://i-blog.csdnimg.cn/blog_migrate/7997763871a51d51abfbc5bd2603630c.jpeg)
![9b643937a7c53e4ae436794bc98bc050.png](https://i-blog.csdnimg.cn/blog_migrate/133230f67e34b9db6512a9c7891acf34.png)
set标签学习:
作用:
将数据存储到指定的作用域中,默认是pageContext作用域
![4893b7721daca88f146553773d60984e.png](https://i-blog.csdnimg.cn/blog_migrate/26c2a5b4af8ea7de5d6501fbe70d07b0.jpeg)
remove标签的学习:
![c592d871ea7244f2cb8a5ef2756c17a9.png](https://i-blog.csdnimg.cn/blog_migrate/2324a7378fdfd9cb9b2f59e72c756d79.png)
remove标签:<c:remove var="要删除数据的键名" scope="作用域名"/>
作用:删除作用域中的数据,默认是删除四个作用域中的符合要求的数据。
但是可以通过scope属性指明要删除的作用域数据。
注意:
1、使用pageContext.removeAttriute("键名"), 此方法会将四个作用域中的符合要求的数据全部删除
2、使用pageContext.removeAttriute(String name,int scope)
3、指明要删除的作用域中的数据 scope的值1为 pageContext,2为request ,3为 session,4为 application
4、使用request.removeAttibute("键名") 删除当前作用域符合要求的数据
5、使用session.removeAttibute("键名") 删除当前作用域符合要求的数据
6、使用application.removeAttibute("键名") 删除当前作用域符合要求的数据
逻辑判断标签
1、单分支判断标签:<c:if test="${表达式}">数据</c:if>
作用:可以根据el表达式进行一定程度的单分支逻辑判断。
注意:
test属性中书写的是EL表达式,或者说是EL表达式的逻辑表达式。
该标签只能进行EL表达式相关的逻辑判断。不能进行EL表达式不能获取的数据的逻辑处理
![29be32d6a057d0e20a9ba17de5c62585.png](https://i-blog.csdnimg.cn/blog_migrate/db70f87f78d50705764896c4bfd9b843.jpeg)
2、多分支判断标签:
<c:choose>
<c:when test="${表达式}"></c:when>
<c:when test="${表达式}"></c:when>
..
<c:otherwise></c:otherwise>
</c:choose>
注意:符合条件后只会执行一个分支,其他分支不会执行。
![5be8e34286e39e890af7f74946e07130.png](https://i-blog.csdnimg.cn/blog_migrate/58ebbd1bf9d063f55d66b3a132a169e9.jpeg)
3、循环标签:
<c:foreach>
循环体
</c:foreach>
属性:
begin:声明循环的开始位置
end:声明循环的结束位置
step:声明循环的步长
varStatus:声明变量记录循环状态 ,例如变量名:i
注意:记录的数据存储到了作用域中可以直接使用El表达式进行获取
示例: ${i.index} 获取当次循环的下标
${i.count} 获取当次循环的次数
${i.first} 判断是否是第一次循环
${i.last} 判断是否是最后一次循环
items:声明要遍历的数据,可以是集合和数组等
注意:要使用EL表达式来获取
var:声明变量记录每次遍历的结果。可以做循环体中使用使用EL表达式获取遍历出来的数据
![88e7bacf939ec60dccde82c11d215bc7.png](https://i-blog.csdnimg.cn/blog_migrate/c8a62c69b5ed76989ceadf2cda5ec4b4.jpeg)
![14bec8054deeebeda262fc15f8ffe139.png](https://i-blog.csdnimg.cn/blog_migrate/d066eccce8d2b31a5354a13cb8aaa1ab.png)
遍历List集合:
![56c17978c9766f79254d2b2775ab57bc.png](https://i-blog.csdnimg.cn/blog_migrate/5305a4442eec40974e3538de50c7f4a4.jpeg)
遍历map集合:
![c33d2167d87e9d4b2b9d89212ce751bc.png](https://i-blog.csdnimg.cn/blog_migrate/ec3f977614f85a94f99d149d9209fde1.jpeg)