EL表达式

1. 什么是EL表达式

jsp中的EL(express language)表达式技术:它仅仅是表达式。

EL表达式的功能:

获取4个内置对象(域)中的数据,或自定义对象中的数据,或数组、集合容器中的数据。可以完成非常简单的运行,但它不能完成循环、复杂的判断等功能。

EL表达式的书写格式:${ 表达式 }

EL表达式的底层是我们前面学的jsp中的各种对象与方法的操作,只是做了一些优化;有一个很大的优化就是如果找不到数据的话不会返回null或者报异常,而是什么都不显示;

2. EL表达式获取域对象中的数据

格式1: ${xxxxScope.key}

使用el表达式从不同的域中取出数据,需要使用el中的4个内置对象搞定:pageScope、requestScope、sessionScope、applicationScope

在4个el内置对象xxxxScope取出保存的数据时,相当于使用pageContext.getAttribute(key,scope);取值

格式2: ${key}

如果不知道数据在哪个范围中,这时可以不用指定范围直接书写key值即可 ${key}

下面代码的底层对应的是 pageContext.findAttribute();

需求1: 通过el表达式 从指定域中获取数据(比较和java代码的不同)

需求2: 通过el表达式 从不确定域中获取数据

// 向4个域中设置数据

//pageContext.setAttribute("address", "上海1"); //两个参数,默认向page域中放

//pageContext.setAttribute("address", "上海2", PageContext.REQUEST_SCOPE);

//pageContext.setAttribute("address", "上海3", PageContext.SESSION_SCOPE);

//pageContext.setAttribute("address", "上海4", PageContext.APPLICATION_SCOPE);

%>


${pageScope.address1 }

${requestScope.address }

${sessionScope.address }

${applicationScope.address }

--%>


${address}

提示:通过上面的演示,发现EL表达式从四个域中取值,就是在代替使用PageContext中的getAttribute方法取值,底层依然在使用PageContext中的getAttribute方法。

注意:

1.EL表达式只可以从四大域中获取数据,但不可以存放数据

2.EL表达式中的内容会显示到浏览器上

2.使用pageContext的getAttribute方法或者findAttribute方法从4个范围中取出数据的时候,

如果指定的key不存在会返回null,而使用el表达式取出的时候指定的key不存在,页面上什么都不会显示。

演示:

java代码获取值:


el表达式: ${pageScope.address}

页面结果:

3. EL表达式获取复杂数据

这里说的复杂数据是指:数组,集合,自定义对象。

3.1. 演示EL获取数组中的值

演示代码:

页面结果:

注意:

1.${arr1}相当于直接调用arr数组对象的toString方法,因为数组中没有重写toString方法所以会显示地址

2.${arr1[3]} 如果在java中则会报索引越界的异常,但在EL表达式中做了优化,获取不到的数据什么都不会显示

3.2. 演示EL获取List集合中的值

注意:${list1}相当于直接调用list集合对象的toString方法,因为集合中重写了toString方法所以会显示集合的元素

3.3. 演示EL获取Map集合中的值

注意:

1.向map中存放数据map.put(“ccc.ddd.fff”,333),取出整个集合${map1}可以显示这个数据元素,

但单独从map中取出数据${map1.ccc.ddd.fff}这种格式则无法显示数据元素,所以使用第二种格式${map1[‘ccc.ddd.fff’]}则可以显示数据

2.两种取数据的格式

方式一:map1.eee 方式二:map1[‘eee’]

方式二使用“[]”代替了方式一“.”,又因为是字符串类型所以加上单引号,这样可以避免出错,两种方式看情况选择使用;

3.字符串类型的数据不要以数字开头,比如map.put(“444”,44444)不要使用

3.4. 演示EL获取自定义对象属性值

首先需要在项目中创建一个自定义的对象,这里创建User对象。并且针对User对象中的属性提供相应的get和set方法。

注意:${user1}相当于直接调用自定义类的toString方法,因为自定义类重写了toString方法所以会显示数据

注意:

1.在使用EL表达式取出数组,集合,自定义对象中的数据的时候,能够使用.的地方都可以使用中括号。特别是在map集合或者自定义对象中key值或自定义对的属性名中包含多个字符的时候必须使用中括号搞定。

2.在EL表达式中,获取对象的属性的值的时候,其实不是在看这个对象所在的类是否有这个属性,只要这个对象所在的类中有getXxxxx方法,就可以使用EL表达式获取Xxxx值。

4. EL表达式执行运算

1.使用el进行简单的运算的时候,如果指定的范围中的key不存在,这时就不会去使用这个值计算,但是存在的依然会进行运算

需求1: 将a和b保存到page域中,使用el计算a+b

需求2: 将a和b保存到page域中,使用el计算a+b+c

效果:

2.可以使用empty 验证某个容器或者变量是否为null

格式: ${ empty  集合或变量等}

如果集合元素的个数为0 或者集合不存在,或者 变量为null则返回true;否则返回false.

常用方式:

el中三元运算符: ${empty对象?表达式1 :表达式2 }

