您的位置:首页 > 其它

EL表达式语言

2017-02-22 17:15 155 查看
表达式语言
  Jsp表达式语言(EL)是的访问存储在JavaBean中的数据变得非常简单。JSP EL既可以创建算数表达式。在JSP EL表达式内可以使用整型数、浮点数、字符串、常量true、false还有null。
一、EL表达式语言概述

1、EL的基本语法

 EL表达式语法很简单,是以“${”开头,以“}”结束,中间为合法的表达式,具体的语法格式如下:${expression}

参数说明:用于指定要输出的内容,可以是字符串,也可以是EL运算符组成的表达式。

说明:在EL表达式要输出一个字符串,可以将此字符串放在一对单引号或双引号内;

2、EL的特点

1)可以和JSTL结合使用,也可以和javascript语句结合使用;

2)EL中可以自动进行类型转换。

3)EL不仅可以访问一般的变量,还可以访问JavaBean中的属性以及嵌套和属性对象;

4)EL可以执行算数运算、逻辑运算、关系运算和条件运算等操作;

5)EL中可以获得命名空间(PageContext对象,它是页面中所有其他内置对象的最大范围的集成对象,通过它可以访问其他的内置对象)。

6)在使用EL进行除法运算时,如果0作为除数,则返回无穷大Infiity,而不返回错误。

7)在EL中可以访问JSP的作用域(request、session、application以及page);

8)扩展函数可以与java类的静态方法进行映射;
二、禁用EL

1、使用斜杠“\”符号

使用斜杠符号是一种比较简单的禁用EL的方法。该方法只需要在EL的起始标记前加上斜杠符号就可以。如:\ ${expression}

2、使用page指令

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

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

参数说明:isELInored用于指定是否禁用页面中的EL,如果属性是true,则忽略页面中的EL,否则就将解析页面中的EL。

3、在web.xml文件中配置<el-ingnored>元素

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

<jsp-config>

   <jsp-property-group> 

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

       <el-ignored>true</el-ignored>      //此处的值设置为false,表示使用EL

   </jsp-property-group>

</jsp-config>
三、保留的关键字

EL也有自己的保留关键字,在为变量命名时,应该避免使用这些关键字,包括使用这些EL输出已经保存在作用域范围内的变量,也不能使用关键字,如果已经定义了,那么需要修改为其他的变量名
四、通过EL来访问数据

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

但是并非所有情况下都可以相互代替的。例如:当对象的属性名中包括一些特殊的符号(-或.)时,就只能使用“[]”来访问对象的属性。另外,EL的“[]”运算符还有一个用途,就是不能用来获取数组或是list集合中的数据。

1、数组元素的获取:

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

【例】获取requset范围中的数组arrBook中的第一个元素,可以使用下面的表达式。

${arrBook[0]}

【例】EL输出数组的全部元素

编写index.jsp文件,在该文件中,首先定义一个包含3个元素的一维数组,并赋初始值,然后通过for循环和EL输出该数组中的全部元素。部分关键代码如下:

<%
 String[]arr={"java开发典型模块大全","java范例完全自学手册","jsp开发项目实录"}; 
 requset.setAttribute("book");
%>
<%
 String[]arr1=(String[])request.getAttribute("book");//获取保存到requset范围内的变量
 //通过循环和EL输出一维数组的内容
 for(int i=0;i<arr.length;i++){
 request.setAttribute("request1", i);//将循环变量i保存到request范围内的变量中
 }
%>
 ${request1}:${book[request1]}<br>}//输出数组中的第i个元素

<%}%>

2、List集合元素的获取

应用“[]”运算符还可以获取list集合中的指定元素,但是“.”则不能
五、在EL中判断对象是否为空

在EL中,判断对象是否为空,可以通过empty运算符实现。该运算符是一个前缀运算符,即empty运算符位于操作数前方,用来确定一个对象或变量是否为null或空。empty运算符的格式如下:

${empty expression}

参数说明:expression用于指定要判断的变量或对象。

【例】定义两个request范围内的变量user和user1,分别设置值为null和“”。

<%requset.setAttribute(‘user’,””);%>

<%request.setAttribute(‘user1’,null);%>

然后,通过empty运算符判断user和user1是否为空。代码如下:

${empty user}

${empty user1}

说明:一个变量或对象为null或空代表的意义是不同的。Null表示这个变量没有指明任何对象,而空表示这个变量所属的对象其内容为空。例如:空字符串、空的数组或者是空的List容器。

 另外,empty也可以与not运算符结合起来使用,用于判断一个对象或变量是否为非空。   
六、EL的隐含对象

为了能够获得web程序中的相关数据,EL提供了11个相关的隐含对象,这些对象类似于jsp的内置对象,也是直接通过对象名进行操作。在EL的隐含对象中,除了pageContext是JavaBean对象,对应与java.servlet.jsp.PageContext类型外,其他的隐含对象都对于java.util.Map类型。这些隐含对象可以分为页面上下文对象、访问作用于范围的隐含对象和访问环境信息的隐含对象3种。

1、页面上下文对象

