EL表达式的隐式对象
- 格式:pdf
- 大小:876.19 KB
- 文档页数:7
el表达式写法
El表达式是一种用于模板引擎和视图中的动态表达式语言,用于在模板中嵌入动态数据。
以下是一些常见的El表达式的写法:
1. 访问属性:
- `${}`:访问对象`user`的`name`属性。
- `${user.address.city}`:访问嵌套属性。
2. 访问列表和映射:
- `${list[0]}`:访问列表`list`的第一个元素。
- `${map['key']}`:访问映射`map`中键为`key`的值。
3. 调用方法:
- `${user.getName()}`:调用对象`user`的`getName()`方法。
- `${utils.format(date)}`:调用静态方法`utils.format()`。
4. 条件判断:
- `${user.age > 18 ? '成年人' : '未成年人'}`:根据条件返回不同的值。
5. 迭代列表:
- `<c:forEach items="${users}" var="user">`:迭代列表`users`中的每个元素,用变量`user`引用每个元素。
6. 计算表达式:
- `${5 + 3}`:计算表达式的结果。
7. EL隐式对象:
- `${pageContext.request.contextPath}`:访问EL隐式对象中的属性,如访问请求的上下文路径。
这些只是El表达式的一小部分写法,实际使用中还有更多的写法和用法,可以根据需要进一步学习和掌握。
EL表达式语法:${ EL expression}其中:$表示EL表达式的开始。
EL expression指定表达式。
一、JSP EL表达式可用于如下几种方式。
1 静态文本:包含EL表达式,其值在运行时计算出来。
如: ${8+5}2 标准标签和自定义标签属性:帮助显示网页上的动态内容。
JSP提供一些标准标签,<jsp:useBean>、<jsp:include>等。
自定义标签是由用户使用taglib指令编写的。
EL表达式可以作为一个值传递给上述标签的属性。
表达式在运行时计算,结果值将作为属性值进行传递。
如:<%pageContext.setAttribute("color","#ffccff");%><body bgcolor="${pageScope.color}">7+8=${7+8}</body>3 JavaBean与EL表达式:使用EL表达式可以简洁地读出JavaBean的属性值。
传统的JSP通常使用如下方法访问JavaBean:<jsp:getProperty na me=”myBean” property=”name”/><%=myBean.getName()%>EL表达式则简化为:${}二、启用/禁用EL表达式<%@ page isELIgnored=”true|false” %>为true时,支持EL表达式计算。
为false时,不支持EL表达式计算。
三、变量JSP表达式${product}的计算结果与调用pageContext.findAttribute(“product”)一样,EL表达式中的变量可以引用存储在标准范围(如:page request session application)中的属性。
点运算符(.)和”[]”用于获取变量的值。
el语句基本⽤法EL(Expression Language)⼀、EL操作符语法:${EL表达式}11. “.”操作符⽤来访问对象的某个属性,如${}。
2. “[ ]”操作符也可⽤来访问对象的某个属性,如${user[‘name’]}。
“[ ]”操作符其他功能:(1)当属性名中包含特殊字符如“.”或“-”等的情况下,就不能使⽤“.”操作符来访问,这时只能使⽤“[ ]”操作符。
(2)根据索引值访问数组中的元素使⽤“[ ]”操作符,如${arr[1]}。
(3)使⽤变量实现动态访问,如${user[x]},x是⼀个变量,改变x即可。
1.1、算术操作符这⾥只测试了“+”操作符,“-”、“*”、“/”或div、“%”或mod请⾃⾏测试。
<!-- “+”操作符 -->${a1+a2+a3 }<br><!-- 输出:60 -->${1+1 }<br><!-- 输出:2 -->${'1'+1.1 }<br><!-- 输出:2.1 -->${"1"+1 }<br><!-- 输出:2 -->${bbbbbsdcksnvjnds+1 }<br><!-- 输出:1 -->\${"bbbbbsdcksnvjnds"+1 }<!-- 报异常 -->1.2、关系操作符1.3、逻辑操作符1.4、empty操作符<!-- empty操作符 -->${empty s }<br><!-- 输出:true -->${!empty s }<br><!-- 输出:false -->${not empty s }<br><!-- 输出:false -->${!not empty s }<br><!-- 输出:true -->总结:若变量 s为null,或长度为零的String,或size为零的集合,则${ empty s }返回的结果为true,${ not empty s }或${ ! empty s }返回的结果为false。
EL表达式与JSTL标签库(⼀)1、JSTL概述JSTL标签库由标签库和EL表达式两个部分组成。
JSTL标准标签库(Java Server Page Standard Tag Library),⽤来解决创建的页⾯的操作问题,包括输⼊输出、条件测试、遍历集合。
2、EL表达式语法EL表达式的主要作⽤:获取数据。
EL表达式主要⽤于替换JSP页⾯中的脚本表达式,从Web作⽤域中获取Java对象,获取数据,包括访问Javabean的属性、List集合、Map集合、数组等。
执⾏运算:利⽤EL表达式可以在JSP页⾯中执⾏⼀些基本的关系运算、逻辑运算和算术运算,以在JSP页⾯完成⼀些简单的逻辑操作。
获取Web开发常⽤对象。
利⽤EL表达式的隐式对象,可以轻松获得Web常⽤对象的引⽤,从⽽获取这些对象中的数据。
EL表达式的格式: ${expression },使⽤${⽂本时需要变为\${[]和.运算符 EL表达式可以返回任意类型的值。
EL取值结果为⼀个带有属性的对象时,使⽤[]或.来访问其属性,实质是通过getter⽅法来访问其属性。
访问形式如下:${object["propertyName"]}${object.propertyName} propertyName不是有效的java变量名时,只能使⽤[]⽅式访问。
如${header["accept-language"]}。
如果访问对象的属性也是⼀个对象,并且也带有属性,此时既可以使⽤[],也可以使⽤.运算符来访问第⼆个对象的属性。
${pageContext.request.contextPath }3、EL表达式的隐式对象 EL表达式中,存在11个隐式对象。
隐式对象描述例⼦pageContext JSP上下⽂对象。
它可访问JSP隐式对象。
${pageContext.request.contextPath }param⼀个包含所有请求参数的Map。
EL表达式(Expression Language)是一种在JSP页面中用于获取数据、执行运算、调用Java方法的表达式。
它简化了获取数据的操作,使得在JSP页面中获取数据更加方便。
EL表达式的语法格式为:${标识符},其中“标识符”可以是任何有效的Java变量名或方法名。
EL表达式的作用是从Servlet中获取数据,并将数据插入到JSP页面中。
当JSP 页面被请求时,Servlet将处理所有EL表达式并返回结果,然后将结果插入到JSP页面中。
EL表达式有11个隐式对象,可以在表达式中使用这些对象来获取数据。
例如,request 对象可以用于获取请求参数,session对象可以用于获取会话属性等。
除了获取数据之外,EL表达式还可以执行算术运算、逻辑运算和字符串操作等。
例如,${1+2}将返回3,${true||false}将返回true,${"hello"}将返回字符串“hello”。
最后,EL表达式还可以调用Java方法。
例如,${fn:length("hello")}将调用Java中的length()方法来计算字符串“hello”的长度,并返回5。
总之,EL表达式使得在JSP页面中获取数据更加简单、方便和直观。
1.1 EL表达式:EL表达式规定为:eval-expression和literal-expression,同时E L表达式支持Compositeexpressions,很多EL表达式(eval-ex pressions和literal-expressions)被聚合在一起。
EL表达式被解析成数值表达式和方法表达式。
其中,取值表达式去引用一个值,而方法表达式则是关联一个方法。
一旦被解析之后,表达式能够被优化地计算一次或多次。
下面我们来分为:eval-expression、literal-expression、Compo siteexpressions来讲述1.1.1Eval-expressionEval-expression是以使用${expr}或者#{expr}结构的形式构成。
两种方式都是相同的方式,能很好被解析和计算,尽管它们在使用时有着不同的意义从技术方面来说。
从J2EE层规范协定来说,${expr}结构是直接计算而#{expr}结构则是延期计算,这种界定符号指出了在J2EE层两种表达式类型的语义上面的区别。
#{expr}这种界定符号被称为延迟计算是因为直到系统需要的时候才计算。
而${expr}这种界定符号则是在JSP页面编译的时候就计算,就是为什么叫做直接计算的原因。
1.1.1.1作为取值表达式的计算表达式当解析成一个取值表达式的时候,eval-expression能被计算成左值和右值。
若在EL中有等号操作符号出现,右值是类型出现在等号的右边的表达式,左值同理。
右值比如:<input type="text"value="${}"/><h:form>以下面这个例子为例:<h:inputTextid="email"value="#{checkOutFormBean.email}"size="25"maxlength="125"validator="#{checkOutFormBean.validateEmail}"/></h:form>当表单被提交的时候,在申请计算的阶段,Faces计算EL表达式#{checkOutFormBean.validateEmail}作为一个数据接口的引用,这个数据结构的数值是被一个表单相关联的输入参数设置。
EL表达式的隐式对象
在使用EL时,其实EL是先看标识符是否是其隐式对象之一,如果不是,才从四个域(page、request、session、application)中顺序搜索(使用pageContext.findAttribute方法)。
EL总共有如下隐式对象:
而这里,EL和JSP一样拥有pageContext对象,通过在EL中使用pageContext对象,能获取JSP中其它几个隐式对象,然后再获得这些对象中的属性。
例如获取当前web工程的名称的经典EL表达式:
${ pageContext.request.contextPath },就是由pageContext先获取request对象(因为在JSP的API中,我们可以看到pageContext有getRequest方法),获取到request对象后,因为request中含有getContextPath方法,因此我们还可以获得request对象中contextPath属性的值。
pageScope、requestScope、sessionScope、applicationScope这四个EL隐式对象分别代表了各自域中的Map对象(每个域以关键字来保存数据或对象,肯定是使用Map集合),这Map对象保存了存在这些域中的键值对。
通过EL表达式和这些隐式对象,我们可以直接从指定的域中获取存储的数据。
例1:
1<%
2User u = new User();
3u.setUsername("fjdingsd");
4session.setAttribute("user", u);
5%>
6
7欢迎您:${ername}
在浏览器中观察:
对于用户登录这样的案例来说,我们检查用户是否登录肯定只需要从session域中查询,这样使用EL表达式的sessionScope隐式对象就足够了。
param隐式对象:表示所有请求参数的Map集合对象。
例如表单提交,那么在请求参数中的数据就以键值对存储在param对象所代表的Map集合中,下面的例子我以get方式来替代post方式来模拟表单请求参数:
例2:
${ername}
在地址栏上添加URL参数,可以看到:
使用param隐式对象同样也能作为数据回显功能,在以前JSP页面提交的表单如果想做出数据回显功能,必须创建一个form的bean对象,当表单校验失败时,重新将这个bean对象通过转发(forward)传回JSP页面再取出。
而使用param 对象,不需要新建form的bean对象,只需要在表单校验失败时转发回表单所在的JSP页面,通过param对象就可以从请求中取出之前的表单数据。
例3:表单验证失败的数据回显demo
在JSP页面beantag.jsp中:
1<form action="${pageContext.request.contextPath}/servlet/FormHandler" method="post">
2用户名<input type="text" name="username" value="${ername}"/>
3<input type="submit" value="提交">
4</form>
在处理表单的Servlet中:
1//省略表单验证过程,验证失败重新转发到表单页面
2request.getRequestDispatcher("/beantag.jsp").forward(request, response);
刚进入表单注册页面:
假设表单验证失败,则转发请求到表单注册页面,并回显数据:
paramValues隐式对象:也是表示一个保存所有的请求参数的Map集合对象,但是paramValues对象和param对
象的区别是,对任何一个参数,paramValues都是以字符串数组(String[])作为保存数据的类型,因此paramValues对象适合在有同名参数的情况下使用。
例4:
${[0]}
浏览器中观察:
例5:
${[1]}
浏览器中观察:
header隐式对象:表示一个保存了该JSP页面发出请求的请求头字段的Map集合对象。
注意:这个对象只能获取请求头字段的信息,不能获取响应头字段的信息。
另外如果头字段中含有小横线的”-”,例如”Accept-Encoding”,则要使用中括号加引号的EL取数据形式,例如${ header[‘accept-encoding’] }。
例6:
${header.connection}
在浏览器中观察:
例7:
${header['accept-encoding']}
在浏览器中观察:
headerValues隐式对象功能类似于header隐式对象,但以字符串数组封装每个保存的请求头字段信息,这点跟paramValues隐式对象是一样的。
cookie隐式对象:表示一个保存了该请求中所有的Cookie的Map集合对象。
假设在请求中有一个cookie,cookie的键值对为:
JSESSIONID=E9546AE9C86FB722BDBD7AF947157379
例8:
${cookie.JSESSIONID}
在浏览器中观察:
可以看到,cookie隐式对象的名称(cookie)是Map集合的名称,而在这个Map集合中,有一个键值对的key命名为
JSESSIONID,而通过${cookie.JSESSIONID}获取到的是一个Cookie对象,那么我们如何获取该Cookie的值呢?
之前说过EL表达式都是通过对象的具有的属性来获取属性值,能被称为属性的都有getXXX方法,而Cookie正是具有getName()方法和getValue()方法,因此在EL表达式中获取了Cookie对象后可以再获取这两个属性:
例9:
1${} <br>
2${cookie.JSESSIONID.value} <br>
在浏览器中观察:
initParam隐式对象:表示一个保存了所有web应用初始化参数(context-param)的Map集合对象。
<context-param>标签用于配置全局性的web参数,在Servlet中可以使用ServletContext.getInitParameter方法获取指定参数的值。
而在JSP页面中,我们可以同EL表达式的initParam方法来获取为web应用配置的全局性参数。
例10:
在web.xml文件中配置:
1<context-param>
2<param-name>username</param-name>
3<param-value>fjdingsd</param-value>
4</context-param>
在JSP页面中:
${ername }
在浏览器中观察:
本文作者:fjdingsd。