${not empty 对象?表达式1 :表达式2 }

需求1: 使用el表达式 判断集合是否为空

需求2: 使用el表达式 判断用户是否存在

注意:集合为空或者集合不存在,都是null的意思

5. EL的内置对象

EL表达式它也有自己的内置对象可以直接在EL表达式中使用:

注意:如果jsp中既有html代码也有java代码,会很麻烦,所以我们用EL表达式和JSTL标签代替java代码,

但是EL表达式和JSTL标签的底层调用的还是java代码,所以在jsp中注释时不可以使用html注释和java注释,而是使用jsp的注释;

5.1. 从不同的域中取值的四个内置对象

${XXXScope.key}

pageScope

requestScope

sessionScope

applicationScope

准备工作:

pageContext.setAttribute("address", "北京1"); // page

pageContext.setAttribute("address", "北京2", PageContext.REQUEST_SCOPE); // request

pageContext.setAttribute("address", "北京3", PageContext.SESSION_SCOPE); // session

pageContext.setAttribute("address", "北京4", PageContext.APPLICATION_SCOPE); // application(ServletContext)

%>

//pageContext.setAttribute("address", "北京1");//默认page域

//pageContext.setAttribute("address", "北京2",PageContext.REQUEST_SCOPE);

//pageContext.setAttribute("address", "北京3",PageContext.SESSION_SCOPE);

//pageContext.setAttribute("address", "北京4",PageContext.APPLICATION_SCOPE);

%>


${pageScope.address }

${requestScope.address }

${sessionScope.address }

${applicationScope.address }


java获取的简化方式:

el获取的简化方式: ${address}

演示注意:

1.page和request域从浏览器访问时重写输入地址既可以显示效果,session域需要重启浏览器,application域需要重启服务器才会显示效果;

2.使用Java代码的方式如果获取不到数据输出null,EL表达式的方式则什么都不会显示;

5.2. 专门获取浏览器请求服务器时携带参数的2个内置对象:

param         获取用户提交的某个数据,针对一key一value可以理解成:  request.getParameter(name)

paramValues   获取用户提交的某个数据,针对一key多value可以理解成: request.getParameterValues(name)

param对象的使用

${param.username }

--%>

paramValues对象的使用(多选)

String[] hobbys = request.getParameterValues("hobby");

out.println(hobbys[0]);

out.println(hobbys[1]);

%>


${paramValues.hobby[0]}

${paramValues.hobby[1]}

${paramValues.hobby[2]}

5.3. 专门获取浏览器请求服务器时请求头中数据的2个内置对象:

header      获取请求头中的信息,针对一key一value

headerValues    获取请求头中的信息,针对一key多value

注意:有特殊字符的使用EL表达式时不可以使用“.”的方式,而要使用“[‘ str ’]”的方式;

5.4. cookie它获取到的一个cookie数组

cookie

获取cookie对象: ${cookie.cookie的名称},如${cookie.username}

获取cookie对象的名称: ${cookie.cookie的名称.name}如: ${cookie.username.name}

获取cookie对象的值: ${cookie.cookie的名称.value}如: ${cookie.username.value}

需求: 在JSP页面向浏览器发送cookie,在访问时获取cookie中的数据

02.jsp

// 创建cookie

Cookie cookie = new Cookie("username","fengjie");

// 设置有效路径

cookie.setPath("/");

// 设置最大生存时间

cookie.setMaxAge(60 * 30);

// 给浏览器发送cookie

response.addCookie(cookie);

%>

03.jsp

获取cookie的内容

Cookie[] cookies = request.getCookies();

if(cookies!=null){

for(Cookie cookie : cookies){

String name = cookie.getName();

String value = cookie.getValue();

if("username".equals(name)) {

out.println(name +"::::"+ value);

}

}

}

%>


${cookie.username }

${cookie.username.name }

${cookie.username.value }

注意:

${cookie.username } 获取的是Cookie("username","fengjie")对象;显示出来为对象的地址值;

${cookie.username.name }  获取的是Cookie("username","fengjie")对象的neme值username;

${cookie.username.value }  获取的是Cookie("username","fengjie")对象的value值fengjie;

5.5. 其他对象

pageContext   它就和JSP内置对象pageContext功能一致(重点)

initParam        获取的项目的全局配置参数,类似于ServletContext中的getInitParameter(String name)方法功能(它只能获取到web.xml配置的全局参数,每个servlet单独配置的无法使用initParam获取)。

pageContext对象的使用

03页面

03页面

03页面


HttpServletRequest r = (HttpServletRequest)pageContext.getRequest();

out.println(r.getContextPath());

%>


el表达式获取项目名:${pageContext.request.contextPath }

el表达式获取项目名:${request.contextPath }

initParm对象的使用

${initParm.company }

在web.xml文件中配置全局参数

company

注意:

1.jsp中内置九大对象,所以在java代码中可以直接使用这九大对象,但是el表达式虽然也在jsp页面中却不可以使用jsp中的九大对象,

而是使用el表达式中的11个内置对象;

Jsp中九大内置对象: page request   session application(ServletContext) pageContext   response   config    out    exception

EL表达式11大对象:pageScope requestScope   sessionScope applicationScope   param   paramValues   header   headerValues   cookie  pageContext   initParam

5.6. jsp的内置对象和EL的内置对象区分:

jsp页面中的Java代码中可以直接使用的对象称为JSP的内置对象。

EL表达式中11个内置对象,在EL表达式中也可以直接去使用这些对象${ EL的内置对象.key值或者其他的信息 }

注意:EL表达式的作用就是从四大域中取数据,前提是先有数据向域中存放;

jsp java el_jsp之EL表达式相关推荐

  1. java 代码执行el,专属于java的漏洞——EL表达式注入

    前言"FSRC经验分享"系列文章,旨在分享焦点科技信息安全部工作过程中的经验总结,包括但不限于漏洞分析.运营技巧.sdl推行.等保合规.自研工具等等. 欢迎各位安全从业者持续关注~ ...

  2. 案例:对比使用Java代码与EL表达式获取信息

    一.创建MyServlet public class MyServlet extends HttpServlet {public void doGet(HttpServletRequest reque ...

  3. java调用el_[Java教程][javaEE] EL表达式调用java方法

    [Java教程][javaEE] EL表达式调用java方法 0 2016-07-03 18:00:03 1.新建个类,类里面定义静态方法 package com.tsh.utils;import j ...

  4. JSP复习(二):EL表达式

    2019独角兽企业重金招聘Python工程师标准>>> EL表达式:从JSP2.0开始成为规范,是的原来用scriptlet和表达式完成的事情,EL都能完成 1.配置相关 ${app ...

  5. java学习笔记—EL表达式(38)

    EL表达式 EL即Expression Language,主要的任务是帮助开发者简化获取域属性. 但是一般情况下需要使用EL和JSTL结合使用. 语法: ${ // 隐含对象|直接写域中的属性 }  ...

  6. jsp脚本、jsp标准动作、EL表达式、JSTL标签

    https://blog.csdn.net/gx_hxl/article/details/79032331 https://blog.csdn.net/a731604348/article/detai ...

  7. 如何才能在jsp文件中使用el表达式

    jsp引入el表达式 1.需要的jar包 jstl.jar standard.jar 2.创建一个jsp文件如下 <%@ page language="java" conte ...

  8. jsp中无法识别EL表达式问题

    今天在开发系统时需要在JSP中遍历List<javabean>,其中用到了EL表达式:${item.value} 页面死活不出数据,只显示表达式本身:${item.value}. 页面代码 ...

  9. jsp学习(十一,el表达式)

    在学习JSP时看到了${}写法,当时以为就等于<%=%>,其实非常错误 目录 EL表达式介绍 JSP,EL对照表 EL访问Bean的属性 EL表达式介绍 Expression Langua ...

最新文章

  1. gulp将多张小图自动合成雪碧图
  2. 亚马逊AWS在线系列讲座——基于AWS云平台的高可用应用设计
  3. php考过来运行后报乱码,PHP接收GET中文参数乱码怎么办
  4. eclipse 矩阵删除行列,也可以矩阵形式编辑
  5. 电源管理与驱动设计笔记
  6. 服务器迁移中心 SMC 最佳实践及新特性介绍
  7. ionic创建应用的三个模版
  8. Excel怎么求和?5大常用的Excel求和公式
  9. Python 实验二 tkinter 版小学数学口算题生成器设计与实现
  10. 关于计算机的英语作文初中,computer初中英语作文范文
  11. 在 LaTeX 中插入图片
  12. 【Trailhead题目解析】Prepare your salesforce org for users - 1Set Up the Exchange Rate
  13. WIN7中修改Jar文件打开方式的方法
  14. PLG SaaS 产品 Figma 商业模式拆解
  15. 前端加密 后端Java解密
  16. 推荐一个免费服务器网站|亲测可用
  17. 推箱子游戏 java源代码_java推箱子游戏源代码(含推箱子的判断)
  18. [ZZ]变速齿轮作者的文章--绝杀反外挂方案
  19. 期货中的正向交易与反向交易
  20. 全新H3C品牌服务器与存储产品亮相 引领中国IT协同创新之路

热门文章

  1. linux c语言显示器api,API级别的Unicode GUI用于Windows / Linux / Mac的C语言本机应用程序...
  2. 天线决定接受频率_对讲机天线到底有多重要?通讯效果好不好要靠它!
  3. php flock 死锁了,php – 防止由flock引起的死锁
  4. java初反射_初始 java 反射机制 (一)
  5. linux+分配挂载点权限,Linux系统管理(一)——初学者建议
  6. php simplexml 遍历,php下使用SimpleXML 处理XML 文件
  7. 基于Matlab血管切片的三维重建(资源整合)
  8. Vs code如何快速生成Verilog例化模板
  9. FPGA之道(12)FPGA芯片的配置方式
  10. 【 FPGA 】虚拟时钟