JavaWeb--JSTL和EL

一、EL是什么
  • 全称是Expression Language,即表达式语言,用来简化jsp页面的,可以替换掉页面中的java代码

  • 案例

    <%--第一个是: <%=( (Map)request . getAttribute( "map")). get( "Monday" )%>--%>
    第一个是:${requestScope.map.Mod}
    第二个是:${requestScope.map["Tus"]}
    <%--使用EL表达式获取没有的数据,不会显示NULL,页面不显示内容--%>
    第四个是:${requestScope.map.Thu}

  • 语法:${}

  • 获取数据:圆点或[]

    • ${requestScope.map.Monday}和{requestScope.map["Monday'"]}是等价的,都是在request范围内查找map,取其Monday属性

  • 数据的范围

    • ${uname}: 告诉web服务器,先在page范围内查找有没有uname,如果没有找到继续到request范围内查找,如果没有找到继续到session范围内查找,如果没有找到,继续到application范围内查找,如果还没有找到,会返回null, 在页面上显示为""

    • 如果在某一范围内找到了要查询的数据,就不会继续向下查找了

    • 我们在程序中- -般要加上相应的数据范围: ${requestScope.uname}

    • 四大范围

      • pageScope:在page范围内查找

      • requestScope:在request范围内查找

      • sessionScope:在session范围内查找

      • applicationScope:在plication范围内查找

  • 获取请求参数

    • ${"20" + 20}结果是40, EL表达式对数据类型的要求很宽松,自动进行类型转换

      如果想要拼接: ${"20"}${20}

二、
  • jstl (jsp standard tag library),jsp的标准标签库,它是sun公司制定 的一套开发前端页面的标签,主要用来弥补html的不足,以及替换掉jsp中的逻辑代码,使用时- -般需要配合EL表达式

  • 使用jstl

    1.先导包: jst.jar standard.jar

    2.引用标签:在要使用jstI的jsp页面通过标签指令引入标签库

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

    ■prefix: 标签前缀

    3.在jsp页面使用标签

  • 使用标签

    <%@ page import="com.jxd.model.Emp" %>
    <%@ page import="java.util.List" %><%--
      Created by IntelliJ IDEA.
      User: Administrator
      Date: 2022/5/9
      Time: 15:37
      To change this template use File | Settings | File Templates.
    --%>
    <%@ 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>
    </head>
    <body>
        <%--1.<c:set>:把某个数据存入某个范围内,或者说在某个范围内设置变量    --%>
        <%--语法:<c:set var="变量名" value="变量值" scope="四大范围之一"    --%>
        <c:set var="uname" value="李四" scope="page"></c:set>
        <%--2.<c:out>:用来输出数据(字符串或EL表达式)--%>
        <%--我们曾用java语言在jsp页面输出数据<%=%>或<%out.print()%>,完全可用此标签替换--%>
        <%--输出page范围内的uname--%>
        <c:out value="${pageScope.uname}"></c:out>
        <br>
        <c:set var="age" value="20" scope="request"></c:set>
        age的值为:<c:out value="${requestScope.age}"></c:out>
        <br>
        <%--3.<c:remove>:移除某一范围内的数据--%>
        <%--语法:<c:remove var="要移除的变量名" scope="四大范围之一">--%>
        <%--移除请求范围内的age变量--%>
        <c:remove var="age" scope="request"></c:remove>
        移除后age的值为空:<c:out value="${requestScope.age}"></c:out>
    ​
        <%--4.<c:redirect>:客户端重定向标签--%>
        <%--执行了重定向或转发,该页面中的内容就不可见--%>
        <%--<c:redirect url="http://www.baidu.com"></c:redirect>--%>
    ​
        <%--5.<c:if>:判断标签,作用和if一样,用来实现条件控制--%>
        <%--语法:<c:if test="判断条件,一般为EL表达式">--%>
        <%--当page范围内的uname值为admin,则跳转到百度--%>
        <c:if test="${pageScope.uname == '张三'}">
            <c:redirect url="http://www.baidu.com"></c:redirect>
        </c:if>
    ​
        <br>
        <%--6.<c:choose></c:choose>:用于在众多选项中做出选择--%>
        <c:choose>
            <c:when test="${pageScope.uname == '张三'}">
                我是张三
            </c:when>
            <c:when test="${pageScope.uname == '李四'}">
                我是李四
            </c:when>
            <c:otherwise>
                我既不是张三,也不是李四
            </c:otherwise>
        </c:choose>
    ​
        <br>
        <%--7.<c:forEach>:循环标签,作用和foreach一样,都是用来遍历数据的--%>
        <%--语法:
             <c:forEach var="变量名,用来存储从集合中取出的元素"
                        items="要遍历的集合"
                        begin="开始下标,默认从0开始"
                        end="结束下标"
                        step="循环步长,默认是1"
                        varStatus="表示集合中每个元素的相关信息"
             >
             </c:forEach>
             varStatus:
                index: 当前元素下标
                count:循环了几次
                first:是否是第一个元素
                last:是否是最后一个元素
         --%>
        <c:forEach var="i" begin="1" end="10" step="1">
            <span><a href="#">${i}</a></span>
        </c:forEach>
    ​
        <table border="1px" width="60%" cellspacing="0">
            <tr><td>员工编号</td><td>姓名</td><td>性别</td><td>入职日期</td></tr>
            <c:forEach var="emp" items="${requestScope.emps}" varStatus="empInfo">
                <tr>
                    <td>${emp.empno}</td>
                    <td>${emp.ename}</td>
                    <td>${emp.sex}</td>
                    <td>${emp.hiredate}</td>
                    <td>${empInfo.index}---${empInfo.count}--${empInfo.first}--${empInfo.last}</td>
                </tr>
            </c:forEach>
        </table>
    </body>
    </html>
     
  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值