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表达式的功能:从小到大的顺序从四个容器依次读取数据(读到一个就停止,注意的是数据一定要放在容器中)
EL表达式读取的是属性名,是将数据放入容器是给的属性名
如pageContext.setAttribute("u", user);
这是el表达式应该用${u }
而不是${user }
用el表达式读取map中的信息
一定要将数据放到容器中去
比如request.setAttribute("map", map);
<%
Map<String,Object> map = new HashMap<String , Object>();
map.put("name", "小米");
map.put("age", 25);
map.put("friend", user);
//一定要将数据放到容器中去
//request.setAttribute("map", map);
session.setAttribute("m", map);
%>
${m }<br/>
${m.name }的朋友:${m.friend }
用EL表达式读取List中的信息
读list是用数组形式读取的
<%
List list = new ArrayList();
list.add("aaa");
list.add(user);
list.add(map);
application.setAttribute("list", list);
%>
${list}<br/>
${list[0] }<br/>
${list[1].name }<br/>
${list[2].name }<br/>
演示EL表达式的运算
使用算术运算符
${u.age+10 }
使用比较运算符
${u.name=="张三" }
使用逻辑运算符
${u.name=="小明" && u.age>20 }
使用条件运算符
${u.age>20?"已经成年了":"还只是个孩子啊" }
使用empty运算符
如果表达式的值为null,或者不存在该变量,或者是一个list或是一个map,但是其中不包含元素 这些都返回true
${empty m } --false <br/>
${!empty map } --false<br/>
${empty map } --true
用EL表达式获取EL表达式中的隐藏对象–EL表达式语言中定义了11个隐含对象
隐含对象如图:
从指定的容器中读取数据
注意事项
测试headerValues时,如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
测试cookie时,例cookie.key取的是cookie对象,如访问cookie的名称和值,须{cookie.key.name}或${cookie.key.value}
${pageScope.u }<br/>
${requestScope.u }<br/>
${sessionScope.m }<br/>
${applicationScope.list }<br/>
${header }
<br/>
${header.cookie }
<br/>
${cookie }
<br/>
${cookie.JSESSIONID.value }
<br/>
${param } //演示访问地址带参数http://127.0.0.1:8080/elWeb_jun/?name=jack&age=26
<br/>
${param.age }
<br/>
${paramValues }
<br/>
${paramValues.name[0] }
<br/>
<br/>
演示el表达式的综合使用
<a href="${pageContext.request.contextPath }/jsps/aa.jsp">跳转到另一个页面</a>
<br/>
<br/>
<a href="${pageContext.request.contextPath }/ShowServlet">el表达式的一个综合实例</a>
两个<a>
标签的效果图如下:
本文完整代码如下:
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表达式的功能:从小到大的顺序从四个容器依次读取数据(读到一个就停止,注意的是数据一定要放在容器中)</h2>
<%
pageContext.setAttribute("page-name", "page-name");
request.setAttribute("requestname", "request-name");
session.setAttribute("sessionname", "session-name");
application.setAttribute("applicationname", "application-name");
%>
${page-name },${requestname },${sessionname },${applicationname }<br/>
<hr/>
<br/>
<br/>
<%
User user = new User();
user.setAge(25);
user.setName("小明");
pageContext.setAttribute("u", user);
%>
${u }
<br/>
<br/>
<h2>用el表达式读取map中的信息</h2>
<%
Map<String,Object> map = new HashMap<String , Object>();
map.put("name", "小米");
map.put("age", 25);
map.put("friend", user);
//一定要将数据放到容器中去
//request.setAttribute("map", map);
session.setAttribute("m", map);
%>
<!--el表达式读取的是属性名,即request.setAttribute的时候给的key就是后面el表达式的属性名 -->
<!-- 上面设置的是key是"m" 则下面EL表达式的属性名就是"m" 而不再是map -->
<!--${map} -->
${m }
<br/>
${m.name }的朋友:${m.friend }
<br/>
<hr/>
<br/>
<h2>用EL表达式读取List中的信息</h2>
<%
List list = new ArrayList();
list.add("aaa");
list.add(user);
list.add(map);
application.setAttribute("list", list);
%>
${list}<br/>
${list[0] }<br/>
${list[1].name }<br/>
${list[2].name }<br/>
<br/>
<br/>
<!--演示EL表达式的运算 -->
<h2>使用算术运算符</h2>
${u.age+10 }
<br/>
<h2>使用比较运算符</h2>
${u.name=="张三" }
<br/>
<h2>使用逻辑运算符</h2>
${u.name=="小明" && u.age>20 }
<br/>
<br/>
<h2>使用条件运算符</h2>
${u.age>20?"已经成年了":"还只是个孩子啊" }
<br/>
<h2>使用empty运算符</h2>
<!-- 如果表达式的值为null,或者不存在该变量,或者是一个list或是一个map,但是其中不包含元素 这些都返回true -->
${empty m } --false <br/>
${!empty map } --false<br/>
${empty map } --true
<br/>
<hr/>
<br/>
<br/>
<!-- 用EL表达式获取EL表达式中的隐藏对象--EL表达式语言中定义了11个隐含对象 -->
<!-- 从指定的容器中读取数据 -->
${pageScope.u }<br/>
${requestScope.u }<br/>
${sessionScope.m }<br/>
${applicationScope.list }<br/>
<br/>
<br/>
${header }
<br/>
${header.cookie }
<br/>
${cookie }
<br/>
${cookie.JSESSIONID.value }
<br/>
${param } //演示访问地址带参数http://127.0.0.1:8080/elWeb_jun/?name=jack&age=26
<br/>
${param.age }
<br/>
${paramValues }
<br/>
${paramValues.name[0] }
<br/>
<br/>
<a href="${pageContext.request.contextPath }/jsps/aa.jsp">跳转到另一个页面</a>
<br/>
<br/>
<a href="${pageContext.request.contextPath }/ShowServlet">el表达式的一个综合实例</a>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
</body>
</html>
aa.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>aa.jsp页面</h2>
<a href = "${pageContext.request.contextPath }/index.jsp">返回主页</a>
<!--上面的index.jsp加不加无所谓,因为都是主页,在xml中设置了欢迎页面就是index.jsp -->
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
</body>
</html>
show.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>
<h1>show.jsp页面</h1>
<h2>用户信息展示页面</h2>
编号:${p.id }<br/>
姓名:${p.name }<br/>
年龄:${p.age }<br/>
<h3>车辆信息展示</h3>
<table>
<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>
</table>
</body>
</html>
ShowServlet
package cn.hncu.elWeb.servlet;
import java.awt.Color;
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 {
Person p = new Person();
p.setAge(25);
p.setId("A0001");
p.setName("小米");
p.setPwd("123456789");
Car[] cars = new Car[3];
for (int i = 0; i < cars.length; 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);
}
}
cn.hncu.elWeb.domain.Car
package cn.hncu.elWeb.domain;
public class Car {
private String name ;
private String no;
private String color;
public Car() {
}
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;
}
}
cn.hncu.elWeb.domain.User
package cn.hncu.elWeb.domain;
public class User {
private String name;
private Integer age;
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 + "]";
}
}
cn.hncu.elWeb.domain.Person
package cn.hncu.elWeb.domain;
public class Person {
private String name ;
private String id;
private String pwd;
private Integer age;
private Car cars[];
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
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;
}
}