EL表达式和JSTL

1,054 阅读1分钟

一:EL表达式

1. 概念

  • Expression Language,即表达式语言

2. 用途

  • 替换并简化JSP中Java代码的编写

3. 语法

  • 格式:${表达式}

4. 是否在JSP中忽略EL表达式

  • JSP中默认支持EL表达式,有以下2种方法忽略EL表达式
  1. 设置JSP的page指令,即<%@ page isELIgnored="true" %>
  2. 在要忽略的EL表达式前加\,例如\${1 > 0}

5. 用法

1. 做运算

  • 运算符分类
  1. 算术运算符
    • +,-,*,/(div),%(mod)
  2. 比较运算符
    • >,>=,<,<=,==,!=
  3. 逻辑运算符
    • &&(and),||(or),!(not)
  4. 空运算符
    • empty
      1. ${empty 对象名}:判断数组,字符串或集合对象是否为null或长度是否为0
      2. ${not empty 对象名}:判断数组,字符串或集合对象是否不为null并且长度是否大于0

2. 获取值

  1. EL表达式只能从域对象中获取值
  2. 语法
    1. ${域名称.键名}:从指定域中获取指定键对应的值
      1. 域名称(作用域从小到大排序)->对应的内置对象
        1. pageScope -> pageContext
        2. requestScope -> request
        3. sessionScope -> session
        4. applicationScope -> application 示例代码:
        <%
            request.setAttribute("name","zs");
        %>
        ${requestScope.name}
        
      2. ${键名}:按照作用域从小到大的顺序,依次查找是否有此键名,若有,输出对应的值;若无,则不输出任何内容
  3. 获取对象、List集合和Map集合的值
    1. 获取对象的属性的值
      • ${域名称.键名.属性名}
      • 本质上调用了此对象的getter方法 示例代码:
      <%
      session.setAttribute("req",request);
      %>
      ${sessionScope.req.requestURL}
      
    2. 获取List集合中元素的值
      • ${域名称.键名[索引]}
    3. 获取Map集合中元素的值
      • ${域名称.键名.key名称}
      • ${域名称.键名["key名称"]} 示例代码:
      <%
      Map<String,String> map = new HashMap<>();
      map.put("name","zs");
      map.put("age","18");
      request.setAttribute("map",map);
      %>
      ${requestScope.map.name}
      ${requestScope.map["age"]}
      

3. 隐式对象

  • EL表达式中有11个隐式对象,类似于JSP中的内置对象
    • 其中的pageContext
      1. 可以获取JSP的其他8个内置对象
      2. 动态获取虚拟目录:${pageContext.request.contextPath}

二:JSTL

1. 概念

  • JSP Standard Tag Library,即JSP标准标签库

2. 用途

  • 替换并简化JSP中Java代码的编写

3. 使用步骤

  1. 导入JSTL相关的jar包

    1. apache官网下载JSTL相关的jar包的压缩包,即jakarta-taglibs-standard-1.1.2.zip
    2. 下载完成后进行解压
    3. jakarta-taglibs-standard-1.1.2\lib目录下的jstl.jarstandard.jar导入到IDEA项目中
      image.png
  2. 在JSP中导入标签库<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

  3. 利用前缀c来使用标签,例如<c:if test="1 > 0"> 否 </c:if>

4. 常用的JSTL标签

  1. if
    • 相当于Java代码中的if语句
    • 其中的test属性
      • 必须属性,接受boolean表达式
      • 如果表达式值为true,则输出标签体内容;否则,不输出标签体内容
      • 一般情况下,test属性值会结合EL表达式使用
      • if标签没有else情况
  2. choose
    • 相当于Java代码中的switch语句
    1. 使用choose标签(相当于switch)
    2. 使用when标签(相当于case)
    3. 使用otherwise(相当于default) 示例代码
    <%
        request.setAttribute("score",90);
    %>
    <c:choose>
        <c:when test="${requestScope.score >= 80}">优秀</c:when>
        <c:when test="${requestScope.score >= 60}">及格</c:when>
        <c:otherwise>不及格</c:otherwise>
    </c:choose>
    
  3. foreach
    • 相当于Java代码中的for语句
    1. 完成重复操作
      • 属性
        1. begin:开始值
        2. end:结束值
        3. step:步长
        4. var:临时变量
        5. varStatus:循环状态变量
          1. index:索引,从0开始
          2. count:循环次数,从1开始
    2. 遍历集合
      • 属性
        1. items:集合对象
        2. var:临时变量
        3. varStatus:循环状态变量
          1. index:索引,从0开始
          2. count:循环次数,从1开始