第5章 表达式语言.

Slides:



Advertisements
Similar presentations
請按左鍵換頁 為人的藝術 ~善緣貴人多~ 廣結善緣 1. 有什麼觀念,就有什麼行為; 有什麼行為,就有什麼習慣; 有什麼習慣,就有什麼性格; 有什麼性格,就有什麼命運。 2. 對長輩謙虛是本分,對平輩謙虛是修養, 對 晚輩謙虛是高貴,對所有人謙虛是安全。 3. 廣結善緣,圓融的人際關係( EQ ):
Advertisements

第 4 章 配合 例子源代码一起使用 Power point 制作:耿祥义 张跃平 普通高等教育 “ 十一五 ” 国家级规划教材 JSP 内置对象.
第 4 章 JSP 内置对象 本章主要内容:  内置对象的概念  内置对象的作用域和生命期  内置对象的作用和关系  内置对象的使用方法.
网络应用程序设计 2014 JavaBean. JavaBean 及其属性 JavaBean 就是一种 Java 的组件技术 JavaBean 是 Java 类 JavaBean 通过约定的方法名实现属性功能 简单属性 void setXxx(Type value) Type getXxx() boolean.
基于 JSP 搭建 Web 应用程序. 第五章 Web 应用程序优 化 回顾 什么是会话跟踪技术 ? cookie 和 session 的区别是什么 ? 对象的四种作用域范围分别是什么?
LOGO 第 9 章 Java Servlet 和 JSP 编程 孙焘. 重点: servlet 编程原理 1 servlet 的基础类与编程实现 2 JSP 编程原理 3 JSP 的常用语法 4.
Power point 制作 耿祥义 张跃平 配合 例子源代码一起使用. 第 5 章 JSP 与 JavaBean JavaBean 是一个可重复使用的软件组件, 是遵循一定标准、用 Java 语言编写的一 个类,该类的一个实例称为一个 JavaBean ,简称 bean.
(寫一篇有關求學道理的 文章訓示晚輩們) 為學一首示子姪 彭端淑.
幼小課程統合與銜接 楊朝祥 中原大學講座教授.
機關改制(含員工權益保障)業務簡介 報告人:王奐寅 100年6月24日.
追求阳光心态 做一个心理健康的人 上海市徐汇区精神卫生中心 吴洪明.
第一章 JSP概述.
7.5 其他对象 JSP 视频教学课程.
基于JSP搭建Web应用程序.
上节课我们是讲解了request, response, session, application 等内置对象,有了它们,我们就可以编写一个完整的应用程序了。 我们来看ebank这个小应用程序的编写。
C语言程序设计 李伟光.
教學經驗分享 吳毅成 國立交通大學資訊工程系 2012年4月.
快乐猜猜猜 “旧四大件”? (缝纫机、自行车、手表、收音机) 改革开放 “新四大件”? (彩电、冰箱、洗衣机、空调)
保良局何壽南小學 學校經驗分享: 學生成長的支援
主講者:林妙容 國立暨南國際大學 輔導與諮商研究所專任助理教授
教师应做学生的心理保健师 (之三) 昆明市心桥心理健康研究所 钱锡安
自 然 探 索 圓周美語 My name is.
张孝祥IT课堂 -深入体验Java Web开发内幕
如何做好EQ管理.
年度校樹選拔秀 主辦單位:楊梅國小.
JSTL标签库 讲师:梁 桐 北京传智播客教育 1。缓存数据 2。处理字符乱码 3。监听器中的定时器
面向对象的程序设计(一).
MVC Servlet与MVC设计模式.
國中小教師甄試相關事宜 心理的準備 甄試日期 甄試方式 甄試內容 正式教師與代課教師差別 相關問題 關起門來說的問題 結語.
校 長 翁世盟 家長會長 蔡宏奕 教師會長 葉蕙境 敬上
課程內容 態度決定高度 履歷及面試重點提要 履歷 面試服裝及注意事項 性向分析 性向分析測驗.
各類植物開花授粉後很快的就會形成果實,準備傳宗接代。果實著生的狀態與開花的方式有關,由花序所形成的果實會聚集呈聚合果:
自然與生活科技 南一版 三上.
上課囉 職場甘苦談 小資男孩向錢衝 育碁數位科技 呂宗益/副理.
物质的组成、性质及变化 物质的组成 构成物质的微粒 微粒间的相互作用 物质的分类 按状态分类 按组成分类 物质的性质 物理性质 化学性质.
公主的月亮 最近看了一本友人劉清彥譯的書〔公主的月亮〕,極有趣味。 這個難題由一個生病的小公主提出,她嬌憨的告訴疼她的國王,
公主的月亮 最近看了一本友人劉清彥譯的書〔公主的月亮〕,極有趣味。 這個難題由一個生病的小公主提出,她嬌憨的告訴疼她的國王,
Chapter 4 流程控制.
课程整体教学设计 ——《面向对象程序设计基础》
第十章 综合编程实例 前9章分别介绍了JSP概念、运行环境、页面组成、各种技术的应用方法。本章将综合各章概念、技术和方法,把这些概念、技术和方法运用到实际应用当中,使读者对JSP技术和应用有更深刻的理解。本章涉及到4个应用:留言板、成绩管理、问卷调查和在线考试。 学习目标 理解4个应用的设计原理和设计方法.
為人的藝術 ~善緣貴人多~ 請按左鍵換頁.
為人的藝術 ~善緣貴人多~ 請按左鍵換頁.
EQ劇場 ~ 李爾王.
Hello World 體驗實作第一個JSP程式.
ASP VBScript 基础知识.
用教学实践解读课程标准.
第9章 过滤器和监听器技术 过滤器(Filter)和监听器(Listener)是两种特殊的Servlet技术。过滤器可以对用户的请求信息和响应信息进行过滤,常被用于权限检查和参数编码统一设置等。监听器可以用来对Web应用进行监听和控制的,增强Web应用的事件处理能力。 本章主要介绍过滤器和监听器的编程接口、基本结构、信息配置、部署和运行,最后通过案例说明过滤器和监听器的典型应用。
专题4:JSP脚本和指令.
JSP自定义标签技术的分析与应用 ----Custom Tag 的分析与应用
崑山科技大學資訊管理系 伺服網頁程式設計 系統開發細部流程 教師:游峰碩.
電子商務網站建制技術與實習(II) 助教:江宜政 吳昇洋.
辅导课程十三.
DWR WEB开发交流 1、自我介绍 2、DWR概述 3、DWR DEMO介绍 4、DWR实现机制 5、DWR配置说明 6、JS开发注意事项.
Java集合.
JSP程序设计 第9章 Servlet简介.
Chapter 2 基本語法.
Java Server Faces 参考书籍 Java Server Faces 核心编程.
面試的準備 1.
沙田聖本篤堂 家庭牧民小組 簡介. 沙田聖本篤堂 家庭牧民小組 簡介 成立過程: 2000年教區會議期間,甘寶維神父邀請數對活躍於堂區夫婦商討籌辦家庭牧民小組的可行性 2000/01年間舉辦數次「家事談論會」凝聚有意投身服務人士,小組開始成型.
武汉纺织大学传媒学院 cm.wtu.edu.cn
2.1 高職與私立學校註冊操作說明 (2015/9/15上線)
第三章 世界文明的蛻變與互動 第一節 歐洲社會的蛻變 第二節 世界文明的交匯 第三節 亞洲大帝國的發展 1.
100學年度上學期 月亮班課程規劃.
关于EL JSP 2.0將Expression Language(以下简称EL)整合进JSP标准规格。
香港大學教育應用資訊科技發展研究中心 資訊年代青年自學才能拓展計劃 (S計劃)
第二章 Java基本语法 讲师:复凡.
方格紙上畫正方形.
班級經營--實務:疑難雜症 組員: 周雅文 李桂枝 顏純郁 黃福裕 戴曉真
第4章 JSP动态网页设计基础 教学目标 教学重点 教学过程 2019年10月21日.
第四章 jsp语法 4.1 jsp页面的基本结构 一个jsp页面可由五种元素组合而成: 普通的html标记符
Presentation transcript:

第5章 表达式语言

本章内容 5.1 理解表达式语言 5.2 使用EL运算符 5.3 使用EL访问数据

5.1 理解表达式语言 EL并不是一种通用的编程语言,它仅仅是一种数据访问语言。网页作者通过它可以很方便地在JSP页面中访问应用程序数据,无需使用小脚本(<%和%>)或JSP请求时表达式(<%=和%>),甚至不用学习Java语言就可以使用表达式语言。 作为一种数据访问语言,EL具有自己的运算符、语法和保留字。作为JSP开发员,我们的工作是创建EL表达式并将其添加到JSP的响应中。

5.1.1 表达式语言的调用 在JSP 2.0的页面中,表达式语言的使用形式如下。 ${expression} 表达式语言是以$开头,后面是一对大括号,括号里面是合法的EL表达式。 该结构可以出现在JSP页面的模板文本中,也可以出现在JSP标签的属性值中,只要属性允许常规的JSP表达式即可。

5.1.1 表达式语言的调用 下面是在JSP模板文本中使用EL表达式。 <ul> <li>客户名:${customer.custName} <li>Email地址:${customer.email} </ul> 下面是在JSP标准动作的属性中使用EL表达式。 <jsp:include page = "${expression1}" /> <c:out value = "${expression2} " />

