JSTL核心标签库

JSTL核心标签库简介

JSTL中的核心标签库主要用于完成基本的逻辑运算,在开发中使用较多。

在开发前导入相关jar包之后,还需要在页面中通过 taglib 指令将标签库导入:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

c:out标签

用于在页面上输出 EL 表达式的值,该标签不常使用,因为不使用该标签也能够在页面上输出EL表达式。

<%  
    pageContext.setAttribute("user", "admin");
%>

el表达式:${user }
<br/>
jstl中的out标签:<c:out value="${user }"></c:out>

c:catch标签

当有异常发生时,用于捕获异常。相当于 try-catch 中的 catch 代码块,该标签中只有一个属性 var,是捕获到的异常对象,名称可以自定义。该标签不常用,一般不会在页面中显示异常信息。

<c:catch var="e">
    ${pageContext.name};
</c:catch>
message = ${e.message }

c:if标签

该标签主要用于条件判断。

<%  
    pageContext.setAttribute("user", "admin");
%>
<c:if test="${user == 'admin' }" var="flag" scope="request">
    欢迎登陆
</c:if>
  • test:判断的条件。若为 true,则执行标签体中的内容,否则不执行。
  • var:存储 test 的判断结果。不常用。
  • scope:存储 test 判断结果的变量的存放范围。不常用。

c:choose标签

实现多分支判断。类似于 switch-case 语句。一个 标签中可以包含多个与一个。

<% 
    pageContext.setAttribute("hobby", "basketball");
%>
<c:choose>
    <c:when test="${hobby == 'basketball'}">
        我喜欢打篮球
    </c:when>
    <c:when test="${hobby == 'football'}">
        我喜欢踢足球
    </c:when>
    <c:when test="${hobby == 'volleyball'}">
        我喜欢打排球
    </c:when>
    <c:otherwise>
        我没什么爱好
    </c:otherwise>
</c:choose>

c:forEach标签

该标签用于循环遍历数组、集合(List、Set、Map),实际开发中使用较多。

<br>---------------------遍历数组--------------------------<br>
<% 
    Object[] city = {"北京","上海","广州","天津"};
    pageContext.setAttribute("city", city);
%>
<c:forEach items="${city }" var="c">
    ${c }
    <br>
</c:forEach>

<br>---------------------遍历List--------------------------<br>
<%
    List<String> name = new ArrayList<>();
    name.add("刘德华");
    name.add("张学友");
    name.add("黎明");
    name.add("郭富城");
    pageContext.setAttribute("name", name);
%>

<c:forEach items="${name }" var="n">
    ${n }
    <br>
</c:forEach>
<br>---------------------遍历set--------------------------<br>
<%
    Set<String> program = new HashSet<>();
    program.add("java");
    program.add("c");
    program.add("python");
    program.add("php");
    pageContext.setAttribute("program", program);
%>

<c:forEach items="${program }" var="p">
    ${p }
    <br>
</c:forEach>

<br>---------------------遍历map--------------------------<br>
<%
    Map<String,String> map = new HashMap<>();
    map.put("第一名", "中国");
    map.put("第二名", "美国");
    map.put("第三名", "德国");
    pageContext.setAttribute("map", map);
%>

<c:forEach items="${map }" var="m">
    ${m.key } : ${m.value }
    <br>
</c:forEach>

指定遍历的起始索引及步长
对于数组及 List,可以指定遍历的起始索引及步长。

<br>---------------------指定遍历起始及步长--------------------------<br>
<%
    Object[] country = {"0中国","1美国","2德国","3法国","4英国","5瑞士","6瑞典","7意大利"};
    pageContext.setAttribute("country", country);
%>

<c:forEach items="${country }" var="c" begin="1" end="4">
    ${c }
    <br>
</c:forEach>
  • begin:指定遍历开始索引,从 0 开始计数。
  • end:指定遍历结束索引,遍历结果包含这个索引。
<br>---------------------指定遍历起始及步长--------------------------<br>
<%
    Object[] country = {"0中国","1美国","2德国","3法国","4英国","5瑞士","6瑞典","7意大利"};
    pageContext.setAttribute("country", country);
%>

<c:forEach items="${country }" var="c" begin="1" end="7" step="2">
    ${c }
    <br>
</c:forEach>

step:指定遍历时的步长。

标签中有一个属性 varStatus,该属性指定的变量是一个引用型变量。该引用
中记录了当前遍历对象的相关信息。该引用常用的方法如下:

  • int getIndex():获取当前对象的索引。从 0 开始计数。
  • int getCount():获取当前对象的序号。从 1 开始计数。
  • boolean isFirst():判断当前对象是否是第一个对象。
  • boolean isLast():判断当前对象是否是最后一个对象。
<%
    List<Student> student = new ArrayList<>();
    student.add(new Student("马云",22));
    student.add(new Student("马化腾",26));
    student.add(new Student("李彦宏",21));
    student.add(new Student("周鸿祎",20));
    student.add(new Student("雷军",28));
    student.add(new Student("陈一舟",25));
    student.add(new Student("柳传志",30));
    pageContext.setAttribute("student", student);
%>
<table border="1">
    <tr>
        <td>序号</td>
        <td>姓名</td>
        <td>年龄</td>
    </tr>

    <c:forEach items="${student }" var="s" varStatus="obj">
        <tr>
            <td>${obj.count }</td>
            <td>${s.name }</td>
            <td>${s.age }</td>
        </tr>
    </c:forEach>

</table>

隔行着色
通过varStatus中的index控制隔行着色

<table border="1">
    <tr>
        <td>序号</td>
        <td>姓名</td>
        <td>年龄</td>
    </tr>

    <c:forEach items="${student }" var="s" varStatus="obj">
        <tr style="background-color: ${obj.index % 2 == 0? 'orange':'red'}">
            <td>${obj.count }</td>
            <td>${s.name }</td>
            <td>${s.age }</td>
        </tr>
    </c:forEach>

</table>