EL表达式 && JSTL标准标签库

EL

Expression Language 表达式语⾔,替代 JSP ⻚⾯中数据访问时的复杂编码,可以⾮常便捷地取出域对象(pageContext、request、session、application)中保存的数据,前提是⼀定要先 setAttribute

EL 就相当于在简化 getAttribute

1、EL 对于 4 种域对象的默认查找顺序:

<%=${name}%>

pageContext ->request->session->application
按照上述的顺序进⾏查找,找到⽴即返回,在 application 中也⽆法找到,则返回 null

2、指定作⽤域进⾏查找

<%="指定作用域进行查找:"%><br/>
    <!--指定作用域进行查找-->
    <%="requestScope.name="%>${requestScope.name}<br/>
    <%="sessionScope.name="%>${sessionScope.name}<br/>
    <%="applicationScope.name="%>${applicationScope.name}<br/>

EL执行表达式

${num1&&num2}
&& || ! < > <= <= ==
&& and
|| or
! not
== eq
!= ne
< lt
> gt
<= le
>= ge
empty 变量为 null,⻓度为0的String,size为0的集合

JSTL

JSP Standard Tag Library JSP 标准标签库,JSP 为开发者提供的⼀系列的标签,使⽤这些标签可以完成⼀些逻辑处理,⽐如循环遍历集合,让代码更加简洁,不再出现 JSP 脚本穿插的情况。
实际开发中 EL 和 JSTL 结合起来使⽤,JSTL 侧重于逻辑处理,EL 负责展示数据。
JSTL 的使⽤
1、需要导⼊ jar 包(两个 jstl.jar standard.jar)存放的位置 web/WEB-INF
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、在 JSP ⻚⾯开始的地⽅导⼊ JSTL 标签库

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

3、在需要的地⽅使⽤

<c:forEach items="${list}" var="user">
 <tr>
 <td>${user.id}</td>
 <td>${user.name}</td>
 <td>${user.score}</td>
 <td>${user.address.value}</td>
 </tr>
</c:forEach>

JSTL 优点
1、提供了统⼀的标签
2、可以⽤于编写各种动态功能

核⼼标签库常⽤标签:
set、out、remove、catch
for Each:迭代标签

<%
            /**
             * for Each:迭代标签
             * varStatus="sta":可以取一些属性(sta.index从0开始下标,sta.count从1开始下标)
             */
            List<String> list = new ArrayList<>();
            list.add("a");list.add("b");list.add("c");list.add("d");list.add("e");list.add("f");
            request.setAttribute("list",list);//一定记得添加进去
        %>
        <!--循环遍历list集合,并把每一次循环的对象赋给str,0开始计数,且两边都是闭区间-->
        <!--      遍历list集合    每次循环的对象为str  筛选从[0,5]  步长为2  筛选后的对象为sta -->
        <c:forEach items="${list}" var="str" begin="0" end="4" step="2" varStatus="sta">
            <%="str从1开始下标"%><br>
            ${sta.count}-${str}<br>
        </c:forEach>

set标签:添加/修改域对象中的数据


        <%
            /**
             * JSTLjsp标准标签库核心标签有
             * set  out  remove  catch  if  choose  forEach
             * fmt格式化标签(在fmt标签.jsp中)
             */
        %>
        <%
            /**
             * set标签:添加/修改域对象中的数据
             */
        %>
        <%="set添加:"%>
        <!--相当于request.setAttribute("key","value")-->
        <c:set var="key" value="value" scope="request"></c:set>
        ${requestScope.key}<br/>
        <%="set修改:"%><br/>
        <!--修改示例-->
        <%
            User1 user1 = new User1(1,"张三",66.6,new Address(1,"科技路"));
            request.setAttribute("user1", user1);
        %>
        <!--修改之前为张三-->
        <%="修改之前:"%>
        ${user1.name}
        <br/>
        <!--set标签也可以修改内容一-->
        <!--set   目标为user集合  修改的属性为name   修改值为李四-->
        <c:set target="${user1}" property="name" value="李四"></c:set>
        <!--修改之后为李四-->
        <%="修改之后"%>
        ${user1.name}
        <hr/>

out标签:输出域对象中的数据

