EL&JSTL-------EL

本文介绍了JSP2.0中的EL表达式,详细解释了EL表达式的功能,包括获取数据、执行运算、调用Java方法等,并提供了多个示例说明如何在JSP页面中使用EL表达式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EL表达式

表达式语言(Expression )简称EL,它是JSP2.0中引入的一个新内容。通过EL可以简化在JSP开发中对对象的引用,从而规范页面代码,增加程序的可读性及可维护性。

主要作用:

1、获取数据

EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域中检索Java对象、获取数据。(某个web域中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)

2、执行运算

利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算数运算,以在JSP页面中完成一些简单的逻辑运算。${user == null}

3、获取web开发常用对象

EL表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。

4、调用Java方法

EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。

获取数据

EL表达式可以用于替换JSP页面中的脚本表达式,以从各种类型的web域中检索Java对象、获取数据(某个web域中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)。在JSP页面中可使用${标识符}的形式,通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果对象中不存在标识符所对应的对象,则返回" "(注意不是null)。

<%@ page import="org.lanqiao.shoppingcar.pojo.Customer" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.LinkedHashMap" %>
<%@ page import="java.util.Map" %><%--
  Created by IntelliJ IDEA.
  User: huwei
  Date: 2018/7/18
  Time: 15:39
  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>
    <%
        request.setAttribute("name","张三");
        session.setAttribute("username","李四");
    %>

    ${requestScope.name}--相当于--><%=pageContext.findAttribute("name")%>---->${sessionScope.username}
    <hr>
    <%
        List<Customer> cList = new ArrayList<>();
        Customer  c1 = new Customer("张三1","1233455","山西太原",1);
        Customer  c2 = new Customer("张三2","1233455","山西太原",1);
        Customer  c3 = new Customer("张三3","1233455","山西太原",1);
        cList.add(c1);
        cList.add(c2);
        cList.add(c3);
        request.setAttribute("cList",cList);
    %>
    <%--对于list集合  的下标是从0开始--%>
    ${cList[1].username}
    <hr>
    <!-- 在jsp页面中,使用el表达式获取map集合的数据 -->
    <%
        Map<String,String> map = new LinkedHashMap<String,String>();
        map.put("a","aaaaxxx");
        map.put("b","bbbb");
        map.put("c","cccc");
        map.put("1","aaaa1111");
        request.setAttribute("map",map);
    %>
    ${map.a}---->${map["1"]}
</body>
</html>

EL表达式访问JavaBean属性

1、访问一个普通的javabean,假设一个对象Person有那么属性

Person person = new Person();

先request.setAttribute("person",person);

显示name:${person.name}

2、访问数组,利用下标直接访问

String s[] = {"1","2"};

request.setAttribute("s",s);

显示s[1]:    ${s[1]}或者${s["1"]}

3、访问List,直接用下标进行访问

ArrayList list = new ArrayList();

list.add("1");

list.add("1");

request.setAttribute("list",list);

显示list[1]:      ${list[1]}或者${list["1"]}

4、访问一个Map,用 .  或者[]访问

 

Map map = new Map();

map.put("one","no.1");

map.put("two","no.2");

request.setAttribute("map",map);

显示map("one"):    ${map.one}或者${map["one"]}

注意:这里千万不能用${map[one]}因为下标里面的东西如果不加引号,它就相当于一个属性,容器编译的时候就会去寻找one属性,相当于${one},找不到,当然就错了,中括号里面是可以嵌套表达式的,但是,中括号里面的表达式是去掉${}的

[]与 . 运算符

EL提供 . 和[] 两种运算符来存取数据。当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符合,就一定要用[]。例如:

                                                                    ${user.My-Name}应当改为${user["My-Name"]}

如果要动态取值时,就可以用[]来做,而.无法做到动态取值。

例如:

                                                                    ${sessionScope.user[data]}中data是一个变量

假若data的值为“sex”时,那上述的例子等于${sessionScope.user.sex};

假若data的值为“name”时,它就等于${sessionScope.user.name}。因此,如果要动态取值时,就可以用上述的方法来做,但,无法做到动取值态。

执行运算

1、EL算数运算: +   -   *   /

2、EL关系运算

表达式语言不仅可在数字与数字之间比较,还可在字符与字符之间比较,字符串的比较是根据其对应UNICOD值来比较大小的。

注意:在使用EL关系运算符时,不能够写成:${param.password 1}==${param.password 2}或者${${param.password 1}==${param.password 2}},而应写成${param.password 1==param.password 2}

3、EL逻辑运算

Empty运算符

Empty运算符主要用来判断值是否为空(NULL,空字符串,空集合)。<%@page pageEncoding="UTF-8"%><BR>name:${param.name}</br>

                                                               empty处理结果:${empty param.name}</br>

                                                               ==null处理结果:${param.name == null}

地址栏输入:地址栏输入:http://127.0.0.1:8080/test/test.jsp      empty:true   ==null:true

地址栏输入:地址栏输入:http://127.0.0.1:8080/test/test.jsp ?name=    empty:true   ==null:false

结论:在EL中,empty对“ ”和null的处理都返回true;而null对“ ”返回false,对null返回true

<%--
  Created by IntelliJ IDEA.
  User: huwei
  Date: 2018/7/18
  Time: 16:04
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    name:<%=request.getParameter("name")%><br>
    name:${param.name}<br>
    ${empty param.name}<br><!-- 如果为null 和""  都返回true-->
    ${param.name == null || param.name==""}<!--只能是当为null的时候  返回true-->
</body>
</html>

二元表达式:${user!=null?user.name:""}成立取第一个值,不成立取第二个。

获得web开发中的常用对象

EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便的获取web开发中的一些常见对象,并读取这些对象的数据。

语法:${隐式对象名称}:获得对象的引用

          类别                         标识符                                                             描述

与作用范围有关的EL隐含对象包含有:pageScope、requestScope、sessionScope和applicationScope

它们可以读取使用JSP内置对象pageContext、request、session以及application的setAttribute()方法所设定的对象的数值------即getAttribute(String name),却不能取得其他相关信息。例如,要取得session中储存的一个username属性的值,可以利用下面的方法:                                                                   session.getAttribute("username")

在EL中则使用下面的方法:

                                                                 ${sessionScope,username}

注意:如果没有设定使用EL内置对象的作用范围,则按照pageScope、requestScope、sessionScope和applicationScope的先后顺序读取属性值,即,通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果域对象中不存在标识符所对应的对象,则返回结果为" "(注意,不是null)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值