JSTL标签

1.什么是JSTL标签

JSTL全名JavaServer Pages Tag Library,是JSP标准标签库,由Apache组织提供的开源的免费jsp标签

2.作用

用于简化和替换jsp页面上的java代码

3.如何使用

1)导入相关JSTL相关jar包:

2)通过taglib指令引入标签库

<%--引入标签库,c为标签库别名--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

4.JSTL的常用标签

1)if标签:相当于Java代码的if语句,但没有else的情况

<c:if test="表达式"></c:if>

test属性是必须属性接收boolean表达式,当表达式为true时,显示if标签体内容,为false时不显示

一般情况下,test属性的值会结合el表达式一起使用

if标签没有else情况,想要else情况可以再定义一个if标签

案例:

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--引入标签库,c为标签库别名--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>IF标签</title>
</head>
<body>
<%--test属性是必须属性接收boolean表达式,
        **当表达式为true时,显示if标签体内容,为false时不显示
        **一般情况下,test属性的值会结合el表达式一起使用
        **if标签没有else情况,想要else情况可以再定义一个if标签
     --%>
<c:if test="true">
    <p>
        test属性是必须属性,接收boolean表达式,
        当表达式为true时,显示if标签体内容,为false时不显示
    </p>
</c:if>

<%
    // 判断request域中list集合是否为空,不为空显示遍历集合
    List list=new ArrayList();
    //添加元素进集合
    list.add('a');
    list.add('b');
    //将集合存放到request域中
    request.setAttribute("list",list);

    //将奇数number添加到request中
    request.setAttribute("number",9);
%>

<%--使用if标签以及EL表达式判断list是否为空--%>
<c:if test="${not empty list}">
    遍历集合
</c:if><br>
<%--判断number是否为奇数,是的话输出到页面上--%> <c:if test="${number%2!=0}"> ${number}为奇数 </c:if>
</body> </html>

运行结果:

 

 

 

 2)choose标签:相当于Java的switch语句

结合when标签(case语句)和otherwise标签(default语句)使用

案例:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--引入标签库,c做标签库别名--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>choose标签</title>
</head>
<body>
    <%--
        数字编号对应星期几案例:
            1.在域中存储数字
            2.使用choose标签取出数字(Java的switch)
            3.使用when标签做数字判断(Java的case)
            4.使用otherwise标签做其他情况的判断(Java的default)
    --%>
    <%
        //在request域中存储一数字
        request.setAttribute("date",5);
    %>
    <%--判断为星期几并输出到页面--%>
    <c:choose>
        <c:when test="${date==1}">星期一</c:when>
        <c:when test="${date==2}">星期二</c:when>
        <c:when test="${date==3}">星期三</c:when>
        <c:when test="${date==4}">星期四</c:when>
        <c:when test="${date==5}">星期五</c:when>
        <c:when test="${date==6}">星期六</c:when>
        <c:when test="${date==7}">星期七</c:when>
        <c:otherwise>输入有误</c:otherwise>
    </c:choose>
</body>
</html>

运行结果:

 3)forEach标签:相当于Java的for语句

a.用于完成重复的操作:

属性:begin:开始值

   end:  结束值

   var:   临时变量

   step: 步长

   varStatus:循环状态对象

        varStatus.index:容器中元素的索引

        varStatus.count:循环次数

b.用于遍历容器:

属性:item:容器对象

   var:临时变量

   varStatus:循环状态对象

        varStatus.index:容器中元素的索引

        varStatus.count:循环次数

案例:

<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>foreach标签</title>
</head>
<body>
    <h3>重复操作属性</h3>
    <%--
        for(int i=1;i<=10;i+=2){
            out.write(i);
        }
    --%>
    <c:forEach begin="1" end="10" var="i" varStatus="s" step="2" >
        ${i} ${s.index} ${s.count}<br>
    </c:forEach>

    <%
        //定义list对象
        List list=new ArrayList<>();
        list.add('a');
        list.add('b');
        list.add('c');
        list.add('d');
        request.setAttribute("list",list);
    %>
    <h3>遍历容器</h3>
    <%
        for(Object c:list){
            out.print(c);
        }
    %>
    <c:forEach items="${list}" var="c" varStatus="s">
        ${c} ${s.index} ${s.count}<br>
    </c:forEach>
</body>
</html>

运行结果:

 

 

 

 5.JSTL练习

需求如下:在request域中有一个存有User对象的List集合,需要使用jsp+el将list集合中的数据展示到jsp页面的表格table中

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="www.lin.domain.User" %>
<%@ page import="java.util.List" %>
<%@ page import="www.lin.domain.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>jstltest</title>
</head>
<body>
<%
    //创建list集合
    List<Student> list=new ArrayList<>();
    //创建Student对象
    Student st1=new Student("0001","张三");
    Student st2=new Student("0002","李四");
    Student st3=new Student("0003","王五");
    //将Student对象添加进list集合
    list.add(st1);
    list.add(st2);
    list.add(st3);
    //将list集合添加进request域中
    request.setAttribute("list",list);
%>
    <%--生成表格--%>
    <table border="1px" align="center">
        <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>学号</th>
        </tr>
        <%--   循环遍历集合,将数据显示到表格中     --%>
        <c:forEach items="${requestScope.list}" var="stu" varStatus="s">
            <tr>
                <%--编号从1开始--%>
                <td>${s.count}</td>
                <%-- 获取名字--%>
                <td>${stu.name}</td>
                <%--获取学号--%>
                <td>${stu.id}</td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

运行结果:

 

 案例改进,生成隔行变色效果,可使用if标签实现

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="www.lin.domain.User" %>
<%@ page import="java.util.List" %>
<%@ page import="www.lin.domain.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>jstltest</title>
</head>
<body>
<%
    //创建list集合
    List<Student> list=new ArrayList<>();
    //创建Student对象
    Student st1=new Student("0001","张三");
    Student st2=new Student("0002","李四");
    Student st3=new Student("0003","王五");
    //将Student对象添加进list集合
    list.add(st1);
    list.add(st2);
    list.add(st3);
    //将list集合添加进request域中
    request.setAttribute("list",list);
%>
    <%--生成表格--%>
    <table border="1px" align="center" width="500px" >
        <tr >
            <th>编号</th>
            <th>姓名</th>
            <th>学号</th>
        </tr>
        <%--   循环遍历集合,将数据显示到表格中     --%>
        <c:forEach items="${requestScope.list}" var="stu" varStatus="s">
            <%--通过if标签和el表达式判断是否为偶数行--%>
            <c:if test="${s.count%2==0}">
                <tr bgcolor="#deb887">
                        <%--编号从1开始--%>
                    <td>${s.count}</td>
                        <%-- 获取名字--%>
                    <td>${stu.name}</td>
                        <%--获取学号--%>
                    <td>${stu.id}</td>
                </tr>
            </c:if>
            <%--通过if标签和el表达式判断是否为奇数行--%>
            <c:if test="${s.count%2!=0}">
                <tr bgcolor="#d2691e">
                        <%--编号从1开始--%>
                    <td>${s.count}</td>
                        <%-- 获取名字--%>
                    <td>${stu.name}</td>
                        <%--获取学号--%>
                    <td>${stu.id}</td>
                </tr>
            </c:if>
        </c:forEach>
    </table>
</body>
</html>

运行结果:

 

posted @ 2022-03-20 20:54  chaplu  阅读(332)  评论(0)    收藏  举报