第四章_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页面,以及帮助你编写无脚本的页面。

目录
相关文章
|
编解码 自然语言处理 开发者
复刻Sora有多难?一张图带你读懂Sora的技术路径
OpenAI发布了视频生成模型Sora,最大的Sora模型能够生成一分钟的高保真视频。同时OpenAI称,可扩展的视频生成模型,是构建物理世界通用模拟器的一条可能的路径。
|
12月前
|
负载均衡 算法 搜索推荐
Nginx 常用的负载均衡算法
【10月更文挑战第17天】在实际应用中,我们需要根据具体的情况来选择合适的负载均衡算法。同时,还可以结合其他的优化措施,如服务器健康检查、动态调整权重等,来进一步提高负载均衡的效果和系统的稳定性。
307 59
|
9月前
|
存储 监控 安全
网络设备日志记录
网络设备日志记录是追踪设备事件(如错误、警告、信息活动)的过程,帮助IT管理员进行故障排除和违规后分析。日志详细记录用户活动,涵盖登录、帐户创建及数据访问等。为优化日志记录,需启用日志功能、管理记录内容、区分常规与异常活动,并使用专用工具进行事件关联和分析。集中式日志记录解决方案可收集并统一管理来自多种设备和应用的日志,提供简化搜索、安全存储、主动监控和更好的事件可见性,增强网络安全。常用工具如EventLog Analyzer能灵活收集、存储和分析日志,确保高效管理。
506 5
|
10月前
|
机器学习/深度学习 算法框架/工具 网络架构
深度学习中的正则化技术及其对模型性能的影响
本文深入探讨了深度学习领域中正则化技术的重要性,通过分析L1、L2以及Dropout等常见正则化方法,揭示了它们如何帮助防止过拟合,提升模型的泛化能力。文章还讨论了正则化在不同类型的神经网络中的应用,并指出了选择合适正则化策略的关键因素。通过实例和代码片段,本文旨在为读者提供关于如何在实际问题中有效应用正则化技术的深刻见解。
|
Java 数据处理 调度
Java中的多线程编程:从基础到实践
本文深入探讨了Java中多线程编程的基本概念、实现方式及其在实际项目中的应用。首先,我们将了解什么是线程以及为何需要多线程编程。接着,文章将详细介绍如何在Java中创建和管理线程,包括继承Thread类、实现Runnable接口以及使用Executor框架等方法。此外,我们还将讨论线程同步和通信的问题,如互斥锁、信号量、条件变量等。最后,通过具体的示例展示了如何在实际项目中有效地利用多线程提高程序的性能和响应能力。
|
JavaScript
Vue多图组合走马灯
这篇文章介绍了如何在Vue框架中创建一个多图组合的走马灯组件,允许自定义滑动间隔和图片区域宽度,以展示多个图片。
197 0
Vue多图组合走马灯
|
存储 虚拟化 数据中心
OpenStack常见问题
【8月更文挑战第20天】
186 3
|
Unix Shell Linux
在Linux中,什么是 BASH?
在Linux中,什么是 BASH?
计算机网络实验(华为eNSP模拟器)——第十章 Eth-Trunk(链路聚合)
计算机网络实验(华为eNSP模拟器)——第十章 Eth-Trunk(链路聚合)
计算机网络实验(华为eNSP模拟器)——第十章 Eth-Trunk(链路聚合)