JSTL核心标签库详解

JSP中许多自定义的标签库,已经由JCP的成员Apache定义好并已经打包。我们只需要导入该JAR包后,在页面中使用taglib指令将其导入即可使用。这套标签库称为JSTL(JSP Standard Tag libarary)即JSP标准标签库

JSTL中定义了五个标签库
  • 核心标签库:主要用于完成基本的逻辑运算(重点)
  • 格式化标签库:主要用于完成日期、数字的格式化显示
  • EL函数标签库:定义了若干个EL函数
  • SQL操作标签库:完成SQL操作(已经不使用,由java完成)
  • XML操作标签库:完成XML操作(已经不使用,由java完成)

上面是对JSTL简单了解,该博客主要写关于核心标签库,ok,先看下目录

博客目录

1、写JSTL的准备
2、核心标签库常用的标签
3、c:set
4、c:remove
5、c:catch
6、c:out
7、c:if
8、c:choose
9、c:forEach(重点)

一、写JSTL的准备

写JSTL之前需要导入两个jar包
  • jstl.jar
  • standard.jar

这里写图片描述

将以上两个jar包导入后,可以在standard.jar下的META-INF可以找到c.tld,在c.tld中都是核心标签库的自定义标签

这里写图片描述

taglib指令在核心标签库中的使用

使用JSTL核心标签库,需要在页面中通过taglib指令,将标签库导入

这里写图片描述

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

二、核心标签库常用的标签

  • c:set
  • c:remove
  • c:out
  • c:catch
  • c:if
  • c:choose
  • c:forEach

三、c:set

用于进行变量定义,并将变量存放到指定域属性空间,为Bean的属性赋值,设置Map的key与value


Beantest.java

package linjie.com;

public class Beantest{
    private String name;
    private int age;
    public Beantest() {}
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

}

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    import="linjie.com.Beantest"
    import="java.util.*"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <!-- c:set将变量存放到reuqest域属性空间中 -->
    <!--
    value:变量的值
    var:变量名
    scope:将变量存放的域属性空间,取值为page、request、session、application、默认为page范围
     -->
    <c:set var="name" value="林杰" scope="request"></c:set>
    name=${requestScope.name }<br>

    <br>
    ------------------------------
    <br>

    <!-- c:set为Bean属性赋值 -->
    <!--
    target:指定的Bean对象
    property:指定对象的指定属性
    value:为指定对象的指定属性所赋值
     -->
    <%
        Beantest be=new Beantest();
        pageContext.setAttribute("be", be);
    %>
    <c:set property="name" value="linjie" target="${pageScope.be }"></c:set>
    name=${be.name }<br>


    <br>
    ------------------------------
    <br>

    <!-- c:set为Map的key与Value赋值 -->
    <!--
    target:指定的map
    property:指定map的指定的key
    value:指定map的key所赋的值
     -->
    <%
        Map<String,String> map=new HashMap();
        pageContext.setAttribute("map", map);
    %>
    <c:set property="name" value="king" target="${map}"></c:set>
    <c:set property="age" value="20" target="${map}"></c:set>
    map=${map }<br>
    name=${map.name }<br>
    age=${map.age }<br>     



</body>
</html>

客户浏览器显示结果

这里写图片描述


四、c:remove

从域属性空间中删除指定变量

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <c:set var="name" value="林杰" scope="request"></c:set>
    <c:set var="name" value="linjie" scope="page"></c:set>
    <c:set var="name" value="lucy" scope="session"></c:set>
    <c:set var="name" value="king" scope="application"></c:set>

    删除指定域空间中的指定变量<br>
    <c:remove var="name" scope="request"/>

    name_request=${requestScope.name }<br>
    name_page=${pageScope.name }<br>
    name_session=${sessionScope.name }<br>
    name_application=${applicationScope.name }<br>


    <br>
    -----------------------------
    <br>
    删除所有域中的属性值<br>
    <c:remove var="name"/>

    name_request=${requestScope.name }<br>
    name_page=${pageScope.name }<br>
    name_session=${sessionScope.name }<br>
    name_application=${applicationScope.name }<br>
</body>
</html>

客户浏览器显示结果

这里写图片描述


五、c:catch

获取异常信息

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <c:catch var="ex">
        <%
            int i=3/0;
        %>
    </c:catch>
    ex=${ex.message }<br>
</body>
</html>

客户浏览器显示结果异常

这里写图片描述


六、c:out

用于在页面上输出EL表达式的值

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

<!--value:指定要输出的EL表达式
    escapeXml:是否忽略HTML标签
        1、默认为true,不解析HTML标签
        2、若为false,则解析HTML标签
        3、EL本身也是解析HTML标签的,无法忽略,不能将HTML按原样输出 -->

    <c:set var="name" value="<h1>林杰<h1>"></c:set>

    name1=<c:out value="${name }"></c:out><br>
    name2=<c:out value="${name }" escapeXml="false"></c:out>
    name3=${name }<br>
</body>
</html>

客户浏览器显示结果

这里写图片描述

