一、前言

      小编在前一篇博客中对JSTL整体有了一个宏观的介绍,下面小编会对其中一个使用的非常频繁的核心标签库进行详细的介绍,希望各位看客大老爷能提出宝贵的意见。

二、核心标签库是什么?

      JSTL的核心标签库标签共13个,使用这些标签能够完成JSP页面的基本功能,减少编码工作。

      从功能上可以分为4类:表达式控制标签、流程控制标签、循环标签、URL操作标签。
  
out标签、set标签、remove标签、catch标签。

if标签、choose标签、when标签、otherwise标签。

forEach标签、forTokens标签。

import标签、url标签、redirect标签、param标签。

      在JSP页面引入核心标签库的代码为:

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

三、怎么使用?

3.1 < c:out>标签

避免暴露逻辑代码会尽量减少页面中的Java脚本,使用标签就可以实现以上功能。

基本格式:

<c:out value=”字符串”>
    <c:out value=”EL表达式”>

举例:

<li>采用c:out标签</li><br>
    hello(使用标签):<c:out value="123"></c:out> <br>
    hello(使用标签):<c:out value="hello"></c:out><br>
    hello(使用EL表达式):<c:out value="${hello}"></c:out><br>
    hello(缺省值):${hello12}<br>
    hello(缺省值):<c:out value="${hello12}" default="nothing"></c:out><br>
    hello(缺省值):<c:out value="${hello12}">nothing</c:out><br>
    welcome(el表达式):${welcome}<br>
    welcome(使用标签 escapeXml="true"):<c:out value="${welcome}" escapeXml="true"></c:out><br>
    welcome(使用标签 escapeXml="false"):<c:out value="${welcome}" escapeXml="false"></c:out><br>

结果:

测试jstl核心库

• 采用c:out标签
hello(使用标签):123 
hello(使用标签):hello
hello(使用EL表达式):Hello world
hello(缺省值):
hello(缺省值):nothing
hello(缺省值):nothing
welcome(el表达式):就分手快乐的副教授了积分
welcome(使用标签 escapeXml="true"):<font color='red'>就分手快乐的副教授了积分</font>
welcome(使用标签 escapeXml="false"):就分手快乐的副教授了积分

3.2 < c:set>标签

      < c:set>标签用于把某一个对象存在指定的域范围内,或者将某一个对象存储到Map或者JavaBean对象中。

举例:

<li>采用c:set 定义变量</li><br>
    <c:set value="root" var ="userid"/>

显示:

• 采用c:set 定义变量
userid:root

3.3 < c:remove>标签

      < c:remove>标签主要用来从指定的JSP范围内移除指定的变量。

举例:

<c:remove  var ="userid"/>

3.4 < c: catch>标签

      < c:catch>标签用于捕获嵌套在标签体中的内容抛出的异常。

举例:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 <%--引入JSTL核心标签库 --%>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 <!DOCTYPE HTML>
 <html>
 <head>
     <title>JSTL: --表达式控制标签“catch”标签实例</title>
 </head>

  <body>
       <h4>catch标签实例</h4>
     <hr>
    <%--把容易产生异常的代码放在<c:catch></c:catch>中,
     自定义一个变量errorInfo用于存储异常信息 --%>
     <c:catch var="errorInfo">
        <%--实现了一段异常代码,向一个不存在的JavaBean中插入一个值--%>
         <c:set target="person" property="hao"></c:set>     </c:catch>
              <%--用EL表达式得到errorInfo的值,并使用<c:out>标签输出 --%>
     异常:<c:out value="${errorInfo}" /><br />
     异常 errorInfo.getMessage:<c:out value="${errorInfo.message}" /><br />
     异常 errorInfo.getCause:<c:out value="${errorInfo.cause}" /><br />
     异常 errorInfo.getStackTrace:<c:out value="${errorInfo.stackTrace}" />
 </body>
 </html>

3.5 < c:if>标签

      < c:if>标签和程序中的if语句作用相同,用来实现条件控制。

举例:

<li>采用c:if 条件控制标签</li><br>

    <c:if test ="${v1 < v2}">
        v1 小于 v2 <br>
    </c:if>

显示:

• 采用c:if 条件控制标签
v1 小于 v2

3.6 < c:choose>、< c:when>和< c:otherwise>标签

      < c:choose>、< c:when>和< c:otherwise>这3个标签通常情况下是一起使用的,< c:choose>标签作为< c:when>和< c:otherwise>标签的父标签来使用。

      使用< c:choose>,< c:when>和< c:otherwise>三个标签,可以构造类似 “if-else if-else” 的复杂条件判断结构。

举例:

<li>采用c:choose,c:when,c:otherwise 条件控制标签</li><br>
    <c:choose>
        <c:when test ="${v1 > v2}">
            v1 大于 v2 <br>
        </c:when>
        <c:otherwise >
            v1 小于 v2 <br>
        </c:otherwise>
    </c:choose>

显示:

• 采用c:choose,c:when,c:otherwise 条件控制标签
v1 小于 v2

3.7 标签

      该标签根据循环条件遍历集合(Collection)中的元素。

举例:

