【JSP05】JSTL核心标签库

所谓的标签库就是一系列的标签组成的库或者规范,例如html就是一套标签库;

1 引入JSTL核心标签库

由于历史的原因,JSTL标签库并没有被JSP内置,所以如果需要运用JSTL的话需要进行一些前置工作:

配置jar包

  • 在javaEE工程下的WEB-INF目录下创建一个新的目录,名称为lib;

  • 将需要使用的jar包放入该目录;

  • Idea将该目录设置为lib目录;

引入之后就可以使用JSTL标签库了,在JSP页面引入JSTL核心标签库:

  • prefix:标签库的前缀,可以自定义,习惯上核心标签库会选择"c";配置完毕前缀表示JSTL核心标签库中的标签都会以字母c开头,例如<c:if...;

  • uri:标签库路径,每一个不同的标签库都是一个不同的固定值;

2 JSTL中的作用域数据操作

在JSTL核心标签库中的作用域数据操作标签是setout,使用如下:

JSTL中的作用域数据操作 <br>
<c:set scope="session" var="sex" value="male"/>
<c:out value="${sessionScope.sex}" default="没有找到数据"/>
  • <c:set scope="session" var="sex" value="male"/>:在JSP页面中向作用域中存放数据;

    • scope:作用域;

    • var:键;

    • value:值;

  • <c:out value="${sessionScope.sex}"/>:从作用域中获取数据并向页面做输出展示,一般会配合EL表达式使用;

    • value:获取到的数据;

    • default:没有找到数据的显示;

页面展示:

3 JSTL中的选择语句

3.1 if标签

if标签的使用如下:

if标签 <br>
<c:if test="${sessionScope.sex == 'male'}">
    <h2>结果为true</h2>
</c:if>
  • test="${sessionScope.sex == 'male'}":条件,双引号之间必须要是一个结果为boolean的表达式;

  • if标签只能处理条件为true的情况,没有Java中类似于else关键字的效果;

页面展示:

3.2 choose、when、otherwise组合标签

choose、when、otherwise的组合标签可以解决if标签只能处理条件为true的问题,使用的效果类似于Java中的if...else if ...else

使用示例:

choose、when、otherwise组合标签 <br>
<c:set scope="request" var="score" value="98"/>
<c:choose>
    <c:when test="${requestScope.score>90}">
        <h2>考得不错,给你买PS5</h2>
    </c:when>
    <c:when test="${requestScope.score>80}">
        <h2>考的还行,给你买switch</h2>
    </c:when>
    <c:when test="${requestScope.score>70}">
        <h2>考的一般,给你买疯狂星期四</h2>
    </c:when>
    <c:when test="${requestScope.score>60}">
        <h2>勉强及格,继续努力</h2>
    </c:when>
    <c:otherwise>
        <h2>886</h2>
    </c:otherwise>
</c:choose>
  • <c:choose>:作为一个符号来使用,代表是多路选择,choose标签内会存在多个条件,多个条件最多只会执行一次;

  • <c:when:每一个条件,test属性和if标签一致

  • <c:otherwise>:表示当其他所有when标签中的条件都不满足时执行的标签;

页面展示:

4 JSTL中的循环语句

5.4.1 forEach标签

forEach标签比较重要并且以后的运用也比较多,需要重点掌握;

演示传输的数据如下:

User user1 = new User("user1", "12345user1");
User user2 = new User("user2", "12345user2");
User user3 = new User("user3", "12345user3");
User user4 = new User("user4", "12345user3");
User user5 = new User("user5", "12345user5");
List<User> users = Arrays.asList(user1, user2, user3, user4, user5);
request.setAttribute("users", users);

HashMap<String, User> userMap = new HashMap<>();
userMap.put("userOne", user1);
userMap.put("userTwo", user2);
userMap.put("userThree", user3);
userMap.put("userFour", user4);
userMap.put("userFive", user5);
request.setAttribute("userMap", userMap);

其中User类:

 

public class User {
    private String name;
    private String password;
    toString、Constructor、Getter、Setter......

遍历list集合:

 

  • 遍历代表的是集合中的每一个元素都需要被取到,不存在说只取某几个的情况;

  • items:数据源,即要遍历的数据(list或map集合)一般会和EL表达式结合使用;

  • var:表示自定义的变量名称,有两个作用:

    • 接收每次循环从集合中获取的数据;

    • 将这个变量作为存储在page作用域中,值是从集合中获取的数据,可以供循环体中使用;

页面展示:

部分遍历集合:

部分遍历集合 <br>
<c:forEach items="${requestScope.users}" var="u" varStatus="i" begin="1" end="3" step="1">
    name = ${pageScope.u.name} ,password = ${pageScope.u.password}<br>
</c:forEach>
  • 部分遍历代表获取集合中的多个数据,可以通过标签中的其他属性控制循环的运行;

  • varStatus:自定义一个变量,表示集合中的索引值,varStatus="i"相当于Java for循环的int i

  • begin:varStatus定义变量的起始位置,begin="1"相当于Java for循环的i=1

  • end:varStatus定义变量的结束位置,end="3"相当于Java for循环的i<=3

  • step:循环步长,每次循环varStatus定义变量的变化,不允许自减,step="1"相当于Java for循环的i++

页面展示:

map集合只能完整的遍历,不能遍历部分,意味着map集合只能使用items和var两个属性:

遍历map集合: <br>
<c:forEach items="${requestScope.userMap}" var="uM">
    mapKey = ${pageScope.uM.key} ,mapValue = ${pageScope.uM.value}<br>
</c:forEach>
  • pageScope.uM.key:固定单词表示键;

  • pageScope.uM.value:固定单词表示值;

页面展示:

版权声明:
作者:jackqiang
链接:http://www.jackqiang.com/javaweb/server/jsp/2183/jstl_core/
来源:JackQiang's
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录