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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值