EL表达式与JSTL

一、EL表达式

        1.EL表达式概述

                EL表达式,全称是Expression Language。意为表达式语言。它是Servlet规范中的一部分,是JSP2.0规范加入的内容。其作用是用于在JSP页面中获取数据,从而让我们的JSP脱离java代码块和JSP表达式。

        2.基本语法

                EL表达式的语法格式非常简单,写为 ${表达式内容}

        3.EL表达式入门

                3.1、JSP页面中编写代码

<%--
  Created by IntelliJ IDEA.
  User: 86136
  Date: 2024/6/5
  Time: 14:35
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>El表达式入门案例</title>
  </head>
  <body>
    <%--使用java代码在请求域中存入为message的数据--%>
    <% request.setAttribute("message","Expression Language");%>
    <br>
    <%--java代码块获取--%>
    java代码块获取:<%out.print(request.getAttribute("message"));%>
    <br>
  <%--jsp表达式获取:--%>
    jsp表达式获取:<%=request.getAttribute("message")%>
  <%--El表达式获取:--%>
    El表达式获取:${message}

  </body>
</html>

二、EL表达式基本用法

        1、运算

                1.1、算术运算符

运算符作用示例
+${5+5}
-${5 - 5}
*${3 * 5}
/或者div${9 / 2} 或者 ${9 div 2}
%或者mod取余${9%2} 或者 ${9 mod 2}

                 1.2、逻辑运算符