<li>采用 循环控制标签</li><br>
    <h3>采用jsp脚本显示</h3>
    <table border="1">
        <tr>
            <td>用户名称</td>
            <td>年龄</td>
            <td>所属组</td>
        </tr>
        <%
            List userList = (List) request.getAttribute("users");
            if(userList == null || userList.size() == 0){
        %>
            <tr>
                <td colspan="3">nothing</td>
            </tr>

        <%

            }
            else{
                for(Iterator iter = userList.iterator();iter.hasNext();){
                    User user =(User)iter.next();
                %>
                    <tr>
                        <td><%=user.getUsername() %></td>
                        <td><%=user.getAge() %></td>
                        <td><%=user.getGroup().getName() %></td>
                    </tr>

                <%


                }
            }
         %>
    </table>


    <br>
    <li>采用c:forEach 循环控制标签</li><br>
    <h3>采用jsp脚本显示</h3>
    <table border="1">
        <tr>
            <td>用户名称</td>
            <td>年龄</td>
            <td>所属组</td>
        </tr>
        <c:choose>
            <c:when test="${empty users}">
                <tr>
                    <td colspan="3">nothing</td>
                </tr>

            </c:when>
            <c:otherwise>
                <c:forEach items="${users}" var="user" >
                    <tr>
                        <td>${user.username}</td>
                        <td>${user.age}</td>
                        <td>${user.group.name}</td>
                    </tr>
                </c:forEach>
            </c:otherwise>
        </c:choose>
    </table>

    <br>
    <h3>采用forEach标签,varstatus</h3><br>
    <table border="1">
        <tr>
            <td>用户名称</td>
            <td>年龄</td>
            <td>所属组</td>
        </tr>
        <c:choose>
            <c:when test="${empty users}">
                <tr>
                    <td colspan="3">没有符合条件的数据</td>
                </tr>
            </c:when>
            <c:otherwise>
            <c:forEach items="${users}" var="user" varStatus="vs">
                    <c:choose>
                        <c:when test="${vs.count mod 2 == 0}">
                            <tr bgcolor="red">
                        </c:when>
                        <c:otherwise>
                            <tr>
                        </c:otherwise>
                    </c:choose>
                                <td>${user.username }</td>
                                <td>${user.age }</td>
                                <td>${user.group.name }</td>
                            </tr>
                </c:forEach>
            </c:otherwise>
        </c:choose>
    </table>


    <br>
    <li>采用c:forEach 循环控制标签 begin end</li><br>
    <h3>采用jsp脚本显示</h3>
    <table border="1">
        <tr>
            <td>用户名称</td>
            <td>年龄</td>
            <td>所属组</td>
        </tr>
        <c:choose>
            <c:when test="${empty users}">
                <tr>
                    <td colspan="3">nothing</td>
                </tr>

            </c:when>
            <c:otherwise>
                <c:forEach items="${users}" var="user" begin="2" end ="8" step="2">
                    <tr>
                        <td>${user.username}</td>
                        <td>${user.age}</td>
                        <td>${user.group.name}</td>
                    </tr>
                </c:forEach>
            </c:otherwise>
        </c:choose>
    </table>


    <br>
    <li>采用c:forEach 循环控制标签  输出map</li><br>
    <c:forEach items="${map}" var="entry">
        ${entry.key},${entry.value}<br>

    </c:forEach>

显示:

• 采用 循环控制标签
采用jsp脚本显示
用户名称    年龄  所属组
张三_0    23  动力节点603班
张三_1    24  动力节点603班
张三_2    25  动力节点603班
张三_3    26  动力节点603班
张三_4    27  动力节点603班
张三_5    28  动力节点603班
张三_6    29  动力节点603班
张三_7    30  动力节点603班
张三_8    31  动力节点603班
张三_9    32  动力节点603班
• 采用c:forEach 循环控制标签
采用jsp脚本显示
用户名称    年龄  所属组
张三_0    23  动力节点603班
张三_1    24  动力节点603班
张三_2    25  动力节点603班
张三_3    26  动力节点603班
张三_4    27  动力节点603班
张三_5    28  动力节点603班
张三_6    29  动力节点603班
张三_7    30  动力节点603班
张三_8    31  动力节点603班
张三_9    32  动力节点603班
采用forEach标签,varstatus

用户名称    年龄  所属组
张三_0    23  动力节点603班
张三_1    24  动力节点603班
张三_2    25  动力节点603班
张三_3    26  动力节点603班
张三_4    27  动力节点603班
张三_5    28  动力节点603班
张三_6    29  动力节点603班
张三_7    30  动力节点603班
张三_8    31  动力节点603班
张三_9    32  动力节点603班
• 采用c:forEach 循环控制标签 begin end
采用jsp脚本显示
用户名称    年龄  所属组
张三_2    25  动力节点603班
张三_4    27  动力节点603班
张三_6    29  动力节点603班
张三_8    31  动力节点603班
• 采用c:forEach 循环控制标签 输出map
k3,v1
k4,v1
k5,v1
k6,v1
k1,v1
k2,v1

3.8 标签

      该标签用于浏览字符串,并根据指定的字符将字符串截取。

举例:

<li>采用c:forTokens 循环控制标签  </li><br>
    <!--  delims间隔-->
    <c:forTokens items="${strTokens }" delims="#" var ="v">
        ${v }<br>
    </c:forTokens>

显示:

• 采用c:forTokens 循环控制标签 
1
2
3
4
5
6

借鉴博客:


JSTL标签库之核心标签


四、小结

      核心标签库是使用频率很高的一个内容,在这里我们可以收获很多的内容,在任何语言中都包含三种结构:顺序,选择,判断。而核心库可以很好地把这些内容囊括进去。

      下一篇博客会向大家介绍【JSTL】JSP标准标签库(三)——I18N格式化标签库