EL表达式不用就可以在页面上输出,使用< c:out/>好处就是:
  • 可以控制是否解析HTML标签,还可以设定初始值(如下)

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        name=<c:out value="${name }" default="林杰"></c:out>
        <br>
        name=${empty name ? 'linjie' : name }
    </body>
    </html>
    

客户浏览器显示结果

这里写图片描述


七、c:if

用于实现对于条件的判断

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <c:set var="name" value="林杰"></c:set>


    <!-- test:判断条件。若为true,则执行标签体,否则不执行 -->
    <c:if test="${name=='林杰' }">
        成功执行...
    </c:if>
</body>
</html>

客户浏览器显示结果

这里写图片描述


八、c:choose

进行选择

框架
<c:choose>
    <!--当...的情况 -->
    <c:when test="">

    </c:when>

    <c:when test="">

    </c:when>

    <!-- 否则 -->
    <c:otherwise>

    </c:otherwise>
</c:choose>
一个简单分页DEMO(当前页为第一页,只有下一页、尾页可选)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <c:set var="pageno" value="1"></c:set><!-- 当前页码 -->
    <c:set var="totalpage" value="5"></c:set><!-- 总页码 -->
    <c:choose>
        <c:when test="${totalpage==1 }">
            首页     上一页  下一页 尾页
        </c:when>

        <c:when test="${pageno==1 }">
            首页   上一页    <a href="#">下一页</a> <a href="#">尾页</a>
        </c:when>

        <c:when test="${pageno==5 }">
        <a href="#">首页</a>  <a href="#">上一页</a> 下一页 尾页
        </c:when>

        <c:otherwise>
        <a href="#">首页</a>  <a href="#">上一页</a> <a href="#">下一页</a> <a href="#">尾页</a>
        </c:otherwise>
    </c:choose>
</body>
</html>

客户浏览器显示结果

这里写图片描述


九、c:forEach

用于循环遍历数组、list、set、map集合

1、简单遍历数组、map、set、list
<%@ page language="java" contentType="text/html; charset=UTF-8"
    import="java.util.*"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    -----------遍历list-------------<br>
    <%
        List<String> names=new ArrayList<String>();
        names.add("林杰");
        names.add("linjie");
        pageContext.setAttribute("names",names);
    %>
    <c:forEach items="${names }" var="name">
        ${name }<br>
    </c:forEach>



    <br>

    -----------遍历set-------------
    <br>
    <%
        Set<String> schools=new HashSet<String>();
        schools.add("浙大");
        schools.add("北大");
        pageContext.setAttribute("schools", schools);
    %>
    <c:forEach items="${schools }" var="school">
        ${school }<br>
    </c:forEach>


    <br>
    -----------遍历map------------
    <br>
    <%
        Map<String,Object> maps=new HashMap();
        maps.put("name", "林杰");
        maps.put("address", "浙江");
        pageContext.setAttribute("maps", maps);
    %>
    <c:forEach items="${maps }" var="map">
        ${map }<br>
    </c:forEach>


    <br>
    ------------遍历数组 int[]
    <br>
    <%
        int[] ages={20,21,22};
        pageContext.setAttribute("ages", ages);
    %>
    <c:forEach items="${ages}" var="age">
        ${age }<br>
    </c:forEach>
</body>
</html>

客户浏览器显示结果

这里写图片描述

2、begin、end、step用法
<%@ page language="java" contentType="text/html; charset=UTF-8"
    import="java.util.*"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
        List<String> names=new ArrayList<String>();
        names.add("林杰");
        names.add("linjie");
        names.add("luxy");
        names.add("king");
        names.add("bbbb");
        pageContext.setAttribute("names",names);
    %>
<!--items:代表域属性
    begin、end:开始结束位置
    step:步长(跨度) -->
    <c:forEach items="${names }" var="name" begin="0" end="4" step="2">
        ${name }<br>
    </c:forEach>

    <br>
    ---------------------------------
    <br>

    <c:forEach var="num" begin="0" end="10" step="2">
        ${num }<br>
    </c:forEach>
</body>
</html>

客户浏览器显示结果

这里写图片描述

3、高级功能(表格处理)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    import="java.util.*"
    import="linjie.com.*"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<!-- odd:行数为奇数 -->
<style type="text/css">
    .odd{
        background-color:#eee
    }
    .even{
        background-color:#888
    }
</style>
<body>
    <%
        List<Beantest> be=new ArrayList<Beantest>();
        be.add(new Beantest("林杰",20));
        be.add(new Beantest("aa",21));
        be.add(new Beantest("bb",22));
        be.add(new Beantest("cc",23));
        pageContext.setAttribute("be", be);
    %>
    <table>
        <tr>
            <th>序号</th>
            <th>姓名</th>
            <th>年龄</th>
        </tr>
        <!-- varStatus:处理一些域行数相关的功能(vs.count\vs.first\vs.last\vs.index) -->
        <c:forEach items="${be }" var="b" varStatus="vs">
            <tr class=${vs.count%2==0 ? 'even' : 'odd' }>
                <td>${vs.count }</td>
                <td>${b.name }</td>
                <td>${b.age }</td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

客户浏览器显示结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值