一、什么是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