第四章_EL

简介:

4.1EL语法

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

${expression}

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

${x+y}

两个表达式相连接,这种也很常见,表达式的运算顺序是从左到右。如果a+b等于8c+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.3EL隐式对象

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对象的MapCookie的名称就是Map的键,每一个键都映射到一个Cookie对象。

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

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


4.3.1pageContext

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

Jsp隐式对象:requestresponseoutsessionapplicationconfigpageContextpageexception

我们可以用下面任意一个表达式获得当前的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.2initParam

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

${initParam.password}

或者${initParam[“password”]}

 

4.3.3param

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

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

 

4.3.4paramValues

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

${paramValues.selectedOption[0]}

 

4.3.5header

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

${header[“accept-language”]}

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

${header.connection}

 

4.3.6headerValues

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

 

4.3.7cookie

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

${cookie.jessionid.value}

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

${cookie.jessionid.path}

 

4.3.8applicationScopesessionScoperequestScopepageScope

注意:在Servlet/Jsp编程中,有作用范围的对象是指放在以下这些对象中作为属性的对象:PageContextServletRequestHttpSession或者ServletContext。隐式对象pageScoperequestScopesessionScopeapplicationScope相似。但是其范围分别是pagerequestsession

有作用范围的对象也可以用一个没有指定范围的EL表达式进行反问。在这种情况下JSP容器将会返回在PageContextServletRequestHttpSession或者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.5empty运算符

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

${empty x}

如果Xnull,或者如果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、小结

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

目录
相关文章
|
5月前
一文搞懂:关于VueElement组件el
一文搞懂:关于VueElement组件el
28 0
|
11月前
【Vue2.0学习】—el与data的两种写法(三十六)
【Vue2.0学习】—el与data的两种写法(三十六)
|
SQL 安全 前端开发
layui框架实战案例(19):layui-table模块表格综合应用
layui框架实战案例(19):layui-table模块表格综合应用(筛选查询、导入导出、群发短信、一键审核、照片展示、隐私加密)
456 0
layui框架实战案例(19):layui-table模块表格综合应用
|
Kubernetes Shell 调度
【k8s 系列】k8s 学习十六,Label 2
在 k8s 中,我们会轻轻松松的部署几十上百个微服务,这些微服务的版本,副本数的不同进而会带出更多的 pod
176 0
|
前端开发
前端学习笔记202304学习笔记第十六天-vue3.0-实现input和button
前端学习笔记202304学习笔记第十六天-vue3.0-实现input和button
76 0
|
前端开发 JavaScript
elementui源码学习之仿写一个el-link
elementui源码学习之仿写一个el-link
172 0
让el-form更好用,通过配置的方式
让el-form更好用,通过配置的方式
430 0
让el-table更好用,通过配置的方式
让el-table更好用,通过配置的方式
439 0