> 文章列表 > JSTL标签库

JSTL标签库

JSTL标签库

英文全称:Java Standard Tag Lib(Java标准的标签库)

使用目的:JSTL标签库通常结合EL表达式一起使用。目的是让JSP中的java代码消失。

使用位置:JSTL标签是写在JSP当中的,但实际上最终还是要执行对应的java程序。(java程序在jar包当中。)

使用JSTL标签库的步骤:

        第一步:引入JSTL标签库对应的jar包。

                tomcat10之前引入的jar包是:

                        taglibs-standard-impl-1.2.1.jar

                        taglibs-standard-spec-1.2.1.jar 

                tomcat10之后引入的jar包是:

                        jakarta.servlet.jsp.jstl-2.0.0.jar

                        jakarta.servlet.jsp.jstl-api-2.0.0.jar

                在IDEA当中引入的操作:

                        在WEB-INF下新建lib目录,然后将jar包拷贝到lib当中。然后选中jar包,右击鼠标,点击“Add Lib...”

                        JSTL的jar包一定是要和mysql的数据库驱动一样,都是放在WEB-INF/lib目录下的。

                什么时候需要将jar包放到WEB-INF/lib目录下?

                        回答:如果这个jar包是tomcat服务器没有的就需要放到WEB-INF/lib目录下。

        第二步:在JSP文件中引入要使用标签库。(使用taglib指令引入标签库。)

                JSTL提供了很多种标签,你要引入哪个标签?重点掌握核心标签库。

                        <%@taglib prefix="c" uri="Oracle Java Technologies | Oracle" %>这个就是核心标签库。
                prefix="这里随便起一个名字就行了,核心标签库,大家默认的叫做c,你随意。"说是随意,但是最好跟随大家的脚步。

        第三步:在需要使用标签的位置使用即可。表面上使用的是标签,底层实际上还是java程序。

JSTL标签的原理

        JSP文件中使用<%@taglib prefix="c" uri="Oracle Java Technologies | Oracle" %>引入核心库标签
      以上uri后面的路径实际上指向了一个xxx.tld文件。
               1.tld文件实际上是一个xml配置文件。
               2.在tld文件中描述了“标签”和“java类”之间的关系。
               3.以上核心标签库对应的tld文件是:c.tld文件。它在哪里。
                       回答:在jakarta.servlet.jsp.jstl-2.0.0.jar里面META-INF目录下,有一个c.tld文件。

源码解析:配置文件tld解析

<tag>

    <description>以下内容是对该标签的描述</description>

    <name>catch</name> 标签的名字是catch

    <tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class> 标签对应的java类。

    <body-content>JSP</body-content> 标签体当中可以出现的内容,如果是JSP,就表示标签体中可以出现符合JSP所有语法的代码。例如EL表达式。

    <attribute>

        <description>对这个属性的描述</description>

        <name>var</name> 属性名

        <required>false</required> false表示该属性不是必须的。true表示该属性是必须的。

        <rtexprvalue>false</rtexprvalue> 这个描述说明了该属性是否支持EL表达式。false表示不支持。true表示支持EL表达式。

    </attribute>

  </tag>

以下是JSP文件中的使用:

        <%@taglib prefix="c" uri="Oracle Java Technologies | Oracle" %>

        <c:catch var="">

                JSP....

        </c:catch>

JSTL中的核心标签库core当中常用的标签如下:

1.c:if

<body>

        <%--

                <c:if/>

                        if标签用来做if判断。

                        test属性表示判断的条件(使用EL表达式输出)

        --%>

        <%-- 如果test="${66 == 66}"条件为真 输出66等于66 --%>

        <c:if test="${66 == 66}">

                <h1>66等于66</h1>

        </c:if>

        <%-- 如果test="${66 != 66}"条件为真 输出66不等于66 --%>

        <c:if test="${66 != 66}">

                <h1>66不等于66</h1>

        </c:if>

</body>

2.c:foreach  (下面代码是完整的JSP页面代码,介绍foreach标签的使用)

<%@pageimport="java.util.Map"%>

<%@pageimport="java.util.HashMap"%>

<%@pageimport="java.util.List"%>

<%@pageimport="com.bjpowernode.entity.Person"%>

<%@pageimport="java.util.ArrayList"%>

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

<%@pagecontentType="text/html;charset=UTF-8"language="java"%>

