5_JSTL核心标签库

 JSTL核心标签

认识JSTL

为什么需要学习JSTL

通过之前的案例我们发现,就算在JSP中可以使用EL表达式取出域对象中的数据,但是仍然避免不了还是要在页面中书写一些java代码.这种嵌入JAVA代码的处理比较繁琐,容易出错,且代码不容易维护.

什么是JSTL

JSTL(Java server pages standarded tag library,即JSP标准标签库)是由JCP(Java community Proces)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。

使用JSTL的好处:

开发人员可以利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入Java程序的做法,以提高程序的阅读性、维护性和方便性。在jstl中, 提供了多套标签库, 用于方便在jsp中完成或简化相关操作.

JSTL标签库的组成部分

>核心标签库: core, 简称c

>格式化标签库: format, 简称fmt

>函数标签库: function, 简称fn

JSTL的使用前提

1需要在项目中导入jstl-1.2.jar ,jstl在后台由java代码编写, jsp页面中通过标签进行使用, 使用标签时, 会自动调用后台的java方法,

2标签和方法之间的映射关系在对应的tld文件中描述. 需要在页面中通过taglib指令引入对应的标签库, uri可以在对应的tld文件中找到

<%@   taglib uri="标签库的定位" prefix="前缀(简称)" %>

 

核心标签库导入的语句为:

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

 

操作域对象的标签:

<c:set>         向域对象中放入数据  setAttribute

<c:out>        从域对象中取出数据  getAttribute

<c:remove> 从域对象中移除数据   removeAttribute

c:set/out/remove标签的使用

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--分别向四个域中放入数据--%>
    <%--<%
    request.setAttribute("msg", "requestMessage");
    %>--%>
    <%--
    c:set
        scope 指定放数据的域 可选值 page request session application
        var   数据的名称
        value 数据
    --%>
    <c:set scope="page" var="msg" value="pageMessage"></c:set>
    <c:set scope="request" var="msg" value="requestMessage"></c:set>
    <c:set scope="session" var="msg" value="sessionMessage"></c:set>
    <c:set scope="application" var="msg" value="applicationMessage"></c:set>
    <%--移除指定域中的值--%>
   <%-- <c:remove var="msg" scope="page"></c:remove>
    <c:remove var="msg" scope="request"></c:remove>--%>
    <c:remove var="msg" scope="session"></c:remove>
    <c:remove var="msg" scope="application"></c:remove>
    <%--通过EL表达式取出域中的值--%>
    <hr/>
    ${pageScope.msg}<br/>
    ${requestScope.msg}<br/>
    ${sessionScope.msg}<br/>
    ${applicationScope.msg }<br/>
    <hr/>
    <%--通过c:out标签获取域中的值--%>
    <c:out value="${pageScope.msg}" default="page msg not found"/>
    <c:out value="${requestScope.msg}" default="request msg not found"/>
    <c:out value="${sessionScope.msg}" default="session msg not found"/>
    <c:out value="${applicationScope.msg}" default="application msg not found"/>
</body>
</html>

 

多条件分支标签

c:if和c:choose标签的使用

<%@ page import="java.util.Random" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--
    随机生成一个分数  0-100
    >=90 A
    >=80 B
    >=70 C
    >=60 D
    <60  E
    --%>
    <%
        int score =new Random().nextInt(101);
        pageContext.setAttribute("score", score);
    %>
    <%--
    test  判断条件
    c:if可以将test的结果放入指定的域中
    scope 指定存放的域
    var   数据名
    --%>
    分数:${score}<br/> 等级:
    <c:if test="${score ge 90}" scope="page" var="f1">A</c:if>
    <c:if test="${score ge 80 and score lt 90}" scope="page" var="f2">B</c:if>
    <c:if test="${score ge 70 and score lt 80}" scope="page" var="f3">C</c:if>
    <c:if test="${score ge 60 and score lt 70}" scope="page" var="f4">D</c:if>
    <c:if test="${score lt 60}" scope="page" var="f5">E</c:if>
    <hr/>
    ${f1}
    ${f2}
    ${f3}
    ${f4}
    ${f5}
    <hr/>
    <%--输出分数是否及格--%>
    <c:if test="${score ge 60}" scope="page" var="flag">及格</c:if>
    <c:if test="${!pageScope.flag}">不及格</c:if>
    <hr/>
    <c:choose>
        <c:when test="${score ge 90}">A</c:when>
        <c:when test="${score ge 80}">B</c:when>
        <c:when test="${score ge 70}">C</c:when>
        <c:when test="${score ge 60}">D</c:when>
        <c:otherwise>E</c:otherwise>
    </c:choose>