5.1.2 表达式语言的功能 表达式语言的主要功能包括 : (1)提供了一组简单的运算符。 (2)对作用域变量的方便访问。 (3)对JavaBeans对象访问的简单表示。 (4)对集合元素的简单访问。 (5)对请求参数、Cookie和其他请求数据的简单访问。 (6)提供了在EL中使用Java函数的功能。

5.1.3 表达式语言与JSP表达式的区别 JSP表达式的使用格式为: <%=expression %> 这里的expression为合法的Java表达式,它属于脚本语言的代码。在expression中可以使用由脚本声明的变量。

5.1.3 表达式语言与JSP表达式的区别 EL表达式的格式为: ${expression} 这里的expression是符合EL规范的表达式,并且不需要包含在标签内。在EL表达式中不能使用脚本中声明的变量。

5.2 使用EL运算符 EL作为一种简单的数据访问语言,提供了一套运算符。 EL的运算符包括:算术运算符、关系运算符、逻辑运算符、条件运算符、empty运算符以及属性与集合访问运算符。 这些运算符与Java语言中使用的运算符类似,但在某些细节上仍有不同。

5.2 使用EL运算符 5.2.1 算术运算符 5.2.2 关系与逻辑运算符 5.2.3 条件运算符 5.2.4 empty运算符 5.2.1 算术运算符 5.2.2 关系与逻辑运算符 5.2.3 条件运算符 5.2.4 empty运算符 5.2.5 属性与集合元素访问运算符

5.2.1 算术运算符 表5-1给出了在这些类型上的算术运算符。 算术运算符 说明 示 例 结果 + 加 ${6.80 + -12} 5.2.1 算术运算符 表5-1给出了在这些类型上的算术运算符。 算术运算符 说明 示 例 结果 + 加 ${6.80 + -12} -5.2 - 减 ${15-5} 10 * 乘 ${2 * 3.14159} 6.28318 /或div 除 ${25 div 4} 与 ${25/4} 6.25 %或mod 取余 ${24 mod 5} 与 ${24 % 5} 4

5.2.2 关系与逻辑运算符 EL的关系运算符与一般的Java代码的关系运算符类似,如表5-2所示。 关系运算符 说明 示 例 结果 5.2.2 关系与逻辑运算符 EL的关系运算符与一般的Java代码的关系运算符类似,如表5-2所示。 关系运算符 说明 示 例 结果 == 或 eq 相等 ${3==5}或${3 eq 5} false != 或ne 不相等 ${3!=5}或${3 ne 5} true < 或lt 小于 ${3<5}或${3 lt 5} > 或gt 大于 ${3>5}或${3 gt 5} <= 或le 小于等于 ${3<=5}或${3 le 5} >= 或ge 大于等于 ${3>=5}或${3 ge 5}

5.2.2 关系与逻辑运算符 关系表达式产生的boolean型值可以与EL的逻辑运算符结合运算,这些运算符如表5-3所示。 逻辑运算符 说明 5.2.2 关系与逻辑运算符 关系表达式产生的boolean型值可以与EL的逻辑运算符结合运算,这些运算符如表5-3所示。 逻辑运算符 说明 示 例 结果 && 或 and 逻辑与 ${(9.2 >=4) && (1e2 <= 63)} false || 或or 逻辑或 ${(9.2>= 4) || (1e2 <= 63)} true ! 或not 逻辑非 ${ not 4 >= 9.2) }

5.2.3 条件运算符 EL的条件运算符的语法是: expression ? expression1 : expression2 5.2.3 条件运算符 EL的条件运算符的语法是: expression ? expression1 : expression2 表达式的值是基于expression的值,它是一个boolean表达式。如果expression的值为true,则返回expression1结果;如果expression的值为false,则返回expression2的结果。

5.2.3 条件运算符 ${(5 * 5) == 25 ? 1 : 0} 的结果为 1; ${(3 gt 2) && !(12 gt 6) ? "Right" : "Wrong"} 的结果为Wrong; ${("14" eq 14.0) && (14 le 16) ? "Yes" : "No"} 的结果为Yes; ${(4.0 ne 4) || (100 <= 10) ? 1 : 0} 的结果为 0。

5.2.4 empty运算符 empty运算符的使用格式为: ${empty expression} 它判断expression的值是否为null、空字符串、空数组、空Map或空集合,若是则返回true,否则返回false。

5.2.5 属性与集合访问运算符 属性访问运算符用来访问对象的成员,集合访问运算符用来检索Map、List或数组对象的元素。这些运算符在处理隐含变量时特别有用。在EL中,这类运算符有下面两个。 • 点号(.)运算符。 • 方括号([])运算符。

1. 点号(.)运算符 点号运算符用来访问Map对象一个键的值或bean对象的属性值,例如:param是EL的一个隐含对象,它是一个Map对象,下面代码返回param对象username请求参数的值: ${param.username} 再比如,假设customer是Customer类的一个实例,下面代码访问该实例的custName属性值: ${customer.custName}

2. 方括号([])运算符 方括号运算符除了可以访问Map对象键值和bean的属性值外,还可以访问List对象和数组对象的元素。例如: ${param ["username"]} 或 ${ param ['username']} ${customer["custName"]} 下面程序使用表格的形式输出了使用各种运算符的EL表达式的值。

2. 方括号([])运算符 程序5.1 eloperator.jsp 为了在JSP页面中输出文本${2+5},需要在“$”符号前使用转义字符“\”,否则将输出EL表达式的值。

5.3 使用EL访问数据 5.3.1 访问作用域变量 5.3.2 访问JavaBeans属性 5.3.3 访问集合元素 5.3.1 访问作用域变量 5.3.2 访问JavaBeans属性 5.3.3 访问集合元素 5.3.4 访问EL的隐含变量

5.3.1 访问作用域变量 在JSP页面中,可以使用JSP表达式访问作用域变量。一般做法是:在Servlet中使用setAttribute()将一个变量存储到某个作用域对象上,如HttpServletRequest、HttpSession及ServletContext等。然后使用RequestDispatcher对象的forward()将请求转发到JSP页面,在JSP页面中调用隐含变量的getAttribute()返回作用域变量的值。

5.3.1 访问作用域变量 使用EL就可以更方便地访问这些作用域变量。要输出作用域变量的值,只需在EL中使用变量名即可,例如: ${variable_name} 对该表达式,容器将依次在页面作用域、请求作用域、会话作用域和应用作用域中查找名为variable_name的属性。如果找到该属性,则调用它的toString()并返回属性值。如果没有找到,则返回空字符串(不是null)。

5.3.1 访问作用域变量 下面通过一个例子说明如何访问作用域变量。 程序5.2 VariableServlet.java 程序5.3 variables.jsp

5.3.2 访问JavaBeans属性 如果知道JavaBeans的完整名称和它的作用域,也可以使用下面JSP标准动作访问JavaBeans的属性: <jsp:useBean id="employee" class="com.demo.Employee" scope="session" /> <jsp:setProperty name="employee" property="empName" value="Hacker" /> <jsp:getProperty name="employee" property="empName" />

5.3.2 访问JavaBeans属性 如果使用表达式语言,就可以通过点号表示法很方便地访问JavaBeans的属性,如下所示: ${employee.empName} 使用表达式语言,如果没有找到指定的属性不会抛出异常,而是返回空字符串。

5.3.2 访问JavaBeans属性 使用表达式语言还允许访问嵌套属性。例如,如果Employee有一个address属性,它的类型为Address,而Address又有zipCode属性,则可以使用下面简单形式访问zipCode属性。 ${employee.address.zipCode} 上面的方法不能使用<jsp:useBean>和<jsp:getProperty>实现。

5.3.2 访问JavaBeans属性 下面通过一个示例来说明对JavaBeans属性的访问。该例中有两个JavaBeans,分别为Address,它有三个字符串类型的属性,city、street和zipCode;Employee是在前面的类的基础上增加了一个Address类型的属性address表示地址。

5.3.2 访问JavaBeans属性 在EmployeeServlet.java程序中创建了一个Employee对象并将其设置为请求作用域的一个属性,然后将请求转发到JSP页面,在JSP页面中使用下面的EL访问客户地址的三个属性。 <li>城市:${employee.address.city} <li>街道:${employee.address.street} <li>邮编:${employee.address.zipCode}

5.3.2 访问JavaBeans属性 程序5.4 Address.java 程序5.5 Employee.java 程序5.6 EmployeeServlet.java 程序5.7 beanDemo.jsp

5.3.3 访问集合元素 在EL中可以访问各种集合对象的元素,集合可以是数组、List对象或Map对象。这需要使用数组记法的运算符([])。 例如,假设有一个上述类型的对象attributeName,可以使用下面形式访问其元素。 ${attributeName[entryName]}

5.3.3 访问集合元素 (1)如果attributeName对象是数组,则entryName为下标。上述表达式返回指定下标的元素值。下面代码演示了访问数组元素。 <% String[] fruit = {"apple","orange","banana"}; request.setAttribute("myFruit", fruit); %> My favorite fruit is:${myFruit[2]} 上面一行还可以写成: My favorite fruit is:${myFruit["2"]}

5.3.3 访问集合元素 (2)如果attributeName对象是实现了List接口的对象,则entryName为索引。下面代码演示了访问List元素。 <%@ page import="java.util.ArrayList" %> <% ArrayList<String> fruit = new ArrayList<String>(); fruit.add("apple"); fruit.add("orange"); fruit.add("banana"); request.setAttribute("myFruit", fruit); %> My favorite fruit is:${myFruit[2]}

5.3.3 访问集合元素 (3)如果attributeName对象是实现了Map接口的对象,则entryName为键,相应的值通过Map对象的get(key)获得的,例如: Map<String,String> capital = new HashMap<String,String>(); capital.put("England","伦敦"); capital.put ("China","北京"); capital.put ("Russia","莫斯科"); request.setAttribute("capital", capital); The capital of China is:${capital["China"]}<br> The capital of Russia is:${capital.Russia}

5.3.3 访问集合元素 程序5.8 CollectServlet.java 程序5.9 collections.jsp

5.3.4 访问EL隐含变量 在JSP页面的脚本中可以访问JSP隐含变量,如request、session、application等。 EL表达式中也定义了一套自己的隐含变量。使用EL可以直接访问这些隐含变量。 表5-4给出了EL中可以使用的11个隐含变量及其说明。

1. pageContext变量 pageContext是PageContext类型的变量。PageContext类依次拥有request、response、session、out和servletContext属性,使用pageContext变量可以访问这些属性的属性。下面是一些例子。 ${pageContext.request.method} ${pageContext.request.remoteAddr}

2. param和paramValues变量 param和paramValues变量用来从ServletRequest中检索请求参数值。param变量是调用给定参数名的getParameter(String name)的结果,使用EL表示如下。 ${param.name} 类似地,paramValues是使用getParameterValues(String name)返回给定名称的参数值的数组。要访问参数值数组的第一个元素,可使用下面代码。 ${paramValues.name[0]}

3. header和headerValues变量 ${header.host}或${header["host"]} 类似地,headerValues.host是一个数组,它的第一个元素可使用下列表达式之一显示。 ${headerValues.host[0]} ${headerValues.host["0"]} ${headerValues.host['0']}

4. cookie变量 使用EL的cookie隐含变量得到客户向服务器发回的Cookie数组,即调用request对象的getCookies()的返回结果。如果要访问cookie的值,则需要使用Cookie类的属性value(即getValue方法)。因此,下面一行可以输出名为userName的Cookie的值。如果没有找到这个cookie对象,则输出空字符串。 ${cookie.userName.value} 使用cookie变量还可以访问会话Cookie的ID值,例如: ${cookie.JSESSIONID.value}

5. initParam变量 initParam变量存储了Servlet上下文的参数名和参数值。例如,假设在DD中定义了如下初始化参数。 <context-param> <param-name>email</param-name> <param-value>hacker@163.com</param-value> </context-param>

5. initParam变量 则可以使用下面的EL表达式得到参数email的值。 ${initParam.email} 如果通过JSP脚本元素访问该Servlet上下文参数,应该使用下面表达式。 <%= application.getInitParameter("email") %>

5. pageScope、requestScope、sessionScope和applicationScope变量 这几个隐含变量很容易理解,它们用来访问不同作用域的属性。例如,下面代码在会话作用域中添加一个表示商品价格的totalPrice属性,然后使用EL访问该属性值。 <% session.setAttribute("totalPrice",1000); %> ${sessionScope.totalPrice} 注意,访问应用作用域的属性应使用applicationScope变量而不是使用pageContext变量。

5.4 小结 表达式语言(EL)是JSP 2.0中增加的新特征,EL仅仅是一种数据访问语言,通过它可以很方便地在JSP页面中访问应用程序数据,无需使用小脚本和请求时表达式。 表达式语言最重要的目的是创建无脚本的JSP页面。为了实现这个目的,EL定义了自己的运算符、语法等,它完全能够替代传统的JSP中的声明、表达式和小脚本。