EL表达式的概述和简单用法

EL表达式的概述和简单用法

一 导语

1.JSP表达式语言(Expression Language),简称EL,最初定义在JSTL1.0规范中,直到JSP2.0之后,EL表达式才正式成为JSP规范中的一部分。EL为存取变量、表达式运算和读取内置对象等内容提供了新的操作方式。

2.EL表达式的目的是为了使JSP页面编写起来更简单。

二 表达式概述

1. 表达式概述

(1)EL表达式为存取变量、表达式运算和读取内置对象等内容提供了新的操作方式

(2)EL表达式的目的是为了使jsp页面编写起来更简单

(3)EL表达式是便于获取数据而定义的一种语言

(4)EL表达式是为了便于获取数据而定义的一种语言,JSP 2.0之后才成为一种标准。下面的示例是一个简单的EL表达式:

<%@ page contentType="text/html; charset=UTF-8"%>

${stuno + 1}

输出的结果为 1

执行过程:作用:作用域对象中设置的属性,从四个域中设置属性并从域中查找,查找不到为null、和上面是等价的pageContext.findAttribute(“studentName”);

2.EL表达式的基本语法

EL表达式的语法格式:

EL表达式的出现让Web的显示层发生了大的变革,EL表达式用于获取数据,在JSP 2.0之后成为一种标准,是由JSP 标准标签库专家组和JSP 2.0 专家组开发。

格式:${标识符}

JSP EL用于以下情形

(1)静态文本

(2)标准标签和自定义标签(可以作为元素属性的值,也可以在自定义或者 标准动作元素的内容中使用)

(3)EL不能在脚本元素中使用

三 EL表达式的基本运用

1.运算符:[] .

(1)EL提供(.)和([])两种运算符来存取数据,即使用点运算符(.)和方括号运算符([])。

– 点运算符和方括号运算符可以实现某种程度的互换, 如:

${student.name}等价于

${student[“name”]} “”括起来的是表示常量

${student[name]} name表示变量,优先取name的值

注:(1)如果studentBean类中属性的名称出现了—_ ( 如stu_id),则用${student[“name”]}

(2) 如果要动态取值,用[]

(2)当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号时,就一定要使用[]。例如${student.name }应当改为${student[“name”] }。

(3)如果要动态取值,就可以用[]来做,而.无法做到动态取值。例如${sessionScope.student[data]}中data是一个变量。

2. EL文字常量

一个EL表达式包含变量、文字常量、操作符。文字常量主要包括字符串、数字和布尔值、还有NULL,其中

– 字符串是由任何由单引号或双引号引起来的一串字符。

– 数字常量包括整型、浮点型,整型表示十进制、十六进制和八进制类型的值,浮点型与Java类似,可以包含任何正的或者负的浮点数。

– 布尔型包括true和false。

例子:${true} ${10} ${10.5f} ${“hello”} ${null}

3.EL操作符

(1)算数运算符

5+3=${5+3}

(2)关系运算符

5>3 ${5>3}

(3)逻辑运算符

true && false ${true && false}

(4)验证运算符---判空运算

${empty user } ${empty student.name }

Empty是判空 为空返回的真 不为空返回的是假

(6)条件运算符

${(empty student.name) ? '空' : '非空'}

注:原样输出 \${5+4} \是转移字符

. he []1

在用el表达式取数据的时候,取不出来的时候用[]

四 EL表达式的隐式对象(11个)

1.与作用域有关的对象

pageScope requestScope sessionScope applicationScope

例子:${sessionScope.属性名}

${属性名}

注:如果没有设定使用EL内置对象的作用范围,则按照pageScope、requestScope、sessionScope和applicationScope的先后顺序读取属性值。

2.与输入有关的隐式对象

Param paramValues

例子:${param.参数名}

3.Cookie----用来取得使用者的cookie值

例子:在cookie中设定了username属性值,可以使用

${cookie.username.value}来取得属性值。

4.header和headerValues

(1)读取请求的头数据,使用header或headerValues内置对象

例子:header ${header[“User-Agent”]},

(2)取得所有的头信息---headerValues

例子:${headerValues}

等价于调用request.getHeaders()方法。

5.initParam

initParam用来读取设置在web.xml中的参数值。例如${initParam.repeat},等价于:(String)application.getInitParameter(“repeat”);

或servletContext.getInitParameter(“repeat”);

6.pageContext

pageContext用于取得其他有关用户要求或页面的详细信息

五 禁用EL

禁用有两种方法:

(1)是在一个page里设置,例子:

<%@ page isELIgnored="true" %>

(2)在web.xml中设置,对所有的界面都管用:

*.jsp

true

六 如何用EL表达式来获取集合、类、hashMap中封装的数据

编写java代码来模拟servlet里的代码

1. 指定的作用域范围内存储变量

<%

String userName = "陈红军";

//把变量设置到请求域中

request.setAttribute("user", userName);

%>

运用的EL的表达式为:${user}

2.封装在bean中

<%--模拟servlet获取是数据封装在StudentBean对象,并把该对象存入到某个作用域对象中,把请求转交给jsp --%>

<%

StudentBean st = new StudentBean();

st.setId(1);

st.setName("李四");

request.setAttribute("student", st);

%>

运用的EL的表达式为:${student.name}

3. javaBean对象中某些属性又是另一个类的对象,多级获取

<%

Address addr = new Address();

addr.setPro("河北省 ");

addr.setCity("保定市");

StudentBean stu = new StudentBean();

stu.setId(2);

stu.setName("tom");

stu.setAddress(addr);

request.setAttribute("student1", stu);

%>

运用的EL的表达式为:

${student1.id}  

${student1.name}  

${student1.address.pro}${student1.address.city }

4.集合对象中的数据 ,并用EL输出

<%

List list = new ArrayList();

list.add(0, new StudentBean(3, "张三"));

list.add(1, new StudentBean(4, "aaa"));

list.add(2, new StudentBean(5, "bbb"));

list.add(3, new StudentBean(6, "ccc"));

request.setAttribute("studentList", list);

%>

运用的EL的表达式为:

${studentList[1].id} 

${studentList[1].name} 

${studentList[1].address.pro }

5. Map类型的集合

<%

HashMap hm = new HashMap();

hm.put("aaa",new StudentBean(10,"aaaaa"));

hm.put("bbb",new StudentBean(20,"bbbbb"));

hm.put("ccc",new StudentBean(30,"ccccc"));

hm.put("111",new StudentBean(40,"ddddd"));

request.setAttribute("studentMap",hm);

%>

运用的EL的表达式为:

${studentMap.aaa.id} ${studentMap["aaa"].name}

${studentMap["111"].id}

你可能感兴趣的:(EL表达式的概述和简单用法)