JSP详细篇——EL表达式(一)

来源:互联网 发布:织梦 自定义文件名 编辑:程序博客网 时间:2024/05/18 21:44

EL表达式

EL表达式概述

EL表达式出现之前,开发Java Web应用程序时,经常需要将大量的Java代码片段嵌入JSP页面中,这会使得页面看起来很乱,而使用EL表达式则比较简洁。

范例:

在页面中显示保存在session中的变量username,并将其输出到页面中,代码如下:

<%

if(session.getAttribute(“username”) != null){

out.print(session.getAttribute(“username”).toString();

}

%>

如果使用EL,则只需一句代码即可实现

${username}

 

因此,ELWeb开发中比较常用,通常与 JSTL一起使用。

1、EL的基本语法

EL表达式语法:以${开头,以}结束,中间为合法的表达式,具体语法格式如下:

${expression}

参数说明:

Expression:指定要输出的内容,可以是字符串,也可以是由EL运算符组成的表达式。

 

PS

由于EL表达式的语法是以${开头,所以如果在JSP页面中要显示字符串S{,则必须在前面加上\。即”\${” .或者写成“${‘${’}” .

范例:

在页面中输出字符串“JSP学习”,代码如下:

${‘JSP学习’}

 

 

2、EL的特点

 

EL除了具有语法简单、使用方便的特点,还有以下特点:

A、EL可以与JSTL结合使用,也可以也JavaScript语句结合使用

B、EL中会自动进行类型转换,如果想通过EL输入两个字符串数值(如n1n2)的和,可以直接通过“+”进行连接(如${n1+n2}

C、EL不仅可以访问一般变量,还可以访问JavaBean中的属性及嵌套属性和集合对象

D、EL中可以执行算术运算、逻辑运算、关系运算和条件运算等操作

E、EL中可以获取湖区命名空间(PageContext对象,他是页面中所有其他内置对象的最大范围的继承对象,通过他可以访问其他内置对象)

F、在EL中可以访问JSP的作用域(requestsessionapplicationpage

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}

PS:

该语法格式只使用在禁用页面中的一个或几个EL表达式的情形

2、使用page 指令

使用JSPpage指令可以禁用EL表达式,具体语法格式如下:

<%@page  isELIgnored=“布尔值”%>

参数说明:

isELIgnored:用于指定是否禁用页面的EL,如果属性值为true,则忽略页面中的EL,否则将解析页面中的EL

范例:

<%@page  isELIgnored=”true”%>

 

PS

该方法适用于禁用一个JSP页面中的EL

 

3、在web.xml中配置<el-ignored>元素

 

web.xml中配置<el-ignored>元素可以实现禁用服务器中的EL

范例:

<jsp-config>

<jsp-property-group>

<url-pattern>*.jsp</url-pattern>

<el-ignored>true</el-ignored>

</jsp-property-group>

</jsp-config>

 

PS:

该方法使用于禁用Web应用中的所有的JSP页面中的EL

 

保留的关键字

Java一样,EL也有自己的保留关键字,在变量命名时,应避免这些关键字,包括使用EL输出已经保存在作用域范围内的变量,也不能使用关键字,如果已经定义了,那么需要修改为其他的变量名。EL中的保留关键字如下:

and

eq

gt

instanceof

div

or

le

false

empty

not

lt

ge

如果EL中使用了保留的关键字,那么在Eclipse中,将给出错误提示。如果忽略该提示,直接运行程序,将会出错。

 

EL的运算符和优先级

EL可以访问数据运算符、算数运算符、关系运算符、条件运算符及empty运算符等。各运算符的优先级如下:

 

运算符的优先级决定了在多个运算符同时存在的时候,各个运算符的求职顺序,对于同级别的运算符采用从左到右的顺序进行计算。

PS: 

使用()可以改变优先级。在复杂的表达式中,使用括号可以使得表达式更容易阅读和避免出错。

1.通过EL访问数据

 

通过EL提供的“[]”和“,”运算符可以访问数据。通常情况下,“[]”和“.”运算是等价的,可以相互代替。

范例:

访问JavaBean中的userInfoid属性,可以写成以下两种形式:

${userInfo.id}

${userInfo[id]}

但是也不是所有的情况下都可以相互替代,例如,当对象的属性名中包含一些特殊的符号(-.)时,就只能使用“[]”运算符来访问对象的属性。例如:${userInfo[user-id]}是正确的,而${userInfo.user-name}则是错误的。另外,EL的“[]”运算符还有一个用途,就是用来获取数组或List集合中的数据。

数组元素的获取:

应用“[]”运算符可以获取数组的指定元素,但是“.”不能

范例:

获取request范围中的数组arrBook中的第一个元素,可以使用下面的EL表达式:

${arrBook[0]}

范例:

编写array.jsp,该文件中,首先包含一个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+"/";

%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <base href="<%=basePath%>">

    

    <title>My JSP 'array.jsp' starting page</title>

    

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">    

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

<!--

<link rel="stylesheet" type="text/csshref="styles.css">

-->

 

  </head>

  

  <body>

    <%

     String[] arr = {"Java","JSP","MySQL"};//定义一维数组

     request.setAttribute("book",arr);//将数组保存在request对象中

    %>

    <%

     String[] arr1 = (String [])request.getAttribute("book");//获取保存在request范围内的对象

     //通过循环和EL输出一维数组的内容

     for(int i = 0 ; i < arr1.length ; i++){

     request.setAttribute("requestI", i);//将循环变量i保存在request范围内的变量中

    %>

     ${requestI }:${book[requestI] } <br/>

    <%

    }

    %>

  </body>

</html>

 

 

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+"/";

%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <base href="<%=basePath%>">

    

    <title>My JSP 'goods.jsp' starting page</title>

    

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">    

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

<!--

<link rel="stylesheet" type="text/csshref="styles.css">

-->

 

  </head>

  

  <body>

    <%

     List<String> list = new ArrayList();//声明一个List集合对象

list.add("饼干");

list.add("牛奶");

list.add("面包");

session.setAttribute("goodsList", list);//将List保存到session中

    %>

    <%

     List<String> list1 = (List<String>)session.getAttribute("goodsList");//获取保存在session中的对象

     for(int i = 0 ; i < list1.size() ; i++){

     session.setAttribute("sessionI", i);

     %>

      ${sessionI } : ${goodsList[sessionI] }<br/>

     <%

      }

      %>

  </body>

</html>

 

 

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类型的数据进行操作。逻辑运算符和关系运算符经常一起使用。

范例:

在判断考试成绩时,可以用下面的表达式判断6080分的成绩

成绩>60  and  成绩<80

 

 

关系运算符

EL中,提供了6中关系运算符。关系运算符的使用格式如下:

运算符

功能

示例

==eq

等于

${10==10}/${10 eq 10}

!=ne

不等于

${10!=10}/${“A” ne “A”}

<lt

小于

${7<6}/${“A”  lt  “B”}

>或gt

大于

${7>6}/${“A”  gt  “B”}

<=le

小于等于

${“A”  <=  “A”}

>=ge

大于等于

${7>=6}/${7  ge  6}

 

 

逻辑运算符

 

 

 

在EL中进行条件运算

语法格式:

${条件表达式?表达式1:表达式2}

参数说明:

条件表达式:用于指定一个条件表达式,该表达式的值为Boolean型。可以由关系运算符、逻辑运算符和empty运算符组成

 

表达式1:用于指定当条件表达式的值为true时,将要返回的值

 

表达式2:用于指定当条件表达式的指为false时,将要返回的值

 

范例:应用条件运算符实现放变量cart的值为空时,输出“cart车为空”,否则输出cart的值。

${empty cart  ?  ”cart为空”  : cart}

通常情况下,条件运算符可以用JSTL中的条件标签<c:if><c:choose>代替




1 0
原创粉丝点击