运算符作用示例结果
&& 或 and并且${A && B} 或 ${A and B}true / false
|| 或 or或者${A
! 或 not取反${ !A } 或 ${ not A }true / false

                1.3 、比较运算符

运算符作用示例结果
== 或 eq等于${5 == 5}或 ${5 eq 5}true
!= 或 ne不等于${5 != 5} 或 ${5 ne 5}false
< 或 lt小于${3 < 5} 或 ${3 lt 5}true
> 或 gt大于${3 > 5} 或 ${3 gt 5}false
<= 或 le小于等于${3 <= 5} 或 ${3 le 5}true
>= 或 ge大于等于${3 >= 5} 或 ${3 ge 5}false

                1.4、特殊运算符

运算符作用
empty1.判断对象是否为null 2.判断字符串是否为空字符串 3.判断容器元素长度是否为0
条件 ? 表达式1 : 表达式2三元运算符

        2、代码演示:

<%@ page import="com.Part" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %><%--
  Created by IntelliJ IDEA.
  User: 86136
  Date: 2024/6/5
  Time: 14:55
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>基本用法</title>
</head>
<body>
    <%--算术运算符--%>
    ${5+5}<br>
    ${5-4}<br>
    ${5*4}<br>
    ${5/2} -- ${5 div 2}<br>
    ${5%2} -- ${5 mod 2}<br>
    <%--逻辑运算--%>
    ${1>2 && 1>3}<br>
    ${1>2 && 4 > 1}<br>
    <%--比较运算符--%>
    ${1==1} -- ${1 eq 1}<br>
    ${1!=1} -- ${1 ne 1}<br>
    ${1<2} -- ${1 lt 2}<br>
    ${1>1} -- ${1 gt 1}<br>
    ${1<=1} -- ${1 le 1}<br>
    ${1>=1} -- ${1 ge 1}<br>
    <%--特殊运算符--%>
    <% request.setAttribute("msg",""); %>
    ${empty msg}<br>
    ${3>2? "女孩":"男孩"}
</body>
</html>

        3、获取值

                2.1、获取普通值

                 ${域名称.键名}

<%--获取值  ${域名称.键名}--%>
<%
    request.setAttribute("msg","我喜欢你");
%>
${msg}

                2.2、获取自定义对象

                  ${域名称.键名.属性名}

package com;

/**
 * @author 86136
 */
public class Part {
    private String name;
    private String sex;
    private int age;

    public Part() {
    }

    public Part(String name, String sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Part{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }
}
<%--获取自定义对象  ${域名称.键名.属性名}--%>
<%
    Part part = new Part("苏沐橙", "女孩", 19);
    request.setAttribute("role",part);
%>
${requestScope.role}<br>
${requestScope.role.name}<br>
${requestScope.role.sex}<br>
${requestScope.role.age}<br>

                2.3、获取数组元素

                  ${域名称.键名[索引]}

<%
    String[] str = {"苏沐橙","涂山红红"};
    request.setAttribute("arr",str);
%>
${arr[0]}<br>
${arr[1]}<br>

                2.4、获取list集合元素

<%
    Part part1 = new Part("苏沐橙", "女孩", 19);
    ArrayList<Object> list = new ArrayList<>();
    list.add("陈雨舒");
    list.add("瑶瑶");
    list.add(part1);
    request.setAttribute("list",list);
%>
${list[0]}<br>
${list[1]}<br>
${list[2].name}<br>

                2.5、获取Map集合元素

<%
    HashMap<String, Object> map = new HashMap<>();
    map.put("code",200);
    map.put("msg","访问成功");
    request.setAttribute("map",map);
%>
${map.code}<br>
${map["msg"]}

三、 EL表达式的隐式对象

隐式对象名称说明
pageContext功能完全相同
applicationScope操作应用域对象数据
sessionScope操作会话域对象数据
requestScope操作请求域对象数据
pageScope操作页面域对象数据
header获取请求头数据
headerValues获取请求头数据(多个值)
param获取请求参数数据
paramValues获取请求参数数据(多个值)
initParam获取全局配置参数数据
cookie获取Cookie对象

 el表达式中有11个隐式对象

         pageContext:

                * 获取jsp其他八个内置对象

                * ${pageContext.request.contextPath}:动态获取虚拟目录

四、 JSTL

        1、JSTL概述

                JSTL的全称是:JSP Standard Tag Libary。它是JSP中标准的标签库。它是由Apache实现的。

                它由以下5个部分组成:

组成作用说明
Core核心标签库。通用逻辑处理
Fmt国际化有关。需要不同地域显示不同语言时使用
FunctionsEL函数EL表达式可以使用的方法
SQL操作数据库。不用
XML操作XML。不用

        2、使用要求:

                1、把javax.servlet.jsp.jstl.jar和jstl-impl.jar加人工程WEB-INF目录下创建一个lib目录

                2、在后缀jsp引入标签库<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>         

        3、JSTLL核心标签库:

标签名称功能分类分类作用
<c:if>流程控制核心标签库用于判断
<c:choose> ,<c:when>,<c:otherwise>流程控制核心标签库用于多个条件判断
<c:foreache>迭代操作核心标签库用于循环遍历

        4、JSTL使用

                1、 if语句(相当于java代码的if语句 )

                        1、属性:

                              * test 必须属性,接受boolean表达式 

                              *如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容                               * 一般情况下,test属性值会结合el表达式一起使用   

                        2、注意:

                                c:if标签没有else情况,想要else情况,则可以在定义一个c:if标签

                2、choose语句(相当于java代码的switch语句 )

                        1. 使用choose标签声明 相当于switch声明

                        2. 使用when标签做判断 相当于case

                        3. 使用otherwise标签做其他情况的声明 相当于default

                3、foreache语句

                        begin:开始值 end:结束值 var:临时变量 step:步长

                        items:容器对象

                        var:容器中元素的临时变量

                        varStatus:循环状态对象

                        index:容器中元素的索引,从0开始 count:循环次数,从1开始

                5、代码演示:

<%@ page import="java.util.ArrayList" %><%--
  Created by IntelliJ IDEA.
  User: 86136
  Date: 2024/6/5
  Time: 15:20
  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>JSTL</title>
</head>
<body>
    <%
        ArrayList<Object> list = new ArrayList<>();
        list.add("aa");
        request.setAttribute("list",list);
        request.setAttribute("num",5);
    %>
    <%--if语句--%>
    <c:if test="${empty list}">
        集合为空
    </c:if>
    <c:if test="${not empty list}">
        集合不为空
    </c:if>
    <br>
    <c:if test="${num % 2 == 0}">
        偶数
    </c:if>
    <c:if test="${num % 2 != 0}">
        基数
    </c:if>
    <%--choose语句 --%>
    <c:choose>
        <c:when test="${num==1}">周一</c:when>
        <c:when test="${num==2}">周二</c:when>
        <c:when test="${num==3}">周三</c:when>
        <c:when test="${num==4}">周四</c:when>
        <c:when test="${num==5}">周五</c:when>
        <c:otherwise>数字有误!</c:otherwise>
    </c:choose>
    <%--foreache语句 begin:开始值 end:结束值 var:临时变量 step:步长--%>
    <c:forEach begin="1" end="10" var="i" step="1">
        ${i}
    </c:forEach>
    <%--items:容器对象 var:容器中元素的临时变量 varStatus:循环状态对象 index:容器中元素的索引,从0开始 count:循环次数,从1开始--%>
    <%
        ArrayList<Object> list1 = new ArrayList<>();
        list1.add("苏沐橙");
        list1.add("瑶瑶");
        list1.add("陈雨舒");
        request.setAttribute("list1",list1);
    %>
    <br>
    <c:forEach items="${list1}" var="s" varStatus="x">
        ${x.index} -- ${x.count} -- ${s}<br>
    </c:forEach>
</body>
</html>

 

                       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渣男あ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值