第四章_EL

4.1、EL语法

EL表达式是以${开头,以}结束。一个EL表达式构造如下:

${expression}

例如,编写表达式x+y时,要使用以下结构:

${x+y}

两个表达式相连接,这种也很常见,表达式的运算顺序是从左到右。如果a+b等于8,c+d等于10,下面这两个表达式的结果将是810:

${a+b}${c+d}

字符${表示某一个EL表达式开始了。如果你想要发送字符${,则必须转换掉第一个字符,如:\${。

 

4.1.1、保留字

下面是一些保留字,不能用作标识符:

and eq gt true instanceof or ne le false empty not It ge null div mod

 

4.1.2、[]和.运算符

要访问某个对象的属性,可以使用以下任意一种形式:

${object[“propertyName”]}

${object.propertyName}

但是,如果propertyName不是有效的Java变量名称,则只能使用[]运算符。例如,下面这两个EL表达式可以用来访问隐式对象标头中的HTTP标头host:

${header[“host”]}

${header.host}

但是,要访问accept-language标头,则只能使用[]运算符,因为accept-language不是一个合法的java变量名称。如果用.运算符来访问它,将会导致抛出一个异常。

如果一个对象的属性碰巧返回另一个带有属性的对象,那么就可以利用[]或者.来访问第二个对象的属性。下面的这些表达式都是相等的。

${pageContext[“request”][“servletPath”]}

${pageContext.request[“servletPath”]}

${pageContext.request.servletPath}

${pageContext[“request”].servletPath}

要访问HttpSession,可使用下面这个语法:

${pageContext.session}

下面的这个表达式输出session标识符:

${pageContext.session.id}

 

4.1.3、运算规则

EL表达式的运算顺序是从左到右。

 

4.2、访问JavaBean

我们可以利用.或[]运算符来访问一个Bean的属性,其构造如下:

${beanName[“propertyName”]}

${beanName.propertyName}

例如,要访问myBean中的secret属性,要使用下面这个表达式:

${myBean.secret}

 

4.3、EL隐式对象

1、pageContext:当前jsp页面的javax.servlet.jsp.PageContext

2、initParam:包含所有context初始化参数并以参数名称做为键的map

3、Param:包含所有请求参数并以参数名称做为键的Map。每个键的值就是指定名称的第一个参数值。因此,如果有两个同名的请求参数,将只有第一个参数可以利用param对象获取到,要想获取所有同名参数的值,则要使用params对象。

4、paramValues:包含所有请求参数并以参数名称做为键的Map。每个键的值就是包含所有指定名称值的一个字符串数组。如果该参数只有一个值,它仍然会返回一个只有一个元素的数组。

5、Header:包含所有请求标头并以标头名称做为键的Map。每个键的值就是指定标头名称的第一个标头。换句话说,如果某个标头具有多个值,将只返回第一个值。要想获得多值标头,则要使用headerValues对象。

6、headerValues:包含所有请求标头并以标头名称做为键的Map。每个键的值就是包含指定标头名称所有值的一个字符串数组。如果标头只有一个值,将返回只有一个元素的数组。

7、Cookie:包含当前请求对象中的所有Cookie对象的Map。Cookie的名称就是Map的键,每一个键都映射到一个Cookie对象。

8、applicationScope:包含servletContext对象中所有属性并以属性名称作为键的Map。

9、sessionScope:包含HttpSession对象中所有属性并以属性名称作为键的Map

4.3.1、pageContext

pageContext对象表示当前jsp页面的javax.servlet.jsp.PageContext。它包含所有其他的jsp隐式对象。

Jsp隐式对象:request、response、out、session、application、config、pageContext、page、exception。

我们可以用下面任意一个表达式获得当前的ServletRequest:

${pageContext.request}

${pageContext[“request”]}

请求方法则可以利用以下任意一个表达式获得:

${pageContext[“request”][“method”]}

${pageContext[“request”].method}

${pageContext.request[“method”]}

${pageContext.request.method}

 

注:${param.name}等价于request.getParameter(“name”),这两种方法一般用于服务器从页面或客户端获取的内容。

${requestScope.name}等价于request.getAttribute(“name”),一般是从服务器传送结果到页面,在页面中取出服务器保存的值。

4.3.2、initParam

隐式对象initParam用于获取一个context参数值。例如,要想获得context参数password,需使用下面的表达式:

${initParam.password}

或者${initParam[“password”]}

 

4.3.3、param

隐式对象param用于获取一个请求参数。这个对象表示一个包含所有请求参数的Map。例如,为了获取参数userName,需使用下面任意一个表达式:

${param.userName}、${param[“userName”]}

 

4.3.4、paramValues

利用隐式对象paramValues可以获取一个请求参数的多个值。可以使用如下表达式:

${paramValues.selectedOption[0]}

 

4.3.5、header

隐式对象header表示一个包含所有请求标头的Map。要获取一个标头值,需用该标头名称做为键。例如,要获取accept-language标头的值,需用下面的表达式:

${header[“accept-language”]}

如果该标头名称是一个有效的java变量名,如connection,那么也可以使用.运算符:

${header.connection}

 

4.3.6、headerValues

${headerValues[“accept-language”][0]}

 

4.3.7、cookie

利用隐式对象cookie可以获取一个cookie。这个对象表示包含当前HttpServletRequest中所有cookie的Map。例如要获取一个名为jessionid的cookie值,需使用下面这个表达式:

${cookie.jessionid.value}

要获取jessionid cookie的路径值,则使用这个表达式:

${cookie.jessionid.path}

 

4.3.8、applicationScope、sessionScope、requestScope及pageScope

注意:在Servlet/Jsp编程中,有作用范围的对象是指放在以下这些对象中作为属性的对象:PageContext、ServletRequest、HttpSession或者ServletContext。隐式对象pageScope、requestScope、sessionScope与applicationScope相似。但是其范围分别是page、request及session。

有作用范围的对象也可以用一个没有指定范围的EL表达式进行反问。在这种情况下JSP容器将会返回在PageContext、ServletRequest、HttpSession或者ServletContext中第一次识别到的指定对象。搜索范围从最小范围(PageContext)开始,到最大范围(ServletContext)。例如:下面的表达式将返回任意范围的today所引用的对象:

${today}

 

4.4、使用其他EL运算符

4.4.1、算数运算符

算数运算符有5个:+、-、*、/、%

 

4.4.2、关系运算符

下面是关系运算符列表:

等于(==和eq)

不等于(!=和ne)

大于(>和gt)

大于或等于(>=和gt)

小于(<和lt)

小于或等于(<=和le)

 

4.4.3、逻辑运算符

And(&&和and)

Or(||和or)

Not(!和not)

 

4.4.4、条件运算符

EL条件运算符具有下列语法:

${statement?A:B}

 

4.4.5、empty运算符

Empty运算符用来检验一个是否为null或者为空。

${empty x}

如果X为null,或者如果x是一个长度为0的字符串,那么该表达式将返回true。如果x是一个空的Map、空数组或者空集合,它也是返回true,否则返回false。

 

4.5、在JSP2.0及更高版本中配置EL

4.5.1、实现无脚本的JSP页面

下面示范如何在应用程序中关闭所有JSP页面的脚本:

<jsp-config>

<jsp-property-group>

<url-pattern>*.jsp</url-pattern>

<scripting-invalid>true</scripting-invalid>

</jsp-property-group>

</jsp-config>

 

4.5.2、关闭EL运算

第一、可以将page指令的isELIgnored属性值设为true,如:

<%@ page isELIgnored=”true” %>

第二、在web.xml中配置

<jsp-config>

<jsp-property-group>

<url-pattern>*.jsp</url-pattern>

<el-ignored>true</el-ignored>

</jsp-property-group>

</jsp-config>

 

4.6、小结

EL是JSP2.0及更新版本中最重要的特性之一。它可以帮助你编写出更简短、更高效的JSP页面,以及帮助你编写无脚本的页面。

时间: 2024-09-17 04:56:21

第四章_EL的相关文章

第四章、存储器管理

第四章.存储器管理 物理地址和逻辑地址 物理地址:存储单元的编号,可以直接寻址. 逻辑地址:程序中的地址,是可以改变的,不可直接寻址. 重定位:将逻辑地址空间的逻辑地址变换成内存空间的物理地址的过程. 静态重定位和动态重定位 静态重定位:当用于程序被装入内存时,一次性地实现逻辑地址到物理地址的转换,以后不再转换(一般在装入内存时由软件完成),直到该程序完成退出内存为止. 动态重定位:当用户程序被装入内存时,并不将其逻辑地址转换,而是保留原来的逻辑地址.等程序真正要执行时才将其逻辑地址通过动态计算

《PHP程序设计》 第四章 程序控制

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  第四章 程序控制      本章深入PHP内部,讲述如何使用函数.表达式和语句以实现对程序的控制.      前面的章节初步介绍了怎样操作数据,如果我们将操作数和操作符看作是构筑元件的话,那么它们组合起来即可形成表达式.进一步讲,表达式可以构成语句,语句用于组成函数,而函数则可用来组成程序.      提示:在学习有关编

《.net编程先锋C#》第四章 C#类型(转)

编程 第四章 C#类型 既然你知道了怎样创建一个简单的C#程序,我将会给你介绍C#的类型系统.在这一章中,你学到如何使用不同的值和引用类型,加框和消框机制能为你作些什么.尽管这一章的不侧重于例子,但你可以学到很多重要的信息,关于如何创建现成类型的程序.4.1 值类型 各种值类型总是含有相应该类型的一个值.C#迫使你初始化变量才能使用它们进行计算-变量没有初始化不会出问题,因为当你企图使用它们时,编译器会告诉你. 每当把一个值赋给一个值类型时,该值实际上被拷贝了.相比,对于引用类型,仅是引用被拷贝

&amp;gt;第四章 C#类型(rainbow 翻译)(来自重粒子空间)

<<展现C#>>第四章 C#类型(rainbow 翻译)   出处:http://www.informit.com\matter\ser0000002\chapter4\ch04_04.shtml 正文: 第四章  C#类型     既然你知道了怎样创建一个简单的C#程序,我将会给你介绍C#的类型系统.在这一章中,你学到如何使用不同的值和引用类型,加框和消框机制能为你作些什么.尽管这一章的不侧重于例子,但你可以学到很多重要的信息,关于如何创建现成类型的程序.4.1 值类型     

第十四章 数组[《.net框架程序设计》读书笔记]

.net框架|笔记|程序|设计|数组 第十四章 数组. 内容摘要: 本章讨论了数组的方方面面,对于这种常用类型进行深入研究. 一. 数组简介 三种类型:一维数组.多维数组.交错数组(jagged aray) l 一维数组: Int32[] myIntegers; myIntegers = new Int32[100]; l 多维数组: Int32[,] myIntegers; myIntegers = new Int32[100,100]; l 交错数组:交错数组不受CLS支持 Point[][

3D编程:第四章 Hello,Shaders

第四章 Hello,Shaders 本章,会编写第一个shaders.介绍HLSL语法,FX文件格式,数据结构等等.学完本章,你就具备了深入学习图形编程的基础知识. Your First Shader 使用一种新的编程语言编写第一个程序时都会使用经典的编程例子"Hello,World!",程序输出就是一行文字"Hello,World!".我们遵守这一历史悠久的传统,编写第一个shader程序"Hello,Shaders!",但是这次的输出是一种固

WF从入门到精通(第十四章):基于状态的工作流

学习完本章,你将掌握: 1.理解状态机的概念以及它怎样被模拟到工作流处理中的 2.创建基于状态的工作流 3.运用初始(initial)和终止(terminal)状态条件 4.使用代码进行状态的切换 在第四章"活动和工作流类型介绍"中,我阐述过你使用WF所能创建的工作流类型,在那里我提到过基于状态的工作流.基于状态的工作流模型被认为是有限自动机(finite state machine).基于状态的工作流在工作流需要和外部事件进行许多交互的场合中大出风头.在事件触发并被工作流处理的时候,

《网络零售支付与结算》——第四章网络零售支付结算货币:电子货币

第四章 网络零售支付结算货币:电子货币 电子货币作为当代最新的货币形式,从20世纪70年代产生以来,其应用越来越广泛.电子货币是网络零售业务交易主体各方完成交易所使用的支付货币.没有电子商务,便没有电子货币.同样,没有电子货币就没有电子商务.[1] 第一节 电子货币概述 一.电子货币业务的国内外发展 在国外,电子货币的发展起步于20世纪90年代后期,并一直受到社会公众和官方机构的广泛关注,特别是在将电子货币作为现金的替代品进行小额支付方面.从全球来看,电子货币的使用情况并不一致.根据国际清算银行

Android群英传笔记——第四章:ListView使用技巧

Android群英传笔记--第四章:ListView使用技巧 最近也是比较迷茫,但是有一点点还是要坚持的,就是学习了,最近离职了,今天也是继续温习第四章ListView,也拖了其实也挺久的了,listview可谓是老牌大将了,很多的应用场景都要使用它,他也是我们用得最多的控件之一了,虽然现在出来了一个RecyclerView,但是ListView的地位一时半会儿还是撼动不了的,这就促使我们更加应该去把他掌握了 一.Listview常用优化技巧 我们一步步来把ListView学习好 1.使用Vie