




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java Web 开发 EL表达式,目标,Expression Language在JSP 2.0中纳入了JSP的标准,它定义了变量存取、运算、隐含对象、函式等内容,配合JavaBean或其它标签库,可以实现较好的逻辑与视图分离之目的。 简介 Expression Language 使用 EL 存取属性 或 . 的选择 EL 隐含物件 EL 运算符,简介 Expression Language,您可以将一些程序逻辑放入JavaBean中,并配合、与 等标签来编写JSP网页,以实现逻辑与视图分开的目的,然而使用JavaBean有其限制, JavaBean配合标签只能用来存取一些简单的属性,而不能用来存取集合中的某个元素,这仍必须要配合Scriptlet才能存取。 另外为了要使用一些JSP隐含对象,例如request、response、session等等,您也不免要使用Scriptlet,在 JSP中,为了要实现逻辑视图分离的目的,您还必须要搭配使用JSP标准标签函式库(JavaServer Page Standard Library,JSTL)或甚至自订标签函式库(custom tag library)来实现。,JSP Expression Language本来是包括在JSTL 1.0的一个简单的数据存取与运算的语言,在JSP 2.0中,则纳入了JSP正式标准之中,成为JSP所支持的特性之一,JSP Expression Language定义了变量存取、运算、隐含对象、函式等内容,配合JSTL的其它标签或流程控制标签,就可以实现更好的逻辑视图分离之目的。,来看个简单的例子,了解JSP Expression Language的基本使用方式,下面这个JSP网页可以计算使用者所请求的两个数字相加结果: elTest.jsp EL Test 简单的EL数据存取与运算: $param.a + $param.b = $param.a + param.b ,如果使用页面或直接在网址上传入a与b的值,例如: http:/localhost:8080/myjsp/elTest.jsp?a=10&b =14 则会取得下面的结果: EL Test 简单的EL数据存取与运算: 10 + 14 = 24 ,在这个简单的例子中,您可以看到Expression Language是使用 $ 与 来包括所要存取的隐含对象、变量与进行运算,param是Expression Language的隐含对象,表示使用者的请求参数,param.a表示取得使用者请求参数a的值,大致而言,Expression Language中的每一个隐含对象,其存取的数据与作用范围对应于JSP隐含对象,至于 + 则是Expression Language中定义的运算符,EL运算符同一般的程序语言一样,提供有算术运算、逻辑运算、关系运算等运算符,另外还有一些特别的运算符。,在上面这个例子中,您看不到Scriptlet的部份,在语法上可以更切合的结合在HTML语法中,再来看一个简单的例子,使用Expression Language的pageContext隐含对象来取得一些使用者的相关信息: elTest.jsp EL Test 请求方法: $pageContext.request.method 请求参数: $pageContext.request.queryString 使用者IP: $pageContext.request.remoteAddr ,这个例子是取过Expression Language的pageContext来存取javax.servlet.ServletContext,并通过该接口来存取request属性,也就是调用getRequest()方法来取得HttpServletRequest,然后再存取 HttpServletRequest的各个属性,也就是分别调用getMethod()、getQueryString()、 getRemoteAddr()等方法,执行的结果可能是: EL Test 请求方法: GET 请求参数: a=10&b=14 使用者IP: ,关于Expression Language的一般例子,您可以在Tomcat的范例中先找到一些程序,启动Tomcat之后您就可以进行在线测试,本地测试网址是: http: /localhost:8080/jsp-examples/ 您可以使用 page指令元素 的isELIgnored属性来设定JSP网页是否使用EL,原因在于您的网页中可能已含有与EL类似的语法,例如样版文字之类,您也可以在web.xml中设定标签为true来决定不使用EL,例如: . *.jsp true ,使用 EL 存取属性,web.xml中的是用来预设所有JSP网页是否使用EL,如果JSP网页使用page指令元素的isELIgnored设定是否支持EL,则以page指令元素的设定为主。 在JSP网页中,您可以设定属性或JavaBean的作用范围为page、request、session、 application等,之后就可以藉由属性或JavaBean的别名,并指定作用范围来存取属性或JavaBean,您可以使用 getAttribute()方法来取得属性,这必须在Scriptlet中使用,而使用存取JavaBean的标签可以避免使用Scriptlet,然而其限制是只能取得简单的资料,而不能取得如数组之内的元素数据。,可以使用EL指定属性或JavaBean的参考名称来取得属性或JavaBean的值,先举一个简单的例子,首先编写一个只有Scriptlet的JSP网页: attribute.jsp ,如果您连至上面的网页,它会在request中设定“username“属性,然后马上forward至elTest.jsp,而elTest.jsp中只使用HTML标签与EL,如下所示: elTest.jsp Hello, $ username ! 所得到的结果网页如下: Hello, Justin! ,在这个例子中,您也大致看到Model 1的一个例子,您可以让某些JSP网页实现程序逻辑,而在某些JSP网页中使用EL、JavaBean或是标签等,实现程序逻辑与视图分开的机制。 在EL中,可以指定属性或JavaBean的作用范围来存取它们,这必须使用到EL隐含对象,这将在之后介绍,如果不指定作用范围的话,预设是page、 request、session、application的顺序来寻找EL中所指定的属性。 如果存入的属性对象具有getXXX()之类的方法,则可以使用下面的方式来取得相对应名称的属性: Hello, $ ! Your id is $ user.id .,例如我们先编写一个UserBean类别: UserBean.java package ject; public class UserBean private String name; private String id; public void setName(String name) = name; public void setId(String id) this.id = id; public String getName() return name; public String getId() return id; ,使用下面这个JSP网页来测试它: elTest.jsp Hello, $ userB ! Your id is $ userBean.ID .,当然,就上面这个例子而言,也可以简单的使用来取得JavaBean的属性值,然而如果JavaBean 返回的是一个数组,该如何取得数组当中的某个元素值呢?使用EL的话,您可以藉由运算子来指定所要存取的对象,例如根据索引值来取得返回数组的某个元素,为了测试,先简单的编写下面这个测试用的类别: ArrayTestBean.java package ject; public class ArrayTestBean public String getTestArray() String test = “Justin“, “momor“, “Beckyday“; return test; ,可以藉由下面这个JSP网页来进行测试: elTest.jsp test0 = $ arrayTestBean.testArray0 test1 = $ arrayTestBean.testArray1 test2 = $ arrayTestBean.testArray2 最后传回的结果是: test0 = Justin test1 = momor test2 = Beckyday, 或 . 的选择,在EL中,您可以使用 . 运算符来取得JavaBean属性或Map对象中的值,例如若student是个JavaBean,其上有一个name属性,则您可以这么取得该属性的值: $ 而事实上,您也可以使用运算符来取得值,例如: $ student“name“ 在EL中,假设table是一个Map对象,则您可以使用 . 运算符并在之后接上键值来取得Map中对应的值,例如以title为键值来取得对应的值: $ table.title 而使用运算符也是可以的,例如: $ table“title“ 所以归纳来说,使用 . 运算符时,左边要是个JavaBean或Map对象,而右边必须是JavaBean的属性或是Map的键值。,而使用运算符时,除了左边要是个JavaBean或Map对象,而右边必须是JavaBean的属性或是Map的键值之外,还有更进一步的功能,左边也可以是java.util.List对象或数组,而右边还可以是索引值。 举个例子来说,如果有个数组储存于request之中: String names = “Justin“, “caterpillar“, “momor“, “Becky“; request.setAttribute(“nameList“, names);,您可以在使用EL时,如下使用来取得数组中的值,例如取得索引1位置的值: $ nameList1 上例会显示“caterpillar“的字符串,更进一步的,EL还会将字符串索引值转换为int类型,例如: $ nameList“2“ 上例会显示“momor”的字符串结果。 总结来说,. 与 运算符可以处理JavaBean及Map对象,而运算子给您更多的功能,可以处理java.util.List或数组,如果中使用“包括一个数值,则EL会尝试将之转换为int再进行索引存取。,EL 隐含物件,在EL中提供有11个隐含对象,其中除了pageContext隐含对象是个JavaBean对象,对应于 javax.servlet.ServletContext类型之外,剩下的隐含对象都是对应于java.util.Map类型,所以使用EL隐含对象,可以让您以字典的方式来取值,例如users.get(“Justin“) 可以使用users“Justin“的方式来取得字典“Justin“所对应的数值。 与作用范围相关的EL隐含对象有pageScope、requestScope、sessionScope与 applicationScope,它们分别可以取得使用JSP隐含对象pageContext、request、session与 application的 setAttribute()方法所设定的属性对象,如果不使用EL隐含对象指定作用范围,则预设是取得pageScope的属性。,如果要取得与使用者请求参数数据,则可以使用param或paramValues,举例来说,$ param.user 其作用相当于,而paramValues则相当于request.getParameterValues(),可与取得页面多选项的值,由于传回的是多个值,您可以使用运算子来指定取得哪个元素,例如$ paramValues.hobbies0 。 如果要取得使用者请求的表头数据,则可以使用header或headerValues隐含对象,例如$ header“User-Agent“ ,headerValues则用来取得同一表头所包括的多值,作用相当于request.getHeaders()方法。,cookie隐含对象可以用来取得使用者的Cookie设定值,虽然我们之前没有说明过Cookie的使用,但是其使用方式类似于 session;如果您在Cookie中设定了username属性,则可以使用$ cookie.username 来取得属性值。 initParam可以用来取得JSP网页在web.xml中设定的初始值,例如$ initParam.initCount 的作用相当于。,pageContext对应于javax.servlet.ServletContext型态,您可以藉由ServletContext来取得 request、response、session等对象,从而取得当中的相关讯息,只要是ServletContext中getXXX()方法,就可以用$ pageContext.xxx 来取得,如果XXX对象有getYYY()方法,则可以用$ pageContext.xxx.yyy 来取得值,例如$ pageContext.request.remoteAddr 可以用来取得HttpServletRequest对象,并使用它的getRemoteAddr()方法来取得使用者的IP地址。,EL 运算符,使用EL,您可以直接实行一些算术运算、逻辑运算与关系运算,其使用就如同在一般常见的程序语言中之运算,您也可以在安装好Tomcat之后,连接上http:/localhost:8080/jsp-examples/找到
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025北京中国音乐学院高层次人才引进2人考前自测高频考点模拟试题附答案详解
- 在线课程效果分析-洞察与解读
- 2025年甘肃省兰州大学哲学社会学院聘用制(B岗)人员招聘考前自测高频考点模拟试题及答案详解1套
- 2025江苏南通市崇川区卫生系统面向毕业生招聘备案制高层次卫生人才15人模拟试卷及答案详解(典优)
- 2025年上海市闵行区莘庄实验小学代课教师招聘模拟试卷附答案详解(完整版)
- 2025贵州修文县城镇公益性岗位招聘(4月)模拟试卷有答案详解
- 2025南平延平峡阳镇卫生院招聘驾驶员考前自测高频考点模拟试题带答案详解
- 2025年长春理工大学公开招聘博士人才(71人)模拟试卷及答案详解(考点梳理)
- 2025河北衡水市冀州区招聘第二批社区工作者模拟试卷及答案详解参考
- 2025贵州省卫生健康委员会“银龄计划”(引进退休高级医疗卫生人才)724人模拟试卷及答案详解(必刷)
- 保险业务员述职报告
- 20G520-1-2钢吊车梁(6m-9m)2020年合订本
- 中心静脉深静脉导管维护操作评分标准
- 导尿术操作护理课件
- 推进班组信息化建设:利用信息技术提高工作效率
- 2023年上海市虹口区初三一模语文试卷(含答案)
- 优势视角课件完整版
- 花城版音乐课时15-第12课 走近戏曲(一)观赏京剧学习念白-京剧丑角的念白《报灯名》-课件
- 《食品安全法》与粮食质量安全专题培训课件
- 2023年安康市交通建设投资集团有限公司招聘笔试题库及答案解析
- 文理分科心理测试问卷
评论
0/150
提交评论