EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本的编写。
语法:
${expr}
使用EL表达式获取作用域数据:
获取的是pageContext、request、session、application四个对象中的数据,其他数据一概不理会。找到了则获取返回,找不到则什么都不做,也不报错。
获取请求数据:
request对象存储了请求数据---->param.键名 返回值
request对象存储了请求数据---->paramvalues.键名 返回数组
获取自定义数据(setAttribute()放进去的):
${键名} 返回键名所对应的值
作用域查找顺序:
<%
request.setAttribute("str", "hello world");
%>
<%-- 取出普通字符串 --%>
<b>${str }b>
创建Adress类和User类:
package pers.zhang.pojo;
public class Address {
private String pre;
private String city;
private String town;
public String getPre() {
return pre;
}
public void setPre(String pre) {
this.pre = pre;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getTown() {
return town;
}
public void setTown(String town) {
this.town = town;
}
public Address(String pre, String city, String town) {
super();
this.pre = pre;
this.city = city;
this.town = town;
}
public Address() {
super();
}
@Override
public String toString() {
return "Address [pre=" + pre + ", city=" + city + ", town=" + town + "]";
}
}
package pers.zhang.pojo;
public class User {
private int uid;
private String uname;
private String fav;
private Address addr;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getFav() {
return fav;
}
public void setFav(String fav) {
this.fav = fav;
}
public Address getAddr() {
return addr;
}
public void setAddr(Address addr) {
this.addr = addr;
}
public User(int uid, String uname, String fav, Address addr) {
super();
this.uid = uid;
this.uname = uname;
this.fav = fav;
this.addr = addr;
}
public User() {
super();
}
@Override
public String toString() {
return "User [uid=" + uid + ", uname=" + uname + ", fav=" + fav + ", addr=" + addr + "]";
}
}
<%
Address addr = new Address("河南", "商丘", "虞城县");
User u = new User(1,"张三","足球",addr);
request.setAttribute("user", u);
%>
<%-- 取出对象 --%>
<b>${user }b><br/>
<b>${user.uname }b><br/>
<b>${user.addr }b><br/>
<b>${user.addr.city }b><br/>
<%
Address addr1 = new Address("河南1", "商丘1", "虞城县1");
Address addr2 = new Address("河南2", "商丘2", "虞城县2");
Address addr3 = new Address("河南3", "商丘3", "虞城县3");
List<Address> list = new ArrayList();
list.add(addr1);
list.add(addr2);
list.add(addr3);
request.setAttribute("list", list);
%>
<%-- 取出list --%>
<b>${list}b><br/>
<b>${list[0] }b><br/>
<b>${list[0].city }b><br/>
<b>${list[1].town}b><br/>
<%
Address addr = new Address("河南1", "商丘", "虞城县");
User u = new User(1, "小黑", "中国足球", addr);
Map<String, User> map = new HashMap<String, User>();
map.put("user", u);
request.setAttribute("map", map);
%>
<%-- 取出map --%>
<b>${map}b><br/>
<b>${map.user}b><br/>
<b>${map.user.uname}b><br/>
<b>${map.user.addr.city}b><br/>
页面显示:
### EL隐含对象
EL支持下表列出的隐含对象
隐含对象 | 描述 |
---|---|
pageScope | page作用域 |
requestScope | request作用域 |
sessionScope | session作用域 |
applicationScope | application作用域 |
param | Request对象的参数,字符串 |
paramValues | Request对象的参数,字符串集合 |
header | HTTP信息头,字符串 |
headerValues | HTTP信息头,字符串集合 |
initParam | 上下文初始化参数 |
cookie | Cookie值 |
pageContext | 当前页面的pageContext |
pageScope,requestScope,sessionScope,applicationScope
获取JSP中域中的数据
param,paramValues
接收参数,相当于request.getParameter() rrquest.getParameterValues()
header,headerValues
获取请求头信息,相当于request.getHeader(name)
initParam
获取全局初始化参数,相当于this.getServletContext().getInitParameter(name)
cookie
WEB开发中cookie,相当于request.getCookies()—cookie.getName()—cookie.getValue()
pageContext
WEB开发中的pageContext,pageContext获得其他八大对象
${pageContext.request.contextPath}
获取Web应用名称
EL表达式支持大部分Java所提供的算数和逻辑操作符:
操作符 | 描述 |
---|---|
. | 访问一个属性或者一个映射条目 |
[] | 访问一个数组或者链表元素 |
() | 组织一个子表达式以改变优先级 |
+ | 加 |
- | 减或负 |
* | 乘 |
/ or div | 除 |
% or mod | 取模 |
== or eq | 测试是否相等 |
!= or ne | 测试是否不等 |
< or lt | 测试是否小于 |
> or gt | 测试是否大于 |
<= or le | 测试是否小于等于 |
>= or ge | 测试是否大于等于 |
&& or and | 测试逻辑与 |
or or | |
!or not | 测试取反 |
empty | 测试是否空值 |
<%
User u = new User();
request.setAttribute("user", u);
request.setAttribute("value", null);
%>
<h3>EL表达式的逻辑运算h3>
${a + b}--${1 + 2}--${1 * 2}--${4 / 2}--${4 - 2}--${4 % 3}--${4 == 4}--${4 > 2}--${1 == 1 ? '男':'女'}<br/>
<%-- 注意: +表示加法运算,不表示字符链接。使用EL表达式进行字符链接会报错。 --%>
<%-- 自动转换为数字 --%>>
${1 + "2"}
<h3>EL表达式的空值判断h3>
<%-- --%>
<b>${empty user}b><br/>
<b>${empty value}b>