`
yaasshole
  • 浏览: 664437 次
文章分类
社区版块
存档分类
最新评论

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"%>

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

<html>

<body>

${stuno + 1} <br>

</body>

</html>

输出的结果为 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&gt;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里设置,例子:

<!-- 设置忽略EL表达式,默认的情况下是false -->

<%@ page isELIgnored="true" %>

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

<jsp-config>

<jsp-property-group>

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

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

</jsp-property-group>

</jsp-config>

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

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

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

<%

String userName = "陈红军";

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

request.setAttribute("user", userName);

%>

<!-- 写的是属性的名称:相当于:pageContext.findAttribute("user") 找到会返回对象,找不到返回null,但是在浏览器上不显示 -->

<!-- 寻找的顺序:pageContext、request、session、application -->

运用的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}&nbsp;&nbsp;

${student1.name}&nbsp;&nbsp;

${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}&nbsp;

${studentList[1].name}&nbsp;

${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}&nbsp;${studentMap["aaa"].name}<br/>

<!-- 如果键是数字,则必须用[] -->

${studentMap["111"].id}<br/>

分享到:
评论

相关推荐

    Servlet与JSP核心编程第2版

    第1章 servlet和jsp技术概述 1.1 servlet的功用 1.2 要动态构建网页的原因 1.3 servlet代码初探 1.4 servlet相对于“传统”cgi的优点 1.5 jsp的作用 第1部分 servlet技术 第2章 服务器的安装和配置 ...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版) 1/2

    使用Facelets视图声明语言、托管bean和JSF表达式语言(EL)。按照JSF导航模型声明一个页面,包括新的“隐式导航”功能。使用用户界面组件模型和JSF事件模型,包括支持可添加书签的页面以及POST、REDIRECT、GET模式。...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版).part1

    使用Facelets视图声明语言、托管bean和JSF表达式语言(EL)。按照JSF导航模型声明一个页面,包括新的“隐式导航”功能。使用用户界面组件模型和JSF事件模型,包括支持可添加书签的页面以及POST、REDIRECT、GET模式。...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    6.3 EL表达式的应用 6.3.1 EL的基本语法. 6.3.2 EL的运算符 6.3.3 EL的隐含对象 6.4 JSTL核心标签库的应用 6.4.1 数据访问标签 6.4.2 流程控制标签 6.4.3 循环标签 6.5 JSTL格式标签库的应用 6.5.1 使用格式化数字 ...

    J2EE应用开发详解

    149 9.4 JSF的组成 152 9.4.1 UI组件 152 9.4.2 JSF标签 154 9.5 统一EL 156 9.5.1 表达式和函数 156 9.5.2 操作符 157 9.5.3 保留字 158 9.5.4 内置对象 158 9.6 Backing Bean 158 9.7 创建自定义组件 162 9.8 小结...

    java web技术开发大全(最全最新)

    所有开发工具和框架均使用目前的最新版本,紧跟技术发展的趋势 提供230个实例和4个综合案例,可以作为案头必备的查询手册 一线开发人员全力打造,分享技术盛宴! 重点内容及特色 《Java Web开发技术大全:JSP+Servlet...

    java web开发技术大全

    所有开发工具和框架均使用目前的最新版本,紧跟技术发展的趋势 提供230个实例和4个综合案例,可以作为案头必备的查询手册 一线开发人员全力打造,分享技术盛宴! 重点内容及特色 《Java Web开发技术大全:JSP+...

    springboot学习思维笔记.xmind

    SpringEL和资源调用 注入普通字符 注入操作系统属性 注入表达式云算结果 注入其他Bean的属性 注入文件内容 注入网址内容 注入属性文件 Bean的初始化和销毁 Java配置方式 注解方式 ...

    SAMBA 24学时教程

    Samba的使用,讨论Samba与UNIX、Windows 9x和Windows NT的综合应用;Samba的安全性,介绍口令加密和在Samba中使用SSL;另外,还有在广域网中实现Samba等高级内容。 目 录 前言 第一部分 安装和初始配置 第1学时 ...

    新手学习C++入门资料

    尽管这样的用法是正确的,但大多数C和C++的编译器都会给出一个警告,说参数y在程序中没有被用到。为了避免这样的警告,C++允许声明一个无名形参,以告诉编译器存在该参数,且调用者需要为其传递一个实际参数,但是...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    6.6.4 sendredirect()和forward()方法的区别 238 6.7 小结 239 第7章 web应用程序的部署 240 7.1 配置任意目录下的web应用程序 240 7.2 war文件 242 7.3 tomcat中servlet的另一种运行方式 244 7.4 与servlet...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    6.6.4 sendredirect()和forward()方法的区别 238 6.7 小结 239 第7章 web应用程序的部署 240 7.1 配置任意目录下的web应用程序 240 7.2 war文件 242 7.3 tomcat中servlet的另一种运行方式 244 7.4 与servlet...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    6.6.4 sendredirect()和forward()方法的区别 238 6.7 小结 239 第7章 web应用程序的部署 240 7.1 配置任意目录下的web应用程序 240 7.2 war文件 242 7.3 tomcat中servlet的另一种运行方式 244 7.4 与servlet...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    6.6.4 sendredirect()和forward()方法的区别 238 6.7 小结 239 第7章 web应用程序的部署 240 7.1 配置任意目录下的web应用程序 240 7.2 war文件 242 7.3 tomcat中servlet的另一种运行方式 244 7.4 与servlet...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    1.4. Seam 和jBPM:待办事项列表(todo list)示例..................................................................................................... 32 1.4.1. 理解代码....................................

Global site tag (gtag.js) - Google Analytics