JSTL tag library study notes (super detailed)

The full name of JSTL tag library refers to JSP Standard Tag Library. It is an open source JSP tag library that is constantly improving.

The EL expression is mainly to replace the expression script in the jsp, and the tag library is to replace the code script. This makes the entire jsp page better and more concise.

JSTL consists of five tag libraries with different functions.

Function range HATE Prefix
Core Tag Library-Highlights http://java.sun.com/jsp/jstl/core c
format http://java.sun.com/jsp/jstl/fmt fmt
function http://java.sun.com/jsp/jstl/functions fn
Database (not used) http://java.sun.com/jsp/jstl/sql sql
XML (not used) http://java.sun.com/jsp/jstl/xml x

Use the taglib instruction to introduce the tag library in the jsp tag library

CORE tag library

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

XML tag library

<%@ taglib prefix=“x” uri=“http://java.sun.com/jsp/jstl/xml” %>

FMT tag library

<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt” %>

SQL tag library

<%@ taglib prefix=“sql” uri=“http://java.sun.com/jsp/jstl/sql” %>

FUNCTIONS tag library

<%@ taglib prefix=“fn” uri=“http://java.sun.com/jsp/jstl/functions” %>

1. Steps to use JSTL tag library

1. First import the jar package of the jstl tag library.

​ taglibs-standard-impl-1.2.1.jar

​ taglibs-standard-spec-1.2.1.jar

2. In the second step, use the taglib instruction to introduce the tag library.

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

2.core core library use

2.1 <c:set /> (rarely used)

Role: set tag can save data to the domain

<body>
    <%--
    <c:set />(使用很少)
    作用:set 标签可以往域中保存数据

    域对象.setAttribute(key,value);

    scope 属性设置保存到哪个域
        page 表示 PageContext 域(默认值)
        request 表示 Request 域
        session 表示 Session 域
        application 表示 ServletContext 域

    var属性设置key是多少

    value属性设置值是多少
    --%>
    保存之前:${requestScope.abc} <br>
    <c:set  scope="request" var="abc" value="abcValue"/>
    保存之后:${requestScope.abc} <br>
</body>

Show results:
Insert picture description here

2.2 <c:if />

The if tag is used to make if judgments.

<%--
<c:if />
    if 标签用来做 if 判断。
    test 属性表示判断的条件(使用 EL 表达式输出)
--%>
<c:if test="${ 12 == 12 }">
    <h1>12 等于 12</h1>
</c:if>
<c:if test="${ 12 != 12 }">
    <h1>12 不等于 12</h1>
</c:if>

Show results:

Insert picture description here

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

Role: Multi-way judgment. Very close to switch… case… default

<%--
    <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", 180);
%>
<c:choose>
    <%-- 这是 html 注释 --%>
    <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>

Show results:

Insert picture description here

2.4 < c:forEach />

Role: traverse output use.

2.4.1 Traverse 1 to 10, output

<c:forEach begin="1" end="10" var="i">
    <%--1. --%>
    ${i} <br>
    <%--2. --%>
    <h1>${i}</h1>
</c:forEach>

or:

<%--
<c:forEach />
作用:遍历输出使用
--%>
<%--
1.遍历 1 到 10,输出
    begin 属性设置开始的索引
    end 属性设置结束的索引
    var 属性表示循环的变量(也是当前正在遍历到的数据)
    
    for (int i = 1; i < 10; i++)
--%>
<table border="1">
    <c:forEach begin="1" end="10" var="i">
        <tr>
            <td>第${i}行</td>
        </tr>
    </c:forEach>
</table>

2.4.2 Traverse Object Array

<%--
2.遍历 Object 数组
    for (Object item: arr)
    items 表示遍历的数据源(遍历的集合)
    var 表示当前遍历到的数据
--%>
<%
    request.setAttribute("arr", new String[]{"18610541354","18688886666","18699998888"});
%>
<c:forEach items="${ requestScope.arr }" var="item">
    ${ item } <br>
</c:forEach>

2.4.3 Traverse the Map collection

<%--遍历 Map 集合--%>
<%
    Map<String,Object> map = new HashMap<String, Object>();
    map.put("key1", "value1");
    map.put("key2", "value2");
    map.put("key3", "value3");
    // for ( Map.Entry<String,Object> entry : map.entrySet()) {
    // }
    request.setAttribute("map", map);
%>
<c:forEach items="${ requestScope.map }" var="entry">
    <%--输出所有的键值对--%>
    ${entry}
    <%--只输出我要的值--%>
    ${entry.key}
    ${entry.value}
    <%--按照自己希望的格式输出 key 和 value--%>
    <h1>${entry.key} = ${entry.value}</h1>
</c:forEach>

2.4.4 Traverse the List collection—Student class is stored in the list, with attributes: number, user name, password, age, phone information

<%--4.遍历 List 集合---list 中存放 Student 类,有属性:编号,用户名,密码,年龄,电话信息--%>
<%
    List<Student> studentList = new ArrayList<Student>();
    for (int i = 1; i <= 10; i++) {
        studentList.add(new Student(i,"username"+i ,"pass"+i,18+i,"phone"+i));
    }
    request.setAttribute("stus", studentList);
%>
<table>
    <tr>
        <th>编号</th>
        <th>用户名</th>
        <th>密码</th>
        <th>年龄</th>
        <th>电话</th>
        <th>操作</th>
    </tr>
    <%--
        items 表示遍历的集合
        var 表示遍历到的数据
        begin 表示遍历的开始索引值
        end 表示结束的索引值
        step 属性表示遍历的步长值
        varStatus 属性表示当前遍历到的数据的状态
    for(int i = 1; i < 10; i+=2)
    --%>
    <c:forEach begin="2" end="7" step="2" varStatus="status" items="${requestScope.stus}" var="stu">
        <tr>
            <td>${stu.id}</td>
            <td>${stu.username}</td>
            <td>${stu.password}</td>
            <td>${stu.age}</td>
            <td>${stu.phone}</td>
            <td>${status.step}</td>
        </tr>
    </c:forEach>
</table>

Guess you like

Origin blog.csdn.net/weixin_45024585/article/details/112747979