jsp中表达式的值怎么和jsp页面使用el表达式式比较

JSP详细篇――EL表达式(一)
EL表达式概述
在EL表达式出现之前,开发Java Web应用程序时,经常需要将大量的Java代码片段嵌入JSP页面中,这会使得页面看起来很乱,而使用EL表达式则比较简洁。
在页面中显示保存在session中的变量username,并将其输出到页面中,代码如下:
if(session.getAttribute(&username&) != null){
out.print(session.getAttribute(&username&).toString();
如果使用EL,则只需一句代码即可实现
${username}
因此,EL在Web开发中比较常用,通常与 JSTL一起使用。
1、EL的基本语法
EL表达式语法:以${开头,以}结束,中间为合法的表达式,具体语法格式如下:
${expression}
参数说明:
Expression:指定要输出的内容,可以是字符串,也可以是由EL运算符组成的表达式。
由于EL表达式的语法是以${开头,所以如果在JSP页面中要显示字符串S{,则必须在前面加上。即&${& .或者写成&${&${&}& .
在页面中输出字符串&JSP学习&,代码如下:
${&JSP学习&}
2、EL的特点
EL除了具有语法简单、使用方便的特点,还有以下特点:
A、EL可以与JSTL结合使用,也可以也JavaScript语句结合使用
B、EL中会自动进行类型转换,如果想通过EL输入两个字符串数值(如n1和n2)的和,可以直接通过&+&进行连接(如${n1+n2})
C、EL不仅可以访问一般变量,还可以访问JavaBean中的属性及嵌套属性和集合对象
D、EL中可以执行算术运算、逻辑运算、关系运算和条件运算等操作
E、EL中可以获取湖区命名空间(PageContext对象,他是页面中所有其他内置对象的最大范围的继承对象,通过他可以访问其他内置对象)
F、在EL中可以访问JSP的作用域(request、session、application、page)
G、在使用EL进行除法运算的时候,如果0作为除数,则返回无穷大Infinity,而不是返回错误
H、扩展函数可以与Java类的静态方法进行映射
与低版本环境兼容&禁用EL
只要安装的Web服务器能支持Servlet2.4/JSP2.0,就可以在JSP页面中使用EL。由于在JSP2.0之前的版本中没有EL,所以JSP为了和以前的规范兼容,还提供了禁用EL的方法。JSP中提供3中方法禁用EL,分别介绍如下。
1、使用斜杠&&
使用斜杠是一种比较简单的禁用EL的方法。该方法只需要在EL的起始标记&${&前加上&&。具体语法格式如下:
${expression}
该语法格式只使用在禁用页面中的一个或几个EL表达式的情形
2、使用page 指令
使用JSP的page指令可以禁用EL表达式,具体语法格式如下:
&%@page isELIgnored=&布尔值&%&
参数说明:
isELIgnored:用于指定是否禁用页面的EL,如果属性值为true,则忽略页面中的EL,否则将解析页面中的EL
&%@page isELIgnored=&true&%&
该方法适用于禁用一个JSP页面中的EL
3、在web.xml中配置元素
在web.xml中配置元素可以实现禁用服务器中的EL。
该方法使用于禁用Web应用中的所有的JSP页面中的EL
保留的关键字
同Java一样,EL也有自己的保留关键字,在变量命名时,应避免这些关键字,包括使用EL输出已经保存在作用域范围内的变量,也不能使用关键字,如果已经定义了,那么需要修改为其他的变量名。EL中的保留关键字如下:
instanceof
如果EL中使用了保留的关键字,那么在Eclipse中,将给出错误提示。如果忽略该提示,直接运行程序,将会出错。
EL的运算符和优先级
EL可以访问数据运算符、算数运算符、关系运算符、条件运算符及empty运算符等。各运算符的优先级如下:
运算符的优先级决定了在多个运算符同时存在的时候,各个运算符的求职顺序,对于同级别的运算符采用从左到右的顺序进行计算。
使用()可以改变优先级。在复杂的表达式中,使用括号可以使得表达式更容易和避免出错。
1.通过EL访问数据
通过EL提供的&[]&和&,&运算符可以访问数据。通常情况下,&[]&和&.&运算是等价的,可以相互代替。
访问JavaBean中的userInfo的id属性,可以写成以下两种形式:
${userInfo.id}
${userInfo[id]}
但是也不是所有的情况下都可以相互替代,例如,当对象的属性名中包含一些特殊的符号(-或.)时,就只能使用&[]&运算符来访问对象的属性。例如:${userInfo[user-id]}是正确的,而${userInfo.user-name}则是错误的。另外,EL的&[]&运算符还有一个用途,就是用来获取数组或List集合中的数据。
数组元素的获取:
应用&[]&运算符可以获取数组的指定元素,但是&.&不能
获取request范围中的数组arrBook中的第一个元素,可以使用下面的EL表达式:
${arrBook[0]}
编写array.,该文件中,首先包含一个3元素的以为数组,并赋值,然后通过for循环和EL输出数组中的元素
&%@ page language=java import=java.util.* pageEncoding=UTF-8%&
String path = request.getContextPath();
String basePath = request.getScheme()+://+request.getServerName()+:+request.getServerPort()+path+/;
String[] arr = {,JSP,MySQL};//定义一维数组
request.setAttribute(book,arr);//将数组保存在request对象中
String[] arr1 = (String [])request.getAttribute(book);//获取保存在request范围内的对象
//通过循环和EL输出一维数组的内容
for(int i = 0 ; i & arr1. i++){
request.setAttribute(requestI, i);//将循环变量i保存在request范围内的变量中
${requestI }:${book[requestI] }
List集合元素的获取
应用&[]&运算符还可以获取List集合中的指定元素,但是&.&不行
session中保存一个包含3个元素的List,并用EL输出
&%@ page language=java import=java.util.* pageEncoding=UTF-8%&
String path = request.getContextPath();
String basePath = request.getScheme()+://+request.getServerName()+:+request.getServerPort()+path+/;
List list = new ArrayList();//声明一个List集合对象
list.add(饼干);
list.add(牛奶);
list.add(面包);
session.setAttribute(goodsList, list);//将List保存到session中
List list1 = (List)session.getAttribute(goodsList);//获取保存在session中的对象
for(int i = 0 ; i & list1.size() ; i++){
session.setAttribute(sessionI, i);
${sessionI } : ${goodsList[sessionI] }
2.在EL中判断对象是否为空
在EL中,判断对象是否为空,可以通过empty运算符实现,该运算符是一个前缀运算符,即empty运算符位于操作数的前方,用来确定一个对象是否为null或空。Empty运算符的格式如下:
${empty.expression}
定义两个request范围内的变量user,user1,分别数值为null和&&.
&%request.setAttribute(&user&,&&);%&
&%request.setAttribute(&user1&,null);%&
然后通过empty运算符判断user,user1是否为空
${empty user} //返回true
${empty user1} //返回true
另外,empty运算符也可以与not运算符结合使用,判断一个对象或变量是否为空。
&%request.setAttribute(&user&,&&);
${not empty user} //返回值为false
3.EL中的逻辑关系运算
在EL中,通过逻辑运算符和关系运算符可以实现逻辑关系运算。关系运算符用于实现两个表达式的比较,进行比较的表达式可以是数值型也可以是字符串。而逻辑运算符则常用于对Boolean类型的数据进行操作。逻辑运算符和关系运算符经常一起使用。
在判断考试成绩时,可以用下面的表达式判断60到80分的成绩
成绩&60 and 成绩&80
关系运算符
在EL中,提供了6中关系运算符。关系运算符的使用格式如下:
${10==10}/${10 eq 10}
${10!=10}/${&A& ne &A&}
${7&6}/${&A& lt &B&}
${7&6}/${&A& gt &B&}
${&A& &= &A&}
${7&=6}/${7 ge 6}
逻辑运算符
在EL中进行条件运算
语法格式:
${条件表达式?表达式1:表达式2}
参数说明:
条件表达式:用于指定一个条件表达式,该表达式的值为Boolean型。可以由关系运算符、逻辑运算符和empty运算符组成
表达式1:用于指定当条件表达式的值为true时,将要返回的值
表达式2:用于指定当条件表达式的指为false时,将要返回的值
范例:应用条件运算符实现放变量cart的值为空时,输出&cart车为空&,否则输出cart的值。
${empty cart ? &cart为空& : cart}
通常情况下,条件运算符可以用JSTL中的条件标签或代替
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'JSP 中EL表达式用法详解 - 花生之恋 - 推酷
JSP 中EL表达式用法详解 - 花生之恋
EL 全名为Expression Language
EL 语法很简单,它最大的特点就是使用上很方便。接下来介绍EL主要的语法结构:
${sessionScope.user.sex}
所有EL都是以${为起始、以}为结尾的。上述EL范例的意思是:从Session的范围中,取得
用户的性别。假若依照之前JSP Scriptlet的写法如下:
User user =(User)session.getAttribute(&user&);
String sex =user.getSex( );
两者相比较之下,可以发现EL 的语法比传统JSP Scriptlet 更为方便、简洁。
.与 [ ] 运算符
EL 提供 . 和 [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的:
${sessionScope.user.sex}等于${sessionScope.user[&sex&]}
和 [ ] 也可以同时混合使用,如下:
${sessionScope.shoppingCart[0].price}
回传结果为shoppingCart中第一项物品的价格。
不过,以下两种情况,两者会有差异:
(1) 当要存取的属性名称中包含一些特殊字符,如. 或 – 等并非字母或数字的符号,就一定要使用 [ ],
例如:${user.My-Name }
上述是不正确的方式,应当改为:${user[&My-Name&] }
(2) 我们来考虑下列情况:
${sessionScope.user[data]}
此时,data 是一个变量,假若data的值为&sex&时,那上述的例子等于${sessionScope.user.sex};
假若data 的值为&name&时,它就等于${sessionScope.user.name}。
因此,如果要动态取值时,就可以用上述的方法来做,但
无法做到动态取值。
EL 存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。
因为我们并没有指定哪一个范围的username,所以它的默认值会先从Page 范围找,假如找不到,
再依序到Request、Session、Application范围。假如途中找到username,就直接回传,不再继续找下去,
但是假如全部的范围都没有找到时,就回传null,当然EL表达式还会做出优化,页面上显示空白,而不是打印输出NULL。
属性范围(jstl名称)
EL中的名称
RequestScope
SessionScope
Application
ApplicationScope
我们也可以指定要取出哪一个范围的变量:
${pageScope.username}
取出Page范围的username变量
${requestScope.username}
取出Request范围的username变量
${sessionScope.username}
取出Session范围的username变量
${applicationScope.username}
取出Application范围的username变量
其中,pageScope、requestScope、sessionScope和applicationScope都是EL 的隐含对象,
由它们的名称可以很容易猜出它们所代表的意思,
例如:${sessionScope.username}是取出Session范围的username 变量。这种写法是不是比之前JSP 的写法:
String username =(String) session.getAttribute(&username&);容易、简洁许多.
自动转变类型
EL 除了提供方便存取变量的语法之外,它另外一个方便的功能就是:自动转变类型,我们来看下面这个范例:
${param.count + 20}
假若窗体传来count的值为10时,那么上面的结果为30。之前没接触过JSP 的读者可能会认为上面的例子是理所当然的,
但是在JSP 1.2 之中不能这样做,原因是从窗体所传来的值,它们的类型一律是String,所以当你接收之后,必须再将它转为其他类型,
如:int、float 等等,然后才能执行一些数学运算,下面是之前的做法:
String str_count =request.getParameter(&count&);
int count =Integer.parseInt(str_count);
count = count + 20;
所以,注意不要和java的语法(当字符串和数字用“+”链接时会把数字转换为字符串)搞混淆喽。
EL 隐含对象
JSP有9个隐含对象,而EL也有自己的隐含对象。EL隐含对象总共有11 个
PageContext
javax.servlet.ServletContext
表示此JSP的PageContext
java.util.Map
取得Page范围的属性名称所对应的值
RequestScope
java.util.Map
取得Request范围的属性名称所对应的值
sessionScope
java.util.Map
取得Session范围的属性名称所对应的值
applicationScope
java.util.Map
取得Application范围的属性名称所对应的值
java.util.Map
如同ServletRequest.getParameter(String name)。回传String类型的值
paramValues
java.util.Map
如同ServletRequest.getParameterValues(String name)。回传String[]类型的值
java.util.Map
如同ServletRequest.getHeader(String name)。回传String类型的值
headerValues
java.util.Map
如同ServletRequest.getHeaders(String name)。回传String[]类型的值
java.util.Map
如同HttpServletRequest.getCookies()
java.util.Map
如同ServletContext.getInitParameter(String name)。回传String类型的值
不过有一点要注意的是如果你要用EL输出一个常量的话,字符串要加双引号,不然的话EL会默认把你认为的常量当做一个变量来处理,
这时如果这个变量在4个声明范围不存在的话会输出空,如果存在则输出该变量的值。
属性(Attribute)与范围(Scope)
与范围有关的EL 隐含对象包含以下四个:pageScope、requestScope、sessionScope 和
applicationScope,它们基本上就和JSP的pageContext、request、session和application一样,所以笔者在这里只稍略说明。
不过必须注意的是,这四个隐含对象只能用来取得范围属性值,即JSP中的getAttribute(String name),却不能取得其他相关信息,
例如:JSP中的request对象除可以存取属性之外,还可以取得用户的请求参数或表头信息等等。
但是在EL中,它就只能单纯用来取得对应范围的属性值,
例如:我们要在session 中储存一个属性,它的名称为username,在JSP 中使用session.getAttribute(&username&)来取得username 的值,
但是在EL中,则是使用${sessionScope.username}来取得其值的。
所谓的cookie是一个小小的文本文件,它是以key、value的方式将Session Tracking的内容记录在这个文本文件内,这个文本文件通常存在于浏览器的暂存区内。
JSTL并没有提供设定cookie的动作,因为这个动作通常都是后端开发者必须去做的事情,而不是交给前端的开发者。
假若我们在cookie 中设定一个名称为userCountry的值,那么可以使用${cookie.userCountry}来取得它。
header 和headerValues
header 储存用户浏览器和服务端用来沟通的数据,当用户要求服务端的网页时,会送出一个记载要求信息的标头文件,例如:用户浏览器的版本、用户计算机所设定的区域等其他相关数据。假若要取得用户浏览器的版本,即${header[&User-Agent&]}。另外在鲜少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues 来取得这些值。
注意:因为User-Agent 中包含“-”这个特殊字符,所以必须使用“[]”,而不能写成
$(header.User-Agent)。
就像其他属性一样,我们可以自行设定web 站台的环境参数(Context),当我们想取得这些参数initParam就像其他属性一样,
我们可以自行设定web 站台的环境参数(Context),当我们想取得这些参数
&?xml version=&1.0&encoding=&ISO-8859-1&?&
&web-appxmlns=&/xml/ns/j2ee&
xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
xsi:schemaLocation=&/xml/ns/j2ee/web-app_2_4.xsd&
version=&2.4&&:
&context-param&
&param-name&userid&/param-name&
&param-value&mike&/param-value&
&/context-param&:
&/web-app&
那么我们就可以直接使用${initParam.userid}来取得名称为userid,其值为mike 的参数。
下面是之前的做法:String userid =(String)application.getInitParameter(&userid&);
param和paramValues
在取得用户参数时通常使用一下方法:
request.getParameter(String&name)
request.getParameterValues(String&name)
在 EL中则可以使用param和paramValues两者来取得数据。
${param.name}
${paramValues.name}
这里param 的功能和request.getParameter(String name)相同,而paramValues和
request.getParameterValues(String name)相同。如果用户填了一个表格,表格名称为username,则我们就可以使用${param.username}来取得用户填入的值。
看到这里,大家应该很明确EL表达式只能通过内置对象取值,也就是只读操作,如果想进行写操作的话就让后台代码去完成,毕竟EL表达式仅仅是视图上的输出标签罢了。
pageContext
我们可以使用 ${pageContext}来取得其他有关用户要求或页面的详细信息。下表列出了几个比较常用的部分
Expression
${pageContext.request.queryString}
取得请求的参数字符串
${pageContext.request.requestURL}
取得请求的URL,但不包括请求之参数字符串,即servlet的HTTP地址。
${pageContext.request.contextPath}
服务的webapplication的名称
${pageContext.request.method}
取得HTTP的方法(GET、POST)
${pageContext.request.protocol}
取得使用的协议(HTTP/1.1、HTTP/1.0)
${pageContext.request.remoteUser}
取得用户名称
${pageContext.request.remoteAddr}
取得用户的IP地址
${pageContext.session.new}
判断session是否为新的,所谓新的session,表示刚由server产生而client尚未使用
${pageContext.session.id}
取得session的ID
${pageContext.servletContext.serverInfo}
取得主机端的服务信息
这个对象可有效地改善代码的硬编码问题,如页面中有一A标签链接访问一个SERVLET,如果写死了该SERVLET的HTTP地址
那么如果当该SERVLET的SERVLET-MAPPING改变的时候必须要修改源代码,这样维护性会大打折扣。
EL算术运算
表达式语言支持的算术运算符和逻辑运算符非常多,所有在Java语言里支持的算术运算符,表达式语言都可以使用;
甚至Java语言不支持的一些算术运算符和逻辑运算符,表达式语言也支持。
&%@&page&contentType=&text/&charset=gb2312&%&
&title&表达式语言&-&算术运算符&/title&
&h2&表达式语言&-&算术运算符&/h2&
&table&border=&1&&bgcolor=&aaaadd&&
&td&&b&表达式语言&/b&&/td&
&td&&b&计算结果&/b&&/td&
&!--&直接输出常量&--&
&td&\${1}&/td&
&td&${1}&/td&
&!--&计算加法&--&
&td&\${1.2&+&2.3}&/td&
&td&${1.2&+&2.3}&/td&
&!--&计算加法&--&
&td&\${1.2E4&+&1.4}&/td&
&td&${1.2E4&+&1.4}&/td&
&!--&计算减法&--&
&td&\${-4&-&2}&/td&
&td&${-4&-&2}&/td&
&!--&计算乘法&--&
&td&\${21&*&2}&/td&
&td&${21&*&2}&/td&
&!--&计算除法&--&
&td&\${3/4}&/td&
&td&${3/4}&/td&
&!--&计算除法&--&
&td&\${3&div&4}&/td&
&td&${3&div&4}&/td&
&!--&计算除法&--&
&td&\${3/0}&/td&
&td&${3/0}&/td&
&!--&计算求余&--&
&td&\${10%4}&/td&
&td&${10%4}&/td&
&!--&计算求余&--&
&td&\${10&mod&4}&/td&
&td&${10&mod&4}&/td&
&!--&计算三目运算符&--&
&td&\${(1==2)&?&3&:&4}&/td&
&td&${(1==2)&?&3&:&4}&/td&
&%@&page&contentType=&text/&charset=gb2312&%&
&title&表达式语言&-&算术运算符&/title&
&h2&表达式语言&-&算术运算符&/h2&
&table&border=&1&&bgcolor=&aaaadd&&
&td&&b&表达式语言&/b&&/td&
&td&&b&计算结果&/b&&/td&
&!--&直接输出常量&--&
&td&\${1}&/td&
&td&${1}&/td&
&!--&计算加法&--&
&td&\${1.2&+&2.3}&/td&
&td&${1.2&+&2.3}&/td&
&!--&计算加法&--&
&td&\${1.2E4&+&1.4}&/td&
&td&${1.2E4&+&1.4}&/td&
&!--&计算减法&--&
&td&\${-4&-&2}&/td&
&td&${-4&-&2}&/td&
&!--&计算乘法&--&
&td&\${21&*&2}&/td&
&td&${21&*&2}&/td&
&!--&计算除法&--&
&td&\${3/4}&/td&
&td&${3/4}&/td&
&!--&计算除法&--&
&td&\${3&div&4}&/td&
&td&${3&div&4}&/td&
&!--&计算除法&--&
&td&\${3/0}&/td&
&td&${3/0}&/td&
&!--&计算求余&--&
&td&\${10%4}&/td&
&td&${10%4}&/td&
&!--&计算求余&--&
&td&\${10&mod&4}&/td&
&td&${10&mod&4}&/td&
&!--&计算三目运算符&--&
&td&\${(1==2)&?&3&:&4}&/td&
&td&${(1==2)&?&3&:&4}&/td&
上面页面中示范了表达式语言所支持的加、减、乘、除、求余等算术运算符的功能,读者可能也发现了表达式语言还支持div、mod等运算符。
而且表达式语言把所有数值都当成浮点数处理,所以3/0的实质是3.0/0.0,得到结果应该是Infinity。
如果需要在支持表达式语言的页面中正常输出“$”符号,则在“$”符号前加转义字符“\”,否则系统以为“$”是表达式语言的特殊标记。
EL关系运算符
关系运算符
${5==5}或${5eq5}
${5!=5}或${5ne5}
${3&5}或${3lt5}
${3&5}或{3gt5}
${3&=5}或${3le5}
5}或${3ge5}
表达式语言不仅可在数字与数字之间比较,还可在字符与字符之间比较,字符串的比较是根据其对应UNICODE值来比较大小的。
注意:在使用EL 关系运算符时,不能够写成:
${param.password1} = =${param.password2}
${ ${param.password1 } = = ${param.password2 } }
${ param.password1 = =param.password2 }
EL逻辑运算符
逻辑运算符
交集${A && B}或${A and B}
true/false
并集${A || B}或${A or B}
true/false
非${! A }或${not A}
true/false
Empty 运算符
Empty 运算符主要用来判断值是否为空(NULL,空字符串,空集合)。
条件运算符
${ A ? B : C}
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致您所在的位置: &
在JSP2.0中使用EL表达式语言
在JSP2.0中使用EL表达式语言
本文讲述在JSP2.0中使用EL表达式语言。在JSP2.0之前,网页作者只能使用表达式访问系统的值。而JSP2.0中可以使用EL数据访问语言,从而方便地访问和处理应用程序数据。
EL(表达式语言)是一种数据访问语言,可以方便地访问和处理应用程序数据,而无需使用scriptlet或者请求时(request-time)表达式的值。(不需要使用来获得数据,EL使JSP页面编写人员摆脱了java语言,使用户即使不懂JAVA也可以轻松编写JSP程序.
在JSP2.0之前,网页作者只能使用表达式访问系统的值,比如: &&attribute="&%=&pageContext.getAttribute("aName")&%>"&&
或者 &%&=&aCustomer.getAddress().getCountry()&%&&
而表达式语言允许网页作者使用简单的语法访问对象。比如要访问一个简单变量,可以像下面这样写: &&attribute="${aName}"&&
而访问JavaBeans属性,可以使用:${aCustomer.address.country}
Tomcat对EL扩展表达式的支持和配置:
tomcat5.0默认支持EL,同时用户可以在Web.xml文件中对整个web应用程序进行设置或者在每个页面中单独设置page指令来控制TOMCAT是否对EL的支持。
----------------------------
JSP2.0中EL扩展表达式语言的设置
有了JSP2.0,就可以使用EL扩展表达式了。对于一个单个JSP页面,你可以使用定义page指令来设置jsp页面是否支持EL。默认是支持EL(如果要页面不支持EL,请设置为isELIgnored= &%@&page&isELIgnored="true|false"%&&
对于整个JSP应用程序,要修改WEB.XML配置(tomcat5.0.16默认是支持EL的); && &&&For&config&the&ICW&sample&application&&/description& &&JSPConfiguration&/display-name& &&/jsp/datareset.jsp&/url-pattern& &&true&&/&el-ignored& &&ISO-8859-1&/page-encoding& &&true&/scripting-invalid& &&/jsp/prelude.jspf&/include-prelude& &&/jsp/coda.jspf&/include-coda& &&/jsp-property-group& &
----------------------------
JSP2.0中表达式运算符号:
EL表达式运算符包括算数运算符(+-*/),关系运算符(>< )和逻辑运算符(&& || !),还有empty 判断值是否为空,同时EL能够对字符串,数字等各种类型的数据之间的自动转换,使EL 兼容了JAVASCRIPT等脚本语言的优点,摆脱了JAVA语言严格的数据类型限制,使用起来简单,只需要几分钟就可以轻松掌握(对于不懂java的网页编写人员实在是一件好事)。
----------------------------
JSP2.0中各种运算符运算实例
以下是EL运算符列表,其中empty可以检查某个值是否为空
运算符 说明
% 或 mod 模(求余)
== 或 = 等于
!= 或 != 不等于
<& 或 lt 小于
>或gt 大于
< =或le 小于等于
>=或ge 大于等于
&& 或 and 逻辑与
|| 或 or 逻辑或
! 或 not 逻辑非
empty 检查是否为空值
a ? b : c 条件运算符
----------------------------
EL表达式使用简单,在网页中"${}"表示是EL表达式。${1+1} 显示为 2
----------------------------
JSP2.0中EL算术表达式 运算结果 ${1}&1& &${1&+&2}&3& &${1.2&+&2.3}&3.5& &${-4&-&2}&-6& &${21&*&2}&42& &${10%4}&2& &${10&mod&4}&2& &${1&<&&2}&true& &${1&lt&2}&true& &${1&>&(4/2)}&false& &${4.0&>=&3}&true& &${4.0&ge&3}&true& &${100.0&eq&100}&true& &${(10*10)&!=&100}&false& &${(10*10)&ne&100}&false& &${(1==2)&?&3&:&4}&4&&
----------------------------
内置的11个隐含对象:
为方便的获得WEB应用程序的相关数据,EL表达式语言定义了一些隐含对象。隐含对象共有11个对象,(JSP中具有9个隐含对象,EL比JSP中具有更多的隐含对象,这样EL比JSP更方便的获取数据) 使用这些对象可以很方便的访问Web 程序数据。
隐含对象包括Session(获得当前web程序的Session值),cookie(获得WEB程序的Cookie值),header,headerValues(获得用户的Http数据访问头部信息),Param和ParamValues(获得用户提交数据参数)等。
使用${隐含对象名称["元素"]} 就可以获得这个值了,例如${header("host")} 可以显示http头部中host的值,${param("username")},可以获得显示用户表单提交的用户. 使用${empty(param("username")} 可以判断用户提交表单是否为空等。(这样比jsp1.2中使用request.getParamter("username") 要简化和方便很多了)
----------------------------
隐含对象及隐含对象访问实例
EL 表达式定义了11个隐含对象,使用这11个对象可以很方便的读取到session,cookie,HttpHeader,用户提交表单(param)等
隐含对象 内容
applicationScope 应用程序范围内的scoped变量组成的集合
cookie 所有cookie组成的集合
header HTTP请求头部,字符串
headerValues HTTP请求头部,字符串集合
initParam 全部应用程序参数名组成的集合
pageContext 当前页面的javax.servlet.jsp.PageContext对象
pageScope 页面范围内所有对象的集合
param 所有请求参数字符串组成的集合
paramValues 所有作为字符串集合的请求参数
requestScope 所有请求范围的对象的集合
sessionScope 所有会话范围的对象的集合
下面是获取HTTP访问头部数据和用户提交数据的示例
EL表达式 运算结果
${header["host"]} 这里得到HTTP连接头部的host值
${header["accept"]} 这里获得HTTP头部的accept值
${header["user-agent"]} 这里获得HTTP头部的user-agent值
----------------------------
访问应用程序数据
除了可以方便的访问内置的隐含对象外,EL还可以方便的到应用程序数据,访问应用程序数据使用两种方式 . (点号运算符)访问对象的属性,也可以使用[] 来访问数组元素(实际上EL中访问隐含对象数据也是使用这两种方式的)
表达式${data}表示名为data的scoped变量。可以使用点号(.)或方括号([])运算符从集合中检索属性值:(两种数据访问方式演示)
点号运算符用于访问命名的属性,比如表达式${customer.name}表示scoped变量customer的name属性;
方括号运算符可用于检索命名的属性,比如在${customer[“name”]}中。也可以通过${customers[0]}的形式来访问集合customers中的第一项。
EL表达式语言同时还统一了对点号和方括号运算符的处理,因此${customer.name}与${ customer[“name”]}是等价的。
----------------------------
以下可以读取用户提交的信息,假设用户提交信息为 ?name=myname&alies=(这里有两种访问方式,一种是使用[]来进行访问,另外一种是使用"."来进行访问,两种访问效果是一样的。) ${param["name"]&}&myname& &${param.name}&myname& &${param["alies"]&}&& &${param.alies}&&&
----------------------------
访问应用程序数据需要进行以下几个步骤:
1.编写public类的static public 方法,只有static public的方法才能被标记表达试访问。
----------------------------
JSP2.0中定义和使用函数
表达式语言允许你定义可在表达式中调用的函数。函数必须作为public类中的public static方法编写。同时要将文件映射到TLD标志库文件中。
为了说明函数的使用,我们举一个简单的例子,把两个数相加。首先要编写求两数之和的Java方法代码,如代码示例所示,这里定义了一个静态方法,它接收两个字符串参数,把它们解析成整数并返回它们的和。
示例文件:Compute.javapackage&jsp2.examples.& &import&java.util.*;& &public&class&Compute&{& &public&static&int&add(String&x,&String&y)&{& &int&a&=&0;& &int&b&=&0;& &try&{& &a&=&Integer.parseInt(x);& &b&=&Integer.parseInt(y);& &}catch(Exception&e)&{}& &return&a&+&b;& &}& &}&&
用javac把这段代码编译成功后,下一步就要把函数的签名映射到标签库。
----------------------------
2.将方法映射到TLD表中
----------------------------
配置标记库描述文件 函数描述符 && &&add&x&and&y&/description& &&add&/name& &&jsp2.pute& &&/function-class& &&int& &add(java.lang.String,java.lang.String)& &&/function-signature& &&/function&&
现在我们就可以编写一个JSP页面来使用这个函数。代码示例5是包含两个字段的一个表单,用户输入两个数字并按下“求和”按钮,就会调用上面的函数并把两个数相加,结果在同一个页面中显示出来。
----------------------------
3.在JSP页面中调用要引用的Taglib标记,然后就可以在jsp页面中访问了。
----------------------------
代码示例5: math.jsp &%@&taglib&prefix="my"& &uri="http://jakarta.apache.org/tomcat/jsp2-example-taglib&%& &&& &&Functions&/TITLE& &&/HEAD& &&& &&Add&Numbers&/H3& &&& &&&action="math.jsp"&method="GET"& &X&=&&&type="text"&name="x"&value="${param["x"]}"& &&& &Y&=&&&type="text"&name="y"&value="${param["y"]}"& &&&type="submit"&value="Add&Numbers"& &&/FORM& &&& &The&sum&is:&${my:add(param["x"],param["y"])}& &&/BODY& &&/HTML&&
----------------------------
【编辑推荐】
【责任编辑: TEL:(010)】
关于的更多文章
AngularJS是很多Web开发人员在打造单页面应用程序时的首选创建方
所以姑娘,让我们做一枚花见花开的程序媛。
讲师: 14人学习过讲师: 35人学习过讲师: 15人学习过
Jquery是继prototype之后又一个优秀的Javascript框架
又到周末了。昨天是感恩节,小编也是听同事说起,才想
离年末越来越近了,不知道各位有没有倦怠的感觉?本周
本书是一本非常全面地讲述黑客入侵主动防御技术的网络安全工具书。本书的重点是介绍黑客的攻击手段和提供相应的主动防御保护措施
51CTO旗下网站

我要回帖

更多关于 jsp页面使用el表达式 的文章

 

随机推荐