EL表达式简介

EL 全名为Expression Language。

EL主要作用:

获取数据:

EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的java对象中获取数据。

执行运算:

利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。

获取web开发常用对象

EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。

调用Java方法

EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。

获取数据

使用EL表达式获取数据语法:“${标识符}”
EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回”” (注意,不是null,而是空字符串)。 EL表达式也可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据,例如:
${user.address.city}
${user.list[0]}:访问有序集合某个位置的元素
${map.key} : 获得map集合中指定key的值
结合JSTL的foreach标签,使用EL表达式也可以很轻松迭代各种类型的数组或集合,示例:
迭代数组
迭代collection类型集合
迭代map类型集合

下面就来演示一下:

User.java:

package cn.hncu.elWeb.domain;

public class User {
private String name;
private Integer age; public User() {
super();
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} @Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
} }

index.jsp:

<%@page import="cn.hncu.elWeb.domain.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head> <body>
<h2>演示El表达式技术---格式:${表达式}</h2>
<h2>注意,El表达式的功能:按从小到大的顺序依次从4个容器中读取数据(如果读到则后面的容器跳过)。</h2>
<h2>***数据必须要放入容器中</h2>
<%
pageContext.setAttribute("pageName", "page_Jack");
request.setAttribute("reqName", "req_Jack");
session.setAttribute("sessName", "sess_Jack");
application.setAttribute("appName", "app_Jack");
%>
${pageName}, ${reqName}, ${sessName}, ${appName} <hr/><br/>
<!-- 用EL表达式读取JavaBean中的信息,注意"表达式"是"属性名" -->
<%
User user = new User();
user.setName("张三");
user.setAge(25);
//注意!一定要把数据放入容器中
pageContext.setAttribute("u", user);
//这里为了区分下面的输出,特意用u来区分user,其实取user也是可以的
%>
${u}<br/>
${u.name},${u.age} <hr/><br/> <!-- 用EL表达式读取Map中的信息 -->
<%
Map<String,Object> map = new HashMap<String,Object>();
map.put("name", "Rose");
map.put("sex", "Female");
map.put("age", 25);
map.put("tel", "13812345678"); map.put("friend", user);
//一定要记得把数据放入容器中
request.setAttribute("m", map);
//这里为了演示下面的输出,特意用m来区分map,其实取map也是可以的
%>
${m.name},${m.sex},${m.age},${m.tel}<br/>
朋友的名字:${m.friend.name}<br/> <hr/><br/>
<!-- 用EL表达式读取List中的信息 -->
<%
List list = new ArrayList();
list.add("TOM");
list.add(user);
list.add(map);
session.setAttribute("list", list);
%>
${list[0]},${list[1].name}<br/>
朋友名字:${list[2].friend.name}<br/> </body>
</html>

演示结果:

EL表达式中的运算:

语法:${运算表达式},EL表达式支持如下运算符:

empty运算符:检查变量是否为null或“空”,这个很好用,最好熟记它!

二元表达式:${user!=null?user.name : “”} !

[ ] 和 . 号运算符。

运算示例

<!-- 演示El表达式中的运算 -->
1、可以使用算术运算符:+ - * / % 等<br/>
${u.age+10} 2、可以使用比较运算符:== != <= > >= 等<br/>
${u.name=="张三"}
<br/>
3、逻辑运算符:&& || !(非) 等<br/>
${u.name=="张三" && u.age>20 }
<br/>
4、条件运算符:即"?"号表达式<br/>
${u.name!="张三" ? 100 : 50 }
<br/>
5、empty 运算符:如果表达式的值为null 或者 不存在该变量(存在该变量,该变量是一个List或Map,但是其中不包含元素)
---这些返回的全部是true<br/>
${empty dkkkk} --- true 不存在这样的变量名<br/>
<%
List li = new ArrayList();
request.setAttribute("li", li);
%>
${empty li} --- true li中没有元素<br/>
${empty map} --- true 因为那个map取名是m <br/>
${empty m} --- false<br/>
${!empty m} --- true<br/>

演示结果:

获得web开发常用对象

EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据。

语法:${隐式对象名称} :获得对象的引用



测试各个隐式对象

注意事项

测试headerValues时,如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
测试cookie时,例${cookie.key}取的是cookie对象,如访问cookie的名称和值,须${cookie.key.name}或${cookie.key.value}

演示实例:

    <!-- 用EL表达式获取El表达式中的隐藏对象--EL表达式语言中定义了11个隐含对象 -->
<!-- 从指定的容器中读取数据 -->
${pageScope.u }----*${requestScope.u}*因为u是在page域中,request没有,所以是空(EL表达式不会输出null(除非值是null))!----${requestScope.m}----${sessionScope.list[0]}
<br/>
${header}<br/>
${header.host}---服务器端的IP和端口<br/>
${header.cookie}<br/>
JSESSIONID:${cookie.JSESSIONID}<br/> //取的是cookie对象--输出的是地址
name:${cookie.JSESSIONID.name}<br/>
value:${cookie.JSESSIONID.value}<br/>
<br/>
${param}<br/> //这里需要访问地址:http://localhost:8080/myElWeb/?name=Jack&age=21&age=23<br/>
${param.age}<br/>
${paramValues}<br/>
${paramValues.name[0]}<br/>
${paramValues.age[0]}<br/>
${paramValues.age[1]}<br/>

输入地址栏:http://localhost:8080/myElWeb/?name=Jack&age=21&age=23

演示结果:

El使用的综合示例

index.jsp:

<a href="${pageContext.request.contextPath}/ShowServlet">El使用的综合示例页面</a>

Car.java:

package cn.hncu.elWeb.domain;

public class Car {
private String name;
private String no;
private String color;
public Car() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return "Car [name=" + name + ", no=" + no + ", color=" + color + "]";
}
}

Person.java:

package cn.hncu.elWeb.domain;

import java.util.Arrays;

public class Person {

    private String id;
private String name;
private String pwd;
private Integer age; private Car cars[]; public Person() {
super();
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPwd() {
return pwd;
} public void setPwd(String pwd) {
this.pwd = pwd;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public Car[] getCars() {
return cars;
} public void setCars(Car[] cars) {
this.cars = cars;
} @Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", pwd=" + pwd
+ ", age=" + age + ", cars=" + Arrays.toString(cars) + "]";
} }

ShowServlet.java:

package cn.hncu.elWeb.servlet;

import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import cn.hncu.elWeb.domain.Car;
import cn.hncu.elWeb.domain.Person; public class ShowServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { Person p = new Person();
p.setId("P001");
p.setName("Jack");
p.setAge(24);
p.setPwd("123456"); Car cars[] = new Car[3];
for(int i=0;i<3;i++){
Car c = new Car();
c.setName("Car"+i);
c.setNo("No."+i);
c.setColor("RED");
cars[i]=c;
}
p.setCars(cars); request.setAttribute("p", p);
request.getRequestDispatcher("/jsps/show.jsp").forward(request, response);
} }

show.jsp:

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head> <body>
<h2>用户信息展示</h2>
工号:${p.id}<br/>
姓名:${p.name}<br/>
年龄:${p.age}<br/>
<hr/>
<h3>车辆信息</h3>
<table border="1">
<tr><th>车牌号</th> <th>车名</th> <th>颜色</th></tr>
<tr><td>${p.cars[0].no}</td> <td>${p.cars[0].name}</td> <td>${p.cars[0].color}</td></tr>
<tr><td>${p.cars[1].no}</td> <td>${p.cars[1].name}</td> <td>${p.cars[1].color}</td></tr>
<tr><td>${p.cars[2].no}</td> <td>${p.cars[2].name}</td> <td>${p.cars[2].color}</td></tr>
<!-- 其实这里用这种方式很不好的-变量个数全部写死了,我们可以用JSTL把这里写活,不过我们在这里不是演示那个技术的,为了简便突出EL重点,就这样写了 -->
</table>
</body>
</html>

演示结果:

Web---JSP-EL表达式的更多相关文章

  1. Jsp,EL表达式的入门

    Jsp,EL表达式的入门 *Servlet/JSP 是两种动态的WEB资源的两种技术 使用Servlet生成HTML的页面是可以的 response.getWriter("<form ...

  2. JSP EL表达式忽略方法

    JSP EL表达式忽略方法: web.xml中,和jsp中:jsp中的等级要高一些: web.xml: <?xml version="1.0" encoding=" ...

  3. jsp EL表达式和JSTL标签if-else if-else用法

    java web javaEE ,jsp EL表达式和JSTL标签if-else if-else四种用法一.条件运算符 ${user.gender==?'男':'女'} 二.if() <c:if ...

  4. jsp EL表达式 字符串的比较

    jsp EL表达式 字符串的比较 跟JavaScript一样,直接使用两个等于号即可:== 代码如下: <c:if test="${highLight == 'visa'}" ...

  5. JSP EL表达式 获得 request的GET/POST方法

    JSP EL表达式 获得 request的GET/POST方法: 不在requestScopse中: <p>得到request的方法</p> <p>pageCont ...

  6. JSP EL表达式 param、paramValues的使用

    JSP EL表达式 param.paramValues的使用: <%@ page language="java" import="java.util.*" ...

  7. JSP EL表达式使用

    JSP EL表达式使用: Servlet: package com.stono.servlet; import java.io.IOException; import java.util.HashMa ...

  8. 11 JSP/EL表达式/EL函数

    JSP      * 概述: JSP(Java Server Pages)与Java Servlet一样,是在服务器端执行的不同的是先由服务器编译部署成Servlet执行      * JSP的运行原 ...

  9. JSP EL表达式(转)

    一.EL简介 1.语法结构     ${expression}2.[]与.运算符     EL 提供.和[]两种运算符来存取数据.    当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字 ...

  10. JSP EL表达式

    1 EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数 ...

随机推荐

  1. 利用数据库链做DML操作时报ORA-02069: global_names parameter must be set to TRUE for this operation

    按照 http://space.itpub.net/195110/viewspace-711110 的说法顺利解决问题. 通过DBLink更新远程数据的时候,如果使用到本地的sequence.函数.过 ...

  2. WebLogic启动时报错

    java.lang.ClassCastException: com.octetstring.vde.backend.BackendRoot cannot be cast to com.octetstr ...

  3. PL/SQL — 隐式游标

    一.隐式游标的定义及其属性 定义 隐式游标由系统自动定义,非显示定义游标的DML语句即被赋予隐式游标属性.其过程由oracle控制,完全自动化.隐式游标的名称是SQL,不能对SQL游标显式地执行OPE ...

  4. 闲谈前端编码解码、C#编码解码。

    最近做项目,出现中文乱码的问题,特地研究一下. GB2312,指的是中文 UTF8,指的是国标,包含中文.英文. 但是通过JQuery.ajax的Get.Post,如果直接传递中文或者特殊字符的特使字 ...

  5. UML_时序图画法

    UML建模之时序图(Sequence Diagram) 一.时序图简介(Brief introduction) 二.时序图元素(Sequence Diagram Elements) 角色(Actor) ...

  6. js中构造字符串若放入Grails中gsp的<g:link>标签出错

    Grails的ajax使用json格式返回,在js中构造字符串时若放入<g:link>标签,字符串构造就会错误 如下就会发生错误,导致回调函数无法执行 function show(obj) ...

  7. 如何获取HttpServletResponse里面的内容

    背景:在SPRING 框架之中, 有一个服务端需要提供多种形态的服务,这里的多种形态只是返回值得展示形式(其实 数据内在逻辑完全一样), 比如: 形式1:   JSONP({“key1”: value ...

  8. Javascript实现打字效果

    伤感的 学期末 今天是这学期的最后一天,考完了最后一门数学,明天我们就要各自为自己的暑假打算打算了,所以趁着大家还没走一起出去打了打篮球,玩了玩轮滑,很累但是很开心,最大的感触莫过于忧伤额,明年我或许 ...

  9. 什么是 DevSecOps?系列(一)

    什么是 DevSecOps? 「DevSecOps」 的作用和意义建立在「每个人都对安全负责」的理念之上,其目标是在不影响安全需求的情况下快速的执行安全决策,将决策传递至拥有最高级别环境信息的人员. ...

  10. 练习PYTHON之EPOLL

    哟,哟,哟,,SELECT,EPOLL之类的,终于出现了. 不能太急了,要缓一缓,缓一缓,再缓一缓~~~~~~~~~ http://scotdoyle.com/python-epoll-howto.h ...