</body>
</html>

 


迭代标签

c:foreach打印99乘法表

c:forEach中的属性

                > var: 迭代变量, 存放在pageContext作用域

                > begin: 迭代起始值

                > end: 迭代结束值

                > step: 迭代变量变化的步长

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--
    for ( int i =1;i<=9 ;i+=2){
        pageContext.setAttribute("i",i)
    }
    c:foreach 每次执时都会向page域中放入一个名为 i 值为当前值这样的一个操作
    --%>
    <c:forEach var="i" begin="1" end="9" step="1">
        <c:forEach var="j" begin="1" end="${i}" step="1">
            ${j} * ${i} = ${i*j} &nbsp;
        </c:forEach>
        <br/>
    </c:forEach>
</body>
</html>

c:foreach遍历对象数组/List

  items: 要遍历的集合, 需要使用EL表达式取值

     varStatus: 迭代变量的状态

            index: 索引, 从0开始

            count: 计数, 从1开始

            first: boolean, 表示是否是第一个

            last: boolean, 表示是否是最后一个

         current: 对象, 当前迭代的对象值

后台代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
    <style>
        table{
            border: 3px solid blue;
            width: 90%;
            margin: 0px auto;
        }
        td,th{
            border: 2px solid green;
        }
    </style>
</head>
<body>
    <table cellspacing="0px" cellpadding="0px">
        <tr>
            <th>序号</th>
            <th>索引</th>
            <th>isFirst</th>
            <th>isLast</th>
            <th>工号</th>
            <th>姓名</th>
            <th>姓名</th>
            <th>上级编号</th>
            <th>职务</th>
            <th>入职日期</th>
            <th>薪资</th>
            <th>补助</th>
            <th>部门号</th>
            <th>薪资等级</th>
        </tr>
        <%--<%
        List<Emp> emps = (List<Emp>) request.getAttribute("emps");
        for (Emp emp : emps) {
            pageContext.setAttribute("emp", emp);//将员工对象放入PageContext 域
        %>
        c:foreach
            items 要遍历的数组/List  可以通过EL表达式取出集合之后给改属性赋值
            var   中间变量的名称
            varStatus 记录每一个对象状态的设置
                   count 个数
                   index 索引
                   first 如果当前元素是迭代的第一个元素 true 否则为false
                   last  如果当前元素是迭代的最后一个元素 true 否则为false
                   current 当前迭代的元素本身
        --%>
        <c:forEach items="${emps}" var="emp" varStatus="empStatus">
            <tr>
                <td>${empStatus.count}</td>
                <td>${empStatus.index}</td>
                <td>${empStatus.first}</td>
                <td>${empStatus.last}</td>
                <td>${emp.empno}</td>
                <td>${emp.ename}</td>
                <td>${empStatus.current.ename}</td>
                <td>${emp.mgr}</td>
                <td>${emp.job}</td>
                <td>${emp.hiredate}</td>
                <td>${emp.sal}</td>
                <td>${emp.comm}</td>
                <td>${emp.deptno}</td>
                <td>
                   <c:choose>
                       <c:when test="${emp.sal le 500}">A</c:when>
                       <c:when test="${emp.sal le 1000}">B</c:when>
                       <c:when test="${emp.sal le 1500}">C</c:when>
                       <c:when test="${emp.sal le 2000}">D</c:when>
                       <c:when test="${emp.sal le 3000}">E</c:when>
                       <c:when test="${emp.sal le 4000}">F</c:when>
                       <c:when test="${emp.sal gt 4000}">G</c:when>
                   </c:choose>
                </td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

 


posted @ 2023-03-16 09:08  CodeWhisperer001  阅读(22)  评论(0编辑  收藏  举报