13EL表达式语言
EL表达式语言
EL表达式语言
JSP用于在页面上显示动态内容,通常需要在JSP页面中嵌入Java脚本以完成复杂功能。但大量的Java脚本使得JSP页面难以维护。一种类似JavaScript语言—EL表达式(JSP表达式语言)可用于在网页上生成动态内容,并代替JSP脚本元素。JSP表达式语言是从JSP 2.0规范开始支持的技术。
EL表达式全称为Expression Language。是JSP技术的主要特点之一。Java社区组织(JCP,Java Community Process)的JSP标准标签库专家组合JSP 2.0专家组共同开发了JSP表达式语言。JSP表达式语言的语法如下:
|
${EL expression} |
其中: $表示EL中表达式的开始;{ 是起始分隔符;EL expression 指定表达式。;} 是结束分隔符。
JSP页面通常包含HTML文本,JSP标准动作和JSP自定义标签。EL表达式可用于所有HTML和JSP标签中。
EL表达式可用于如下几种方式,我们现在来简要了解一下。
8.1.1 静态文本
包含EL表达式,其值在运行时计算出来。求值后,EL表达式被计算值替换。
我们通过一个例子来看看,代码如例8.1所示。
|
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>EL表达式 静态文本</title> </head> <body> <h1>EL表达式 表达式例</h1> <table border="1"> <tr> <th>运算</th> <th>EL表达式</th> <th>结果</th> </tr> <tr> <td>与</td> <td>\${true and true}</td> <td>${true and true}</td> </tr> </table> </body> </html> |
例8.1
注意:JSP会把${xxx}的内容都认为是EL表达式,里边的内容都会被计算,那么,如果我们只是想输出${xxx}的字符串的话,那么就需要把${xxx}转义。转义有两种方式,一种就如上例一样,在${xxx}前加上\,即\${xxx}。另一种的写法如${'${'}xxx}表示xxx会包含在${}中并作为一个字符串表示。
显示结果如图8.1所示。
图8.1
上例显示EL表达式${true and true}判断true and true的结果是true。
下面,我们来演示如何在HTML标签的静态文本中使用EL表达式。代码如例8.2所示。
|
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>EL表达式 静态文本例</title> </head> <body> <h2>商品价格是${84.5E4}。</h2> </body> </html> |
例8.2
执行结果如图8.2所示。
图8.2
8.1.2 标签和自定义标签属性
JSP页面中可以使用JSP自己的标准标签,也可以使用HTML标签(如<body>等),还可以使用自定义标签(由用户使用taglib指令编写)。我们可以通过EL表达式设置其相关属性。
我们通过一个例子来说明,我们通过EL表达式来设置<body>标签的bgcolor属性。代码如例8.3所示。
|
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>控制body标签属性</title> </head> <% // pageContext中设置一个属性color为red pageContext.setAttribute("color", "red"); %> <!-- 从pageContext中取出color属性 --> <body bgcolor="${pageScope.color}"> 你好! </body> </html> |
例8.3
执行结果如图8.3所示,我们设置了页面的背景色为红色。
图8.3
8.1.3 JavaBean中使用EL表达式
我们在上一章学习了JavaBean的使用,在使用<jsp:getProperty>读取JavaBean的属性值的时候,我们以前学的一般用如下两种写法来实现。
|
<jsp:getProperty name="userBean" property="name"/> <%=userBean.getName()%> |
现在,我们通过EL表达式可以更轻松的完成这项工作。我们通过下边这个例子来体验一下,我们的JavaBean仍然使用第五章5.3.3<jsp:setProperty>中的UseBean类,而发送参数的html也仍然用那一节的senduser.html,代码如例8.4所示。
|
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>使用UserBean_传递参数</title> </head> <body> <form name="main" action="user.jsp" method="post"> 编号:<input type="text" name="myid"/> <br> 姓名:<input type="text" name="myname"/> <br> <input type="submit" value="传送参数"/> </form> </body> </html> |
例8.4
我们只是来修改user.jsp,代码如例8.5所示。
|
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>使用UserBean_显示参数</title> </head> <body> <% // 设置获得参数用的编码 request.setCharacterEncoding("UTF-8"); %> <jsp:useBean id="userBean" class="com.jy.sample.javabean.UserBean" scope="page"/> <!-- 通过自省机制设置属性 --> <jsp:setProperty property="id" name="userBean" param="myid"/> <jsp:setProperty property="name" name="userBean" param="myname"/> <!-- 显示属性值 --> 编号:${userBean.id}<br> 名称:${userBean["name"]} </body> </html> |
例8.5
执行senduser.html,结果如图8.4所示。
图8.4
点击传送参数按钮以后,结果如图8.5所示。
图8.5
我们现在知道,EL表达式有两种写法可以获取JavaBean中的属性,如下所示,两种写法的执行结果是一样的。
|
${userBean.id} ${userBean["name"]} |
8.2 变量的获得
变量用于存储和访问JSP页面中的值。默认情况下,JSP表达式${product}的计算结果与调用pageContext.findAttribute(“product“)一样。EL表达式中的变量可以引用存储在标准范围(如page、request、session和application范围)中的属性。
变量在标准范围中的搜索顺序是page、request、session和application。如果需要,可以使用toString()方法将变量的返回值转换成字符串。如果找不到变量,则返回null值。点运算符(.)用于获取变量的值。除了点运算符(.)外,还可以使用“[ ]”。
8.3 EL运算符
EL表达式的运算符很多,主要分如下几类:
- 算术运算符
|
运算符 |
说明 |
范例 |
结果 |
|
+ |
加 |
${17+5} |
22 |
|
- |
减 |
${17-5} |
12 |
|
* |
乘 |
${17*5} |
85 |
|
/或div |
除 |
${17/5}或${17div5} |
3 |
|
%或mod |
余数 |
${17+5}或${17mod5} |
2 |
- 关系运算符
|
运算符 |
说明 |
范例 |
结果 |
|
==或eq |
等于 |
${5==5}或${5 eq 5} |
true |
|
!=或ne |
不等于 |
${5!=5}或${5 ne 5} |
false |
|
<或lt |
小于 |
${3<5}或${3 lt 5} |
true |
|
>或gt |
大于 |
${3>5}或${3 gt 5} |
false |
|
<=或le |
小于等于 |
${3<=5}或${3 le 5} |
true |
|
>=或ge |
大于等于 |
${3>=5}或${3 ge 5} |
false |
- 逻辑运算符
|
运算符 |
说明 |
范例 |
结果 |
|
&&或and |
与 |
${A&&B}或${A and B} |
true/false |
|
||或or |
或 |
${A||B}或${A or B} |
true/false |
|
!或not |
非 |
${!A}或${not A } |
true/false |
- Empty运算符:${empty param.name},当param.name为null、空String、空Array、空Map、空Collection时,返回true;其他返回false。
- 条件运算符:${A?B:C},当A为true时,执行B;当A为false时,执行C。
- 括号运算符:主要用来改变执行优先权,如${A*(B+C)}。
在这里,对于运算符的使用,我们不再举例,因为当使用框架以后,使用的几率并不大,而且EL表达式主要用途还是获得值并表示。例如struts2的2.16版本的struts2标签不支持EL表达式,而不使用struts2标签则可以使用EL表达式。
8.4 禁用EL表达式
EL表达式包含在符号“${”与“}”之间。例如,${4*8}是一个EL表达式。在Java服务器技术中,不再保留“${”与“}”符号作为EL表达式的专用符号。执行表达式时,JSP容器可能将大括号视为循环的起始括号而现实错误,或得出错误的输出结果。因此,有时需要使用isELIgnored属性禁用EL表达式。
在这里,值得注意的是:Servlet 2.3规范未定义EL表达式,因此在JSP 1.2中默认是禁用EL表达式,如果在符合Servlet 2.3规范的JSP页面中使用EL表达式,将被忽略。Servlet 2.4定义了EL表达式的模式,而JSP 2.0中默认启用JSP EL表达式。
在JSP页面中禁用EL表达式计算的语法如下:
|
<%@page isELIgnored=”true|false”%> |
其中,page表示页面指令,isELIgnored确定时否应忽略对EL表达式进行计算。
如果isELIgnored设置为true,当EL表达式在静态文本或标签属性中出现时将被忽略;如果isELIgnored设置为false,EL表达式则由JSP容器进行计算。
8.5 总结
- EL表达式的语法:以“${”开始,以“}”结束
- 使用EL表达式,主要目的可以实现JSP中无脚本编程,从而提高项目的可维护性和可扩展性
13EL表达式语言的更多相关文章
- Struts2的OGNL表达式语言
一.OGNL的概念 OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者 ...
- Spring学习记录(七)---表达式语言-SpEL
SpEL---Spring Expression Language:是一个支持运行时查询和操作对象图表达式语言.使用#{...}作为定界符,为bean属性动态赋值提供了便利. ①对于普通的赋值,用Sp ...
- Spring学习总结(四)——表达式语言 Spring Expression Language
SpEL简介与功能特性 Spring表达式语言(简称SpEL)是一个支持查询并在运行时操纵一个对象图的功能强大的表达式语言.SpEL语言的语法类似于统一EL,但提供了更多的功能,最主要的是显式方法调用 ...
- 表达式语言EL
表达式语言EL 表达式语言 EL(Expression Language,表达式语言)主要是用在JSP页面中,用来辅助我们产生无脚本的JSP页面,此处的脚本指的是JSP中的Java代码. EL的语法是 ...
- JavaWeb学习笔记——表达式语言
使用表达式语言,可以方便地访问标志位(JSP中有page(pageContext).request.session和application4种标志位)中的属性内容,可以避免出现许多的Scriptlet ...
- Spring3系列6 - Spring 表达式语言(Spring EL)
Spring3系列6-Spring 表达式语言(Spring EL) 本篇讲述了Spring Expression Language —— 即Spring3中功能丰富强大的表达式语言,简称SpEL.S ...
- Spring表达式语言 之 5.1 概述 5.2 SpEL基础(拾叁)
5.1 概述 5.1.1 概述 Spring表达式语言全称为"Spring Expression Language",缩写为"SpEL",类似于Struts ...
- Struts2笔记——ONGL表达式语言
OGNL是ObjectGraphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts 2框架使用OGNL作为默认的表达式语言. ----------- ...
- 表达式语言之ongl表达式
OGNL的全称是Object Graph Navigation Language(对象图导航语言),它是一种强大的表达式语言,让你通过简单一致的表达式语法来读取和设置Java对象的属性值,调用对象的方 ...
随机推荐
- C/C++生成可执行文件过程
编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序.编译的 ...
- [办公自动化]凭证纸打印 IE 默认设置
财务人员需要打印凭证纸,系统windows7,打印机HP P1106 在自定义纸张类型中设置凭证纸. 属性,打印首选项,“纸张和质量”选卡处,单击自定义(需要管理员权限) 输入“PZ” 宽148 高2 ...
- office文档、图片、音/视频格式转换工具
1.音频/视屏转换工具VLC https://wiki.videolan.org/Mp3/#Container_formats http://wenku.baidu.com/view/ba73ac5 ...
- ionic2 在执行ionic serve后报 build dev failed: Cannot set property 'fileSystem' of null
ionic2 真是烦人,因为环境依赖的问题还有网络的问题,不知砸的,项目放一段事件不运行就会出问题. 我一开始是 用 cnpm install安装的依赖,其中也报了错, 然后执行 ionic serv ...
- POJ 2080:Calendar
Calendar Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 12546 Accepted: 4547 Descrip ...
- 【Codeforces】Round #376 (Div. 2)
http://codeforces.com/contest/731 不发题面了,自己点链接 总结一下 考场上 原以为这次要加很多raiting... 但FST狗记邓,只加了58rating 总结一下 ...
- 并不对劲的spoj nsubstr
题意是求一个字符串每个长度的子串出现次数最多的那个出现了多少次,也就是求每个到根的最长路的right集合最大值 . 先建后缀自动机,然后将每个前缀所在的集合的初值设为1,因为所有前缀的right集合肯 ...
- RAR去除广告
现在注册已经不能去掉广告了,给你一个100%有效的办法(##此教程已更新,最新的winrar5.5同样适用,但是多了一个步骤) 电脑桌面新建一个txt文件,重命名为“rarreg.key” 2. 将. ...
- 深入浅出Android makefile(1)--初探(转载)
转载:http://nfer-zhuang.iteye.com/blog/1752368 一.说明 android build system是一个非常庞大的系统,要编译Android工程.修改或新增A ...
- log4j日志基本配置
Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻松 ...