<html>

        <head>

                <title>foreach标签</title>

        </head>

        <body>

                <%--

                        1.遍历1到10,并输出。

                                begin属性设置开始的索引

                                end属性设置结束的索引

                                var属性表示循环的变量(也是当前正在遍历到的数据)

 

                        类似Java中的代码:

                        for(inti=1; i<10; i++){

                                System.out.print(i);

                        }

                --%>

                <c:forEach begin="1" end="10" var="i">

                        ${i}

                </c:forEach>

                <hr>

                <c:forEach begin="1" end="10" var="i">

                        ${i}<br/>

                </c:forEach>

                <hr>

                <tableborder="1">

                        <c:forEach begin="1" end="10" var="i">

                        <tr>

                                <td>${i}</td>

                        </tr>

                        </c:forEach>

                </table>

                <hr>

                <c:forEach var="i" begin="1" end="9">

                        <h1>${i}</h1>

                </c:forEach>

                <%--

                        2.遍历Object数组

                                items表示遍历的数据源(遍历的集合)

                                var表示当前遍历到的数据

                --%>

                <%--下面首先准备一个Object数组并添加到请求作用域中成为共享数据--%>

                <%

                        request.setAttribute("array",newString[]{"abc","111","good"});

                %>

                <c:forEach items="${requestScope.array}" var="item">

                        ${item}

                </c:forEach>

                <hr>

                <%--

                        3.遍历Map集合

                                items表示被遍历的集合

                                var表示遍历到的元素

                --%>

                <%--下面我们现在先准备一个Map集合,并存入到请求作用域中--%>

                <%

                        Map<String,Object> map = newHashMap<>();

                        map.put("key1","value1");

                        map.put("key2","value2");

                        map.put("key3","value3");

                        request.setAttribute("map",map);

                %>

                <c:forEach items="${requestScope.map}" var="entry">

                        ${entry}<br/>

                </c:forEach>

                <hr/>

                <%--

                        4.遍历List集合

                                items表示遍历的集合

                                var表示遍历到的数据

                                begin表示遍历开始的索引值

                                end表示结束遍历的索引值

                                step表示遍历的步长值也就是i++或者i+=2...

                                varStatus表示当前遍历到的数据的状态

                                比如:varStatus="status"

                                        status就具有如下方法:

                                                status.getCurrent获取当前遍历到的数据

                                                status.getIndex获取遍历到的索引值

                                                status.getCount获取遍历数据的个数

                                                status.isFirst当前遍历的数据是否是第一条

                                                status.isLast当前遍历的数据是否是最后一条

                                                status.getBegin获取属性begin的值

                                                status.getEnd获取属性end的值

                                                status.getStep获取属性step的值

                --%>

                <%

                        List<Person> personList = newArrayList<Person>();

                        personList.add(newPerson(1,"张三","123",18,"13033335555"));

                        personList.add(newPerson(2,"李四","123",19,"13033334444"));

                        personList.add(newPerson(3,"王五","123",22,"13033333333"));

                        personList.add(newPerson(4,"赵六","123",20,"13033336666"));

                        personList.add(newPerson(5,"孙七","123",21,"13033337777"));

                        request.setAttribute("list",personList);

                %>

                <tableBORDER="1">

                        <tr>

                                <th>编号</th>

                                <th>姓名</th>

                                <th>密码</th>

                                <th>年龄</th>

                                <th>电话</th>

                                <th>操作</th>

                        </tr>

                        <c:forEachitems="${requestScope.list}"var="preson">

                        <tr>

                                <td>${preson.id}</td>

                                <td>${preson.name}</td>

                                <td>${preson.pwd}</td>

                                <td>${preson.age}</td>

                                <td>${preson.phone}</td>

                                <td>修改/删除</td>

                        </tr>

                        </c:forEach>

                </table>

        </body>

</html>

程序运行之后,浏览器页面显示效果如下:

3.<c:choose> <c:when> <c:otherwise>标签  (下面代码是完整的JSP页面代码,介绍这几个标签的使用)

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

<%@pagecontentType="text/html;charset=UTF-8"language="java"%>

<html>

        <head>

                <title>choose-when-otherwise</title>

        </head>

        <body>

                <%--

                        <c:choose><c:when><c:otherwise>标签

                                作用:多路判断。跟switch...case....default非常接近

                                choose标签开始选择判断

                                when标签表示每一种判断情况

                                test属性表示当前这种判断情况的值

                                otherwise标签表示剩下的情况

                        <c:choose><c:when><c:otherwise>标签使用时需要注意的点:

                                1、标签里不能使用html注释,要使用jsp注释

                                2、when标签的父标签一定要是choose标签

                --%>

                <%-- 在请求作用域中存入数据 --%>

                <%

                        request.setAttribute("height",150);

                %>

                <c:choose>

                        <c:when test="${requestScope.height>=190}">

                                <h2>小巨人</h2>

                        </c:when>

                        <c:when test="${requestScope.height>=180}">

                                <h2>很高</h2>

                        </c:when>

                        <c:when test="${requestScope.height>=170}">

                                <h2>还可以</h2>

                        </c:when>

                        <c:otherwise>

                                <c:choose>

                                        <c:when test="${requestScope.height>160}">

                                                <h3>大于160</h3>

                                        </c:when>

                                        <c:when test="${requestScope.height>150}">

                                                <h3>大于150</h3>

                                        </c:when>

                                        <c:when test="${requestScope.height>140}">

                                                <h3>大于140</h3>

                                        </c:when>

                                        <c:otherwise>

                                                其他小于140

                                        </c:otherwise>

                                </c:choose>

                        </c:otherwise>

                </c:choose>

        </body>

</html>

程序运行之后,在浏览器页面显示结果如下:

 

空气净化器