<%
            /**
             * out标签:输出域对象中的数据
             * 只有out标签的var="${name}",只有out标签的var需要加EL表达式
             * 如没有setAttritube("name","李四");就直接取${name},值为null
             * 但是用out取值可以定义default="未定义"
             */
        %>
        <c:set var="name" value="tom" scope="request"></c:set>
        <%="输出name键对应的值,默认(如果没有)为:未定义"%><br/>
        <c:out value="${name}" default="未定义"></c:out>
        <hr/>

move标签:删除域对象中的数据

<%
            /**
             * move标签:删除域对象中的数据
             * 注意:删除时记得添加内置对象的属性scope="page"/"request"/"session"/"application"
             * 避免全部删除了
             */
        %>
        <%="删除name键对应的值,此时再读取name键对应的值,默认为:未定义"%><br/>
        <c:remove var="name" scope="request"></c:remove>
        <c:out value="${name}" default="未定义"></c:out>
        <hr/>

catch标签:捕获异常

<%
            /**
             * catch标签:捕获异常      一般不用jsp处理,再servlet程序中处理
             * 把可能出现异常的代码放在catch标签内部定义一个var,再把var读取出来就会展示异常结果
             * 异常结果:java.lang.ArithmeticException: / by zero
             */
        %>
        <%="catch捕获异常,例:当出现10/0的情况时:"%><br/>
        <c:catch var="error">
            <%
                int a = 10 / 0;//除数不能为0
            %>
        </c:catch>
        ${error}
        <hr/>

if / choose 条件标签

<%
            /**
             * if / choose 条件标签
             * if:   test里面写判断表达式test="${num1>num2}"
             * choose:  when  +  otherwise  判断
             */
        %>
        <%="if标签:"%><br/>
        <c:set var="num1" value="1"></c:set>
        <c:set var="num2" value="2"></c:set>
        <c:if test="${num1>num2}">ok</c:if>
        <c:if test="${num1<num2}">false</c:if>
        <br/>
        <%="choose标签"%><br/>
        <c:choose>
            <c:when test="${num1>num2}">ok</c:when>
            <c:otherwise>false</c:otherwise>
        </c:choose>
        <hr/>

格式化标签库常⽤的标签:

<%
        request.setAttribute("date",new Date());
    %>
    <%="未格式化时读取date方法显示:"%><br/>
    ${date}<br/>
    <%="按照的要求格式化后读取date显示:"%><br/>
    <fmt:formatDate value="${date}" pattern="yyyy-mm-dd hh:mm:ss"></fmt:formatDate><br/>
    <%="将12345.6789以小数点为中心整数取2位,小数取3位显示,小数会四舍五入"%><br/>
    <fmt:formatNumber value="12345.6789" maxIntegerDigits="2" maxFractionDigits="3"></fmt:formatNumber>

函数标签库常⽤的标签:

    <%
        /**
         * function标签函数不用<fn:></fn>
         * 而是用${fn:}
         */
    %>

    <%="初始化字符串对象:Java,C"%><br/><hr/>
    <%
        request.setAttribute("info","Java,C");
    %>


    <%="**判断info对象是否和字符串\"Python\"相等"%><br/>
    ${fn:contains(info, "Python")}<br/>
    <%="**判断info对象是否以字符串\"Java\"开头"%><br/>
    ${fn:startsWith(info, "Java")}<br/>
    <%="**判断info对象是否以字符\"C\"结尾"%><br/>
    ${fn:endsWith(info, "C")}<br/>
    <%="**返回字符串\"va\"在info对象中的开始位置"%><br/>
    ${fn:indexOf(info, "va")}<br/>
    <%="**替换,把字符\"C\"替换成\"Python\""%><br/>
    ${fn:replace(info, "C","Python")}<br/>
    <%="**截取info对象中的从第2到第4个字符的视图,左闭右开"%><br/>
    ${fn:substring(info, 2, 4)}<br/>
    <%="**用字符\",\"把\"Java,C\"分割成两个字符串,并把第一个字符串和第二个字符串用字符\"-\"连接"%><br/>
    ${fn:split(info, ",")[0]}-${fn:split(info, ",")[1]}<br/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值