EL表达式语法、作用域对象和内置对象简介

本文详细介绍了EL表达式在JavaWeb开发中的概念、语法、作用域对象、运算表达式以及内置对象的使用,包括如何访问共享数据、进行算术运算和处理请求参数。EL表达式简化了页面开发过程,但也存在潜在性能风险。
摘要由CSDN通过智能技术生成

一、什么是EL表达式

EL表达式,全称为Expression Language,意为表达式语言。它是Servlet规范中的一部分,也是JSP2.0规范加入的内容。EL表达式的主要作用是用于在Java Web应用中访问和操作数据,使得JSP页面能够摆脱Java代码块和JSP表达式,实现代码的简化。

EL表达式的语法格式使用${}包裹,其中${}内部可以是一个表达式或者变量名。其主要用于在页面中获取和展示数据,执行算术运算,访问JavaBean属性,以及调用JavaBean方法等。此外,EL表达式定义了一些隐式对象,使得web开发人员可以轻松地获取对web常用对象的引用,并获取这些对象中的数据。

EL表达式为Java Web开发提供了一种更为简洁、高效的方式来处理数据和逻辑,使得开发过程更加便捷。

1、命令格式:${作用域对象别名.共享数据}

  • EL表达式是式工具包提供一种特殊命令格式表达式命令格式
  • EL表达式在JSP文件上使用。
  • 负责在JSP文件上从作用域对象读取指定的共享数据并输出到响应体。

二、EL表达式与作用域对象

1、JSP文件可以使用的作用域对象

  • ServletContext application:全局作用域对象;
  • HttpSession session:会话作用域对象;
  • HttpServletRequest request:请求作用域对象;
  • PageContext pageContext:当前页作用域对象;

这是JSP文件独有作用域对象。Servlet中不存在在当前页作用域对象存放的共享数据。仅能在当前JSP文件中使用,不能共享给其他servlet或则其他JSP文件。

真实开发过程,主要用于JSTL标签与JSP文件之间数据共享数据。

JSTL ------> pageContext ----> JSP

2、EL表达式提供作用域对象别名

  • JSP------------------------------EL表达式
  • application---------------------${applicationscope.共享数据名}
  • session-------------------------${sessionscope.共享数据名}
  • request-------------------------${requestscope.共享数据名}
  • pageContext------------------${pagescope.共享数据名}

3、EL表达式将引用对象属性写入到响应体

  • 命令格式:${作用域对象别名.共享数据名.属性名}
  • 命令作用:从作用域对象读取指定共享数据关联的引用对象的属性值,并自动将属性的结果写入到响应体。
  • 属性名:一定要去引用类型属性名完全一致(大小写)。
  • EL表达式没有提供遍历集合方法,因此无法从作用域对象读取集合内容输出。

4、EL表达式简化版

1、命令格式:${共享数据名}

2、命令作用:EL表达式允许开发人员开发时省略作用域对象别名

3、工作原理:

  • EL表达式简化版由于没有指定作用域对象,所以在执行时采用算法。
  • 首先到pageContext定位共享数据,如果存在直接读取输出并结束执行。
  • 如果在pageContext没有定位成功,到request定位共享数据,如果存在直接读取输出并结束执行。
  • 如果在request没有定位成功,到session定位共享数据,如果存在直接读取输出并结束执行。
  • 如果在session没有定位成功,到application定位共享数据,如果存在直接读取输出并结束执行。
  • 如果在application没有定位成功,返回null

pageContext—>request—>session—>applicationl

4、存在隐患: 容易降低程序执行速度,容易导致数据定位错误。

5、设计目的,就是简化从pageContext读取共享数据并输出难度。

6、EL表达式简化版尽管存在很多隐患,但是在实际开发过程中,开发人员为了节省时间,一般都使用简化版,拒绝使用标准版。

三、EL表达式与运算表达式

1、前提:在JSP文件有时需要将读取共享数据进行一番运算之后,将运算结果写入到响应体;

2、运算表达式:

  • 数学运算。
  • 关系运算:> >= == < <= !=
  • gt ge eq lt le !=
  • 逻辑运算:&& ll !

四、EL表达式提供内置对象

EL表达式提供了一系列内置对象,这些对象在无需创建的情况下即可直接使用,它们与Map相似。

  • pageScope:这是一个Map<String,Object>类型的对象。通过${pageScope.xxx},可以获取在pageContext中保存的数据。与pageContext.getAttribute(“xxx”)功能相同,但在数据不存在时,前者返回空字符串,而后者返回null。
  • header:此对象用于获取请求头中的值。例如,使用${header['User-Agent']}可以获取User-Agent请求头的值。
  • initParam:这个对象可以获得在web.xml中配置的<context-param>中的值。例如,如果在web.xml中配置了一个名为name的context-param,其值为tom,那么通过${initParam.name}就可以得到tom。
  • cookie:这个对象用于获取cookie的值。例如,通过${cookie.JSESSIONID.value}可以获取名为JSESSIONID的cookie的值。同时,也可以通过${cookie.username.maxAge}获取cookie的生存时间。、
  • fn:fn对象提供了一些常用的函数,可以方便地进行字符串处理、类型转换、日期处理等。
  • pageContext:在EL表达式中,pageContext与JSP内置对象中的pageContext是同一个对象。通过这个对象,可以获取到request、response、session、servletContext、servletConfig等对象。在EL中,这些对象不是内置对象,但可以通过pageContext获取。例如,${pageContext.request}可以获取request对象。

除了上述对象外,还有requestScope、sessionScope和applicationScope等对象,它们分别对应不同的域(scope),可以用来获取不同域中的属性值。

EL表达式的内置对象提供了丰富的功能,使得在JSP页面中可以方便地访问和操作各种数据。

1、命令格式:${param.请求参数名}

从通过请求对象读取当前请求包中请求参数内容,并将请求参数内容写入到响应体。

代替命令:index.jsp

发送请求:Http://localhost:8080/myweb/index.jsp?userName=mike&password=123

<%

string userName = request.getParameter ( "userName" ) ;

string password =request.getParameter ( "password");

%>

<%=userName%>

<%=password%>

2、命令格式:${paramvalue.请求参数名[下标]}

如果浏览器发送的请求参数是一个请求参数关联多个值,此时可以通过paramvaues读取请求参数下指定位置的值并写入到响应体。

代替命令:http://localhost:8080/myweb/index2.jsp?pageNo=1&pageNo=2&pagNo=3,此时pageNo请求参数在请求包以数组形式存在,pageNo: [1,2,3]

<%

string  array[] = request.getParametervalues ( "pageNo");

%>

第一个值:<%=array [0]%>

第二个值:<%=array [1]%>

  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值