JavaWeb高级编程 -- 篇6

在JSP中使用表达式语言

表达式语言(EL)源于JSP标准库(JSTL)的一部分,用于在不使用脚本、声明或者表达式的情况下,在JSP页面中渲染数据。

EL的基本语法描述了一个必须与其他JSP页面语法分开执行的表达式。基本的EL语法有两种类型:立即执行和延迟执行。

1. 立即执行

立即执行EL表达式将在页面渲染的时候,被JSP引擎解析和执行。因为JSP从上向下执行,这意味着EL表达式将在JSP引擎发现它,并在继续执行其他页面部分之前执行它。如下为一个有效的EL表达式:

${expr}

美元符号和开始/结束花括号定义了EL表达式的边界。

2. 延迟执行

延迟执行EL表达式是统一表达式的一部分,主要用于满足JavaServer Faces的需要。尽管延迟执行语法在JSP中是合法的,但通常不会出现在JSP中。如下,其中expr是一个合法的表达式:

#{expr}

在JSF中,延迟执行表达式将在页面渲染或者回传到页面时执行,或者同时在两个阶段内执行。在JSP中,#{}延迟执行语法只是一个有效的JSP标签特性,用于将EL表达式的执行推迟到标签的渲染过程中。不同于在特性值绑定到标签之前执行EL表达式的方式,该标签的特性将获得一个对未执行EL表达式的引用。该标签可以在之后一个合适的时间,调用一个方法来执行EL表达式。

EL可以直接用在JSP的任何位置,除了少数例外情况。首先,EL表达式不能用在任何指令中。在编译JSP时,指令(、和)将会被执行,但EL表达式是在稍后渲染JSP时执行,所以在其中添加EL表达式是无法正常工作的。另外,JSP声明()、脚本()或者表达式()中的EL表达式也是无效的。除此之外,EL表达式可以添加到其他任何位置。一种常见的情况是将EL表达式添加到输出到屏幕的简单文本中。:

The user will see ${expr} text and will know that ${expr} is good.

当表达式执行时,结果会内嵌在文本中显示到屏幕。

另外,表达式还可以用在标准的HTML标签特性中:

表达式也可以使用在JSP标签特性中:

JSP引擎不会解析这些HTML 特性中的内容,它会将其中的内容当作普通文本输出到响应中,所以可以在引用或者文本形式中包含EL表达式。

EL语法是弱类型,并且它包含许多内建的隐式类型转换。表达式主要的规则是执行后要产生某个值。不能在表达式中声明变量、执行赋值语句或者不产生结果的操作。

EL中的保留关键字:

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

举例:

关键字empty用于验证某些集合、Map或者数组是否含有值,或者某些字符串是否含有一个或多个字符。

${empty x}

eq、ne、lt、gt、le和ge运算符分别是Java关系运算符==,!=,,<=和>=,当然你仍然可以使用传统的关系运算符。

EL表达式中第一个执行的操作符是括号[]和点(.)解析操作符。如:

${mycollection["key"].memberName["anotherKey"]}

引擎首先将解析对象myCollection中映射到key的值。然后在该值中解析memberName方法、字段或者属性。最后在该方法、字段或者属性中再解析anotherKey所对应的值。在这些操作符都执行之后,下面开始解析分组圆括号操作符()。

EL引擎执行的最后一个操作符是分号(;)。该操作看上去与C中的逗号(,)相像,它允许在表达式中同时使用多个表达式,但只有最后一个表达式的值会被保留下来。如:

${x = y + 3; obj.callMethod(x); 'hello, world'}

该表达式最后执行字符串字面量"hello, world"。该表达式的最终结果是最后一个分号之后的表达式"hello, world"。

EL中字符串字面量既可以使用双引号也可以使用单引号。

在EL表达式中,只允许使用十进制字面量,对于其他类型的字面量,EL表达式中没有对应的用法。

无论何时需要,都可以直接在EL表达式中创建集合。

字面量集合中的元素以逗号分隔开。

{1,2,'three',4.00,x}

其中x可以是任何数据类型。

构造列表的方法与构造集合的方法基本一致,区别在于列表使用的是方括号,而集合使用的是花括号。

[1,2,'three',[x,y],{'foo','bar'}]

列表中的元素将以逗号分隔。

HashMap集合字面量:

{'one':1,2:'two','key':x,'list':[1,2,3]}

EL除了使用公共访问方法访问属性的标准语法,还提供了访问JavaBean中属性的简化语法。假设现在有一个名为Shirt的类,它包含一个公开字段size。现有一个名为shirt的变量,使用EL访问size字段:

${shirt.size}

当使用这种方法时,EL引擎看到该语法,它将寻找shirt中的属性而不是字段。所以需要对Shirt类进行修改,使用标准JavaBean访问和设置方法getSize和setSize将size封装为私有字段。表达式shirt.size就变成了shirt.getSize()的快捷方式。

还可以使用[]操作符访问属性:

${shirt["size"]}

在EL早期版本,只可以访问JavaBean属性,不可以调用对象方法,不过在EL2.1添加了在JSP中调用对象方法的能力。因此,可以通过${shirt.getSize()}访问Shirt的size属性。

在EL中,函数是映射到类中静态方法的一个特殊工具。函数调用的语法如下所示:[ns]是命名空间,[fn]是函数名,从[a1]到[an]都是参数

${[ns]:[fn]([a1[,a2[,a3[,...]]]])}

JSTL函数库的命名空间为fn;不过也可以在taglib指令中使用任何其他命名空间。

与Java访问静态字段和方法的方式相同:在EL中使用完全限定的类名,接着是点操作符,再接着是字段或者方法名。如:

${java.lang.Integer.MAX_VALUE}

除非使用的类已经使用JSP page指令导入,否则必须使用完全限定的类型。在JSP中,如同Java一样,所有在java.lang包中的类都已经被隐式地导入。

在大多数情况下,lambda表达式是一个参数名字的列表,紧接着是某种类型的操作符,最后是函数体。EL中的lambda表达式语法几乎与Java8中的一样。

EL的lambda表达式体中包含的则是另一个EL表达式。

访问Map值的方式:

${map["username"]}

${map.username}

列表访问方式:

${list[0]}

${list{'0'}}

empty操作符使用:

${empty set}

java web高级编程 百度网盘_[有书共享]JavaWeb高级编程相关推荐

  1. 乐高解魔方机器人编程百度网盘_砍人快乐 喜剧 / 惊悚 / 恐怖 网盘资源目录搭建...

    ▲点击蓝色"网盘扩容" 每天推荐一部电影 v:xna2022 <砍人快乐> 剧情: 失明的图书管理员.沮丧的板球运动员和孤独的心理医生各自都在寻求惩罚和解脱,他们的生活 ...

  2. java 企业级 百度网盘_开课吧JavaEE企业级高级架构师2021百度网盘

    java/javaee基础面试问题 1.面向对象和面向过程的区别对比: 面向对象易维护.易扩展.易复用,由于面向对象继承.封装.多态的特性,可以设计低耦合的系统易于维护,但因为类的实例化开销较大,所以 ...

  3. 群晖 百度网盘_海康威视联合百度网盘推出NAS私有存储 贡献带宽获积分兑网盘会员...

    此前百度网盘因为限速问题遭到不少用户的吐槽,随后百度网盘推出单次付费加速由于价格过高再次被吐槽. 网盘类的服务也确实需要大量的硬盘空间和服务器带宽支撑,所以对用户来说最好的办法还是自己搭建网盘. 自己 ...

  4. 疯狂java讲义视频百度网盘_疯狂Java讲义(4)配书视频-百度云

    [疯狂Java讲义(4)配书视频]由分享人菜**飞5于-03-1522:21上传到百度网盘.此页面由蜘蛛程序自动抓取,以非人工方式自动生成,只作交流和学习使用.本网站本身不储存任何资源文件,其资源文件 ...

  5. 数据科学家访谈录 百度网盘_您应该在数据科学访谈中向THEM提问。

    数据科学家访谈录 百度网盘 A quick search on Medium with the keywords "Data Science Interview" resulted ...

  6. java 爬取百度云盘,百度网盘资源抓取 爬虫

    [实例简介] 简要实现了百度网盘资源的抓取,以及定时抓取,百度分享用户的抓取以及资源抓取,booststrap 页面 [实例截图] [核心代码] da0a5e77-e599-4f8f-829f-edb ...

  7. 大话存储pdf 百度网盘_学用系列亲身体验百度网盘内测在线文档,有遗憾也有期待...

    随着阿里系的Teambition网盘上线进入倒计时,百度网盘也终于开始发力,除了vip用户扩容11TB的豪举之外,另一个亮点就是上线了内测在线文档功能.胖胖老师也第一手获得了内测资格,今天就和大家分享 ...

  8. 大话存储pdf 百度网盘_学用系列|亲身体验百度网盘内测在线文档,有遗憾也有期待...

    随着阿里系的Teambition网盘上线进入倒计时,百度网盘也终于开始发力,除了vip用户扩容11TB的豪举之外,另一个亮点就是上线了内测在线文档功能.胖胖老师也第一手获得了内测资格,今天就和大家分享 ...

  9. java面试笔试资料 百度网盘

    面试宝典:微软.谷歌.百度.腾讯等各大公司笔试面试题整理全版 /面试宝典:微软.谷歌.百度.腾讯等各大公司笔试面试题整理全版 分享时间:2014-11-07 09:01分享用户:东东***07文件大小 ...

最新文章

  1. vlan网络下的设置
  2. 烦人的Facebook分享授权
  3. How Much Memory Your Code Is Using? Gym - 101955J
  4. .h 与 .hpp 文件
  5. 2018 Multi-University Training Contest 4: B. Harvest of Apples(分块打表)
  6. ElasticSearch Java api 详解_V1.0
  7. Java实战项目推荐(包括微服务、电商、支付项目、后台管理系统等)!
  8. 【过关斩将】如何制作高水平简历-原则篇
  9. php解析dcm,DICOM入门(三)——解析DCM文件
  10. SDL Trados2017及SDL MultiTerm安装
  11. HTML+CSS系列实战之表格
  12. 科达出征珠海航展,共筑蓝天梦想
  13. android 汉字转字节,安卓汉字转拼音
  14. RabbitMQ入门篇、介绍RabbitMQ常用的五种模式
  15. Win11的两个实用技巧系列之没有声音如何解决、bat代码怎么写
  16. 世界海洋日 | TcaplusDB号召你一同保护海洋生物多样性
  17. 单片机软件设计架构(C语言)
  18. wangEditor上传图片事件抛出处理+解决Form-Making中无法粘贴
  19. usb gaghet hid 模拟鼠标键盘的绝对值描述
  20. Jenkins + Gitlab+ Docker + SpringBoot 构建流水线

热门文章

  1. 【飞秋】做需求分析一点心得
  2. 《电脑报》:中国“人肉搜索第一案”幕后之谜
  3. 一个深圳程序员被一美女骗到东莞迷強
  4. 发年终奖了,创了新高
  5. 推荐3款移动端网页开发调试神器
  6. BATJ一线大公司需要什么样的前端
  7. 德国80%的统计学教授都会答错的6个与P值有关的问题!
  8. MEGA | 多序列比对及系统发育树的构建
  9. Bash 使用技巧大补贴
  10. vue框架可以配合php做企业站,基于Vue和PHP打造前后端分离的通用管理系统(一)...