什么是EL 表达式

全称:Expression Language,一种写法非常简介的表达式。
语法简单易懂,便于使用。表达式语言的灵感来自于ECMAScript 和XPath 表达式语言


EL 表达式的作用

作用:让jsp 书写起来更加的方便。简化在jsp 中获取作用域或者请求数据的写法。也会搭配Jstl 来进行使用。

EL表达式可以用于运算${1+2}不用于做字符串拼接(会报错)。


使用EL 表达式

语法结构:${expression},提供.[ ]两种运算符来存取数据。

使用:

a) 使用EL 表达式获取请求数据

  • i. 获取用户请求数据
  • ii. 获取请求头数据
  • iii. 获取Cookie 数据

b) 使用EL 表达式获取作用域数据

  • i. 获取作用域数据
  • ii. 作用域查找顺序
  • iii. 获取指定作用域中的数据

c) 使用EL 表达式进行运算

  • i. 算术运算
  • ii. 关系运算
  • iii. 逻辑运算

d) EL 表达式空值判断empty


EL表达式的作用范围优先级

如果用EL表达式访问某属性,没有指定作用域范围,会按优先级去找属性,即:
pageScope - requestScope - sessionScope - applicationScope

如果在某个作用域找到则用该作用域的值,否则继续往下一级别作用域找,如果都没找到,则返回null


代码示例

JSP页面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!-- 使用传统方式获取作用域对象的数据 -->
<h3>EL表达式学习:使用传统方式获取作用域对象的数据</h3>
<%--
<b><%=request.getParameter("uname")%></b><br />
<b><%=request.getAttribute("str") %></b><br />
<b><%=((User)request.getAttribute("user")).getAddr().getTown() %></b><br />
<b><%=((ArrayList)request.getAttribute("list")).get(2)%></b><br />
<b><%=((User)(((ArrayList)request.getAttribute("list2")).get(0))).getAddr().getPre() %></b><br />
<b><%=((HashMap)request.getAttribute("map")).get("c") %></b><br />
<b><%=((User)(((HashMap)request.getAttribute("map2")).get("a1"))).getAddr().getCity() %></b><br />
--%>
<%--传统方式获取作用域数据:缺点一:导入包缺点二:需要强转缺点三:获取数据的代码过于麻烦。使用El表达式获取作用域数据:作用:获取作用域对象中的数据。注意:获取的是pageContext、request、session、application四个对象中的数据,其他数据一概不理会。找到了则获取返回,找不到则什么都不做,也不报错。语法:${表达式}表达式:获取请求数据request对象存储了请求数据--->param.键名        返回值request对象存储了请求数据--->paramvalues.键名    返回的是数组通过setAttribute方法存储到作用域对象中的数据${键名} 返回键名所对应的值。注意:如果存储的是普通字符串则直接返回如果存储的是对象,则返回的是对象获取对象中的数据:普通对象${键名.属性名.属性名....}集合对象list集合--->${键名[角标]}map集合--->${键名.map集合存储的键名}作用域查找顺序:默认查找顺序:pageConext-->request--->session--->application注意:每次查找都是从小到大进行查找,找到了则获取,不再继续找了。指定查找:${pageScope.键名}---${requestScope.键名}--${sessionScope.键名}--${applicationScope.键名}El表达式的逻辑运算:${逻辑表达式}:&& || !${算术表达式}:+,-,*,/${关系表达式}:>,<,>=,==,!=,%特殊:三目运算注意:+表示加法运算,不表示字符链接。使用EL表达式进行字符链接会报错。EL的空值判断:${empty 键名}作用:判断键名对象的值是否存有数据。EL获取请求头数据和Cookie数据:请求头数据:${header}-->返回所有的请求头数据${header["键名"]}--->返回指定的键名的请求头数据${hedaerValues["键名"]}--->返回指定的键名(同键不同值)的值的数组。获取Cookie数据:${cookie}--->返回存储了所有的cookie对象的map集合${cookie.键名}---->返回指定的cookie对象${cookie.键名.name}--->返回指定的cookie对象存储的数据的键名。${cookie.键名.value}--->返回指定的cookie对象存储的数据的值。
--%>
<%String str2="哈哈哈";
%>
<!-- 使用EL表达式获取作用域对象数据 -->
<h3>EL表达式学习:使用EL表达式获取作用域对象的数据</h3>
<b>${param.uname}</b><br />
<b>${paramValues.fav[0]}</b><br />
<b>${str}</b><br />
<b>${user}</b><br />
<b>${list[2]}</b><br />
<b>${list2[0].addr.pre}</b><br />
<b>${map.c}</b><br />
<b>${map2.a1.addr.city}</b><br />
<b>-${str2}</b>
<hr />
<h3>EL的作用域查找顺序</h3>
<%pageContext.setAttribute("hello","hello pageContext");request.setAttribute("hello","hello request");session.setAttribute("hello","hello session");application.setAttribute("hello","hello application");
%>${pageScope.hello}---${requestScope.hello}--${sessionScope.hello}--${applicationScope.hello}
<h3>EL表达式的逻辑运算</h3>
${1+2}--${1*2}--${4/2}--${4-2}--${4%3}--${4==4}--${4>2}--${sex==1?'男':'女'}--${1+'2'}
<h3>EL表达式的空值判断</h3>
${empty s}--${empty s1}--${empty s2}---${empty s3}
<h3>EL获取请求头数据和Cookie数据</h3>${header}--${headerValues["accept-language"][0]} <br /><br /><br />${cookie}--${cookie.JSESSIONID}---${cookie.JSESSIONID.name}--${cookie.JSESSIONID.value}

Servlet

package com.bjsxt.servlet;import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.bjsxt.pojo.Address;
import com.bjsxt.pojo.User;
/*** 问题:*    在servlet进行请求处理后,使用作用域对象作为数据流转的载体。将数据流转给对应的jsp文件。*    那么怎么在jsp中获取作用域中的数据呢?* 使用:*    传统方式:在jsp页面中使用java脚本段语句。* * * * @author MyPC**/
public class ElServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//设置请求编码格式req.setCharacterEncoding("utf-8");//设置响应编码格式resp.setContentType("text/html;charset=utf-8");//获取请求信息String uname=req.getParameter("uname");String pwd=req.getParameter("pwd");//处理请求信息System.out.println(uname+":"+pwd);//响应处理结果//使用request作用域进行数据流转//普通字符串req.setAttribute("str","今天的天气很清爽,适合学习");//对象类型User u=new User(1, "柳岩","拍电影",new Address("河南","商丘", "虞城县"));req.setAttribute("user", u);//集合类型//List集合//存储普通字符List<String> list=new ArrayList<String>();list.add("张家辉");list.add("关晓彤");list.add("刘诗诗");//存储对象User u2=new User(2, "古力娜扎","拍电影",new Address("新疆","乌鲁木齐","乌鲁木齐"));List<User> list2=new ArrayList<User>();list2.add(u2);req.setAttribute("list",list);req.setAttribute("list2",list2);//Map集合//存储普通字符Map<String,String> map=new HashMap<String,String>();map.put("a", "北京");map.put("b", "上海");map.put("c", "商丘");req.setAttribute("map",map);//存储对象Map<String,User> map2=new HashMap<String,User>();map2.put("a1", new User(3, "迪丽热巴","拍电影",new Address("新疆","吐鲁番","吐鲁番")));req.setAttribute("map2",map2);//空值判断req.setAttribute("s","");req.setAttribute("s1",new User());req.setAttribute("s2",new ArrayList());req.setAttribute("s3",new HashMap());//请求转发req.getRequestDispatcher("/el.jsp").forward(req, resp);   return;}
}

运行结果


EL表达式对象存储了请求数据:

例:请求中含有多个相同的值(同键不同值,返回数组)

URL地址:

EL表达式

获取到的值

【EL表达式】EL 表达式学习相关推荐

  1. el表达式 java_java基础学习:JavaWeb之EL表达式

    其他更多java基础文章: java基础学习(目录) 一.EL表达式 EL 全名为Expression Language.JSP中可以使用EL表达式,EL表达式是用"${}"括起来 ...

  2. jsf el 表达式_JSF表达式语言– JSF EL

    jsf el 表达式 JSF Expression Language enables users to access the data dynamically from the JavaBeans c ...

  3. 2021-06-26 Vue中关与el挂载点的学习

    Vue中关与el挂载点的学习 目录 Vue中关与el挂载点的学习 el的基本概念 Vue实例的作用范围是什么 是否可以使用其他的选择器 是否可以设置其他的dom元素 el的基本概念 通过css选择器实 ...

  4. mysql 的或表达式_MySQL表达式学习小结

    在mysql数据库中,一个表达式是直接量.列名.运算符和函数的组合,然后得到一个值. 例如: 5-2 这是一个表达式: LEFT('this',2)    也是一个表达式. 1,表达式别名 对于SEL ...

  5. java el jstl_java -EL技术JSTL技术

    EL技术 EL 表达式概述 EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本(java代码)的编写. EL从域中取出数 ...

  6. C#复习笔记(4)--C#3:革新写代码的方式(Lambda表达式和表达式树)

    Lambda表达式和表达式树 先放一张委托转换的进化图 看一看到lambda简化了委托的使用. lambda可以隐式的转换成委托或者表达式树.转换成委托的话如下面的代码: Func<string ...

  7. [.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用

    [.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用 本节导读:讨论了表达式树的定义和解析之后,我们知道了表达式树就是并非可执行代码,而是将表达式对象化后的数据结构.是 ...

  8. c语言表达式和表达式语句的区别,C语言中表达式和表达式语句的区别(什么又叫做表达式)?...

    满意答案 sfuejr22 2016.01.13 采纳率:56%    等级:7 已帮助:659人 表达式: 表达式是操作符.操作数和标点符号组成的序列,其目的是用来说明-个计算过程. 表达式可以嵌套 ...

  9. [基础算法]通过后缀表达式实现表达式的计算

    要求说明: (1)从键盘接收算术表达式,以"#"表示接收结束: (2)输出算术表达式的值: (3)操作数仅限于非负整数,操作符只能是+.-.*./.^.(.) (4)可以判断表达式 ...

  10. PHP怎么输入表达式,PHP: 表达式 - Manual

    章 14. 表达式 表达式是 PHP 最重要的基石.在 PHP 中,几乎你所写的任何东西都是一个表达式.简单但却最精确的定义一个表达式的方式就是"anything that has a va ...

最新文章

  1. 想挖矿?不如先学习一下以太坊
  2. python能够做什么软件-python爬虫软件有哪些做的比较好的?
  3. 整数加扰java_生成随机顺序,但在java中有约束
  4. Android组件之Service
  5. LiveVideoStack线上分享第四季(五):基于Airflow的视频编码平台
  6. 我一哥们,在东莞和五名女孩被抓了.....
  7. c 运算符##_C#程序演示关系运算符的示例
  8. python程序如何做界面_如何用Python给已有小程序做界面?
  9. SCOM 2012 R2监控Microsoft Azure服务(2)配置Azure监控
  10. 触控事件MotionEvent
  11. 冈萨雷斯 数字图像处理 插图 打包下载 原tif版 + png版
  12. 计算机编程常用术语英文词汇
  13. QT编写的数据转曲线工具
  14. 启动日志中出现The APR based Apache Tomcat Native library which allows optimal performance in production env
  15. xsmax进入dfu模式_iPhone如何进入DFU模式
  16. .NET MongoDB Driver GridFS 2.2原理及使用示例
  17. WiFi共享精灵文件传输新功能:金币话费领不停
  18. 人脸姿态估计(计算欧拉角)
  19. ML 能解决哪些问题?
  20. 谷歌日历添加中国节假日

热门文章

  1. POJ - 3700 Missile Defence System.(dfs+最优性剪枝)
  2. python的应用论文_python 论文
  3. ubuntu安装linux deepin,如何在Ubuntu中安装Deepin终端 | MOS86
  4. 【数据结构】线性表的链式表示-循环单链表、循环双链表、静态链表
  5. HDU4577(2013年ACM杭州赛区邀请赛B题)
  6. 关于寻路算法的一些思考(6):预先计算好的路径的所用空间
  7. cocos2d-x初探学习笔记(1)--HelloWorld
  8. UDT协议实现分析——UDT Socket的创建
  9. Python2与Python3之间的区别?
  10. 深入理解TCP实现|经典PDF分享