EL表达式语言(一)
一、EL概述
1.1 EL的作用
EL是JSP内置的表达式语言。
JSP2.0要把html和css分离、要把html和javascript分离、要把Java脚本替换成标签。标签的好处是非Java人员都可以使用。
JSP2.0 – 纯标签页面,即:不包含<% … %>、<%! … %>,以及<%= … %>
EL(Expression Language)是一门表达式语言,它对应<%=…%>。我们知道在JSP中,表达式会被输出,所以EL表达式也会被输出。
1.2 EL的格式
格式:${ ... }
例如:${1+2}
1.3 关闭EL
如果希望整个JSP忽略EL表达式,需要在page指令中指定isELIgnored="true"
。
如果希望忽略某个EL表达式,可以在EL表达式之前添加“\”,例如:\${1 + 2}
。
1.4 EL运算符
1.5 EL不显示null
当EL表达式的值为null时,会在页面上显示空白,即什么都不显示。
二、JavaBean导航
我们通过一个示例,来演示通过EL语言进行JavaBean的导航。
首先新建一个Employee类,是标准的JavaBean格式:
public class Employee {
private String name;
private double salary;
private Address address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "Employee [name=" + name + ", salary=" + salary + ", address="
+ address + "]";
}
}
我们再新建一个Address类,也为JavaBean格式:
public class Address {
private String city;
private String street;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
@Override
public String toString() {
return "Address [city=" + city + ", street=" + street + "]";
}
}
我们新建一个jsp,关键代码如下:
<body>
<%
Address address = new Address();
address.setCity("beijing");
address.setStreet("xisanqi");
Employee emp = new Employee();
emp.setName("xxx");
emp.setSalary(23000);
emp.setAddress(address);
request.setAttribute("emp",emp);
%>
<h3>使用EL获取request域的emp</h3>
${requestScope.emp.address.street }
</body>
使用浏览器访问的结果:
三、EL表达式的格式
先来了解一下EL表达式的格式,我们在学习了EL11个内置对象后来演示。
- 操作List和数组:
${list[0]}
、${arr[0]}
; - 操作bean的属性:
${person.name}
、${person['name']}
,对应person.getName()
方法; - 操作Map的值:
${map.key}
、${map['key']}
,对应map.get(key)
。
四、EL内置对象
EL一共11个内置对象,无需创建即可以使用。这11个内置对象中有10个是Map类型的,最后一个是pageContext对象。
- pageScope
- requestScope
- sessionScope
- applicationScope
- param;
- paramValues;
- header;
- headerValues;
- initParam;
- cookie;
- pageContext;
4.1 域相关内置对象(重点)
域内置对象一共有四个:
- pageScope:
${pageScope.name}
等同与pageContext.getAttribute(“name”)
; - requestScope:
${requestScope.name}
等同与request.getAttribute(“name”)
; - sessionScope:
${sessionScope.name}
等同与session.getAttribute(“name”)
; - applicationScope:
${applicationScope.name}
等同与application.getAttribute(“name”)
;
如果在域中保存的是JavaBean对象,那么可以使用EL来访问JavaBean属性。因为EL只做读取操作,所以JavaBean一定要提供get方法,而set方法没有要求。
全域查找:${person}表示依次在pageScope、requesScopet、sessionScope、appliationScope四个域中查找名字为person的属性。
这四个对象的使用我们在前面的Javabean导航中已经做了演示。
4.2 请求参数相关内置对象
param和paramValues这两个内置对象是用来获取请求参数的。
- param:
Map<String,String>
类型,param对象可以用来获取参数,与request.getParameter()
方法相同。
注意,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。这一点与使用request.getParameter()
方法是不同的。
演示一下:
我们就在jsp中写这么一句,
打开浏览器访问这个jsp,另外附带上参数,我们看一下结果: - paramValues:paramValues是
Map<String, String[]>
类型,当一个参数名,对应多个参数值时可以使用它。
我们借用上面的例子,加上一句:
我们附带上新的参数,在浏览器里访问,看一下结果:
4.3 请求头相关内置对象
header和headerValues是与请求头相关的内置对象:
- header:
Map<String,String>
类型,用来获取请求头。
示例:
jsp代码:
访问浏览器: - headerValues:headerValues是
Map<String,String[]>
类型。当一个请求头名称,对应多个值时,使用该对象,这里就不在赘述。
4.4 应用初始化参数相关内置对象
- initParam:initParam是
Map<String,String>
类型。它对应web.xml文件中的<context-param>
参数。
例如:
我们在web.xml中加入这么两组参数:
我们在jsp中加入以下代码:
在浏览器中访问:
4.5 Cookie相关内置对象
- cookie:cookie是
Map<String,Cookie>
类型,其中key是Cookie的名字,而值是Cookie对象本身。
演示一下:
jsp:
浏览器访问一下:
4.6 pageContext对象
pageContext:pageContext是PageContext类型!可以使用pageContext对象调用getXXX()方法,例如pageContext.getRequest()
,可以${pageContext.request}
。也就是读取JavaBean属性!!!
EL表达式 | 说明 |
---|---|
${pageContext.request.queryString} | pageContext.getRequest().getQueryString(); |
${pageContext.request.requestURL} | pageContext.getRequest().getRequestURL(); |
${pageContext.request.contextPath} | pageContext.getRequest().getContextPath(); |
${pageContext.request.method} | pageContext.getRequest().getMethod(); |
${pageContext.request.protocol} | pageContext.getRequest().getProtocol(); |
${pageContext.request.remoteUser} | pageContext.getRequest().getRemoteUser(); |
${pageContext.request.remoteAddr} | pageContext.getRequest().getRemoteAddr(); |
${pageContext.session.new} | pageContext.getSession().isNew(); |
${pageContext.session.id} | pageContext.getSession().getId(); |
${pageContext.servletContext.serverInfo} | pageContext.getServletContext().getServerInfo(); |
还没有评论,来说两句吧...