页面上下文对象为pageContext,用于访问jsp内置对象(request、response、out、session、exception、和page等,但不能用于获取application、config个pageContext对象)和servletContext。在获取这些内置对象后,就可以获取其属性。这些属性与getXXX()方法相对应,在使用时,去掉方法名中的get,并将首字母改为小写即可。

【例】访问getServerPort()方法,可以使用下面的代码:

${pageContext.requset.ServerPort}

这句代码将返回端口号,这里是8080。

1)访问response对象:${pageContext.response}

2)访问out对象:${pageContext.out}

3)访问session对象:${ pageContext .session}

4)访问exception对象:${ pageContext .exception}

5)访问page对象:${ pageContext .page}

6)访问servletContext对象:${ pageContext .servletContext}

2、访问作用域范围内的隐含对象

在EL中提供了4个用于访问作用域范围的隐含对象,即pageScope、requestScope、sessionScope和applicationScope。应用这4个隐含对象指定所要查找的标识符的作用域后,系统将不再按照默认的顺序进行查找相应的标识符。它们与JSP中的page、request、session和application内置对象类似。只不过这4个隐含对象只能取得指定范围内定的属性值,而不能取得其他相关信息。

1) pageScope隐含对象

PageScope隐含对象用于返回包含page(页面)范围内的属性值集合,返回值为java.util.Map对象

2)requestScope隐含对象

RequestScope隐含对象用于返回包含requset(请求)范围内的属性值的结合,返回值为java.util.Map对象

3)sessionScope隐含对象

sessionScope隐含对象用于返回包含session(会话)范围内的属性值的集合,返回值为java.util.Map对象。

4)application隐含对象

applicationScope隐含对象用于返回包含application(应用)范围内的属性值的集合,返回值为java.util.Map对象。

3、访问环境信息的隐含对象

在EL中,提供了6个访问环境信息的隐含对象。

1)param对象

Param对象用于获取请求参数的值,应用在参数值只有一个的情况,在应用param对象时,返回的结果为字符串。

2)paramValues对象

如果一个请求参数名对应多个值时,则需要使用paramValues对象获取请求参数的值。在应用paramValues对象时,返回的结果是一个数组。

3)header和headerValues对象

header对象用于获取HTTP请求的一个具体的header的值,但是在有些情况下,可能存在同一个header拥有多个不同的值,这时就必须要使用headerValues对象。

4)initParam对象

InitParam对象用于获取web应用初始化参数值的值。

5)cookie对象

虽然在EL中并没有提供向cookie中保存值的方法,但是它提供了访问由请求设置的cookie方
c1ff
法。这可以通过cookie隐含对象实现。如果在cookie方法中已经设定一个名称为username的值,那么可以使用${cookie.username}来获取该cookie对象。但是如果要获取cookie中的值,需要使用cookie对象的value属性。
七、定义和使用EL函数

1、函数的的定义和使用分为以下3个步骤:

1)编写一个java类,并在该类中编写公用的静态方法,用于实现自定义EL函数的具体功能。

2)编写便签库描述文件,并对函数进行声明。文件名的扩展名为.tld,被保存到web应用的web-inf文件夹下。

3)在jsp页面中引用标签库,并调用定义的函数,实现相应的功能。

下面将通过一个具体的实例介绍EL函数的定义和使用。

【例】定义EL函数,处理字符串中的回车换行符和空格符。

(1)编写一个java类,名称为StringDeal,并将其保存在包中,在该类中添加一个公用的静态方法shiftEnter(),在该方法中替换输入字符串中的回车换行符为<br>,空格符为 ;最后返回新替换的字符串。

public class StringDeal {
public static String shiftEnter(String str) {
String newStr=str.replaceAll("\r\n", "<br>");
newStr=newStr.replaceAll("", " ");
return newStr;
}

}

(2)编写标签库描述文件,名称为stringDeal.tld,并将其保存到WEB-INF文件夹下。

<?xml version="1.0" encoding="UTF-8"?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=http://java.sun.com/xml/ns/j2ee  web-jsptaglibrary_2_0.xsd version="2.0">
<tlib-version>1.0</tlib-version>
<uri>/stringDeal</uri>
<function>
<name>shiftEnter</name>
<function-class>com.java.EL.StringDeal</function-class>
<function-signature>java.lang.String shiftEnter(java.lang.String)
</function-signature>
</function>

</taglib>

(3)编写index.jsp文件,在该文件中添加一个表单及表单元素,用于收集内容信息。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<title>定义EL函数处理字符串中的回车换行符和空格符</title

</head>

<body>
<form name="form1" method="post" action="deal.jsp">
<textarea name="content" cols="30" rows="5"></textarea>
<br>
<input type="submit" name="Button" value="提交" >
</form>

</body>

</html>

(4)编写表单的处理页deal.jsp文件,在该文件中应用上面定义的EL函数,对获取到的内容信息进行处理(主要是替换字符串中的回车换行符和空格符)后显示到页面中。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Insert title here</title>

</head>

<body>
内容为:<br>
${wghfn:shiftEnter(param.content)}

</body>

</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息