EL:Expression Language
EL是为了设计不含java代码的JSP页面而生,在JSP2.0及以上的版本就可以不需要实用JSTL就可以使用EL
1,EL语法
EL表达式: ${ expression}
例如: ${a+b}${x+y}
<my: tag someAttribute="${expression}"/>
可以通过[] 与 . 运算符来访问某个对象的属性
例如:${object["propertyName"]}
${object.propertyName}
注意:如果propertyName不是有效的java变量名称,则只能用 [] 运算符
2,访问javaBean
例如:${beanName["propertyName"]}
${beanName.propertyName}
3,EL的隐性对象
pageContext对象表示当前JSP页面的javax.sservlet.jsp.PageContext.它包含所有的其他JSP隐性对象
例如: ${pageContext.request}
${pageContext.response}
initParam对象用于获取一个context参数值
例如:${initParam.password}
param对象用于获取一个请求参数。这个对象表示一个包含所有请求参数的Map
例如:${param.userName}
paramValues对象可以获取一个请求参数的多个值。这个对象表示一个包含所有请求参数并以参数名称作为键
的Map,返回的Map返回的是一个字符串数组
例如:${paramValues.selectedOptions[0]}
${paramValues.selectesOptions[1]}
header对象表示一个包含所有请求标头的Map
headerValues对象一个包含所有请求标头的Map,返回的Map返回的是一个字符串数组
例如:获取accept-language标头的值
${header["accept-language"]}
cookie对象可以获取一个cookie
例如:要获取名为jsessionid的cookie值,需使用
${cookie.jsessionid.value}
applocationScope,sessionScope,requestScope,pageScope对象分别获取范围为:全局,session,request,page
${today}将从最小范围开始搜索,返回第一次识别到的指定对象
4,EL运算符
算术运算符: * / % + - 优先级从高到低,并且从左到右进行
关系运算符: == != > <
逻辑运算符: && || !
条件运算符: ${statement? A:B}
empty运算符: 用来检验一个值是否为空
${empty X}
如果X为一个长度为0的字符串,或者一个空的Map,空数组,空集合,返回true,否则返回false
下面通过一个实例
EmployeeServlet创建了必要的对象,并将他们放到servletRequest中。之后,
Servlet利用一个RequestDispather跳转到employee.jsp页面
package el;
public class Address {
private String streetName;
private String streetNumber;
private String city;
private String state;
private String zipCode;
private String country;
public String getStreetName() {
return streetName;
}
public void setStreetName(String streetName) {
this.streetName = streetName;
}
public String getStreetNumber() {
return streetNumber;
}
public void setStreetNumber(String streetNumber) {
this.streetNumber = streetNumber;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getZipCode() {
return zipCode;
}
public void setZipCode(String zipCode) {
this.zipCode = zipCode;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public class Employee {
private int id;
private String name;
private Address address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
import java.util.Map;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns={"/employee"})
public class EmployeeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
Address address=new Address();
address.setStreetName("Rue D'Anjou");
address.setStreetNumber("5090B");
address.setCity("Guangzhou");
address.setState("Quebec");
address.setZipCode("A1A B2B");
address.setCountry("China");
Employee employee=new Employee();
employee.setId(1099);
employee.setName("Charles Unjeye");
employee.setAddress(address);
req.setAttribute("employee", employee);
Map<String, String> capitals=new HashMap<String, String>();
capitals.put("China", "Beijing");
capitals.put("Austria", "Vienna");
capitals.put("Australia", "Canberra");
capitals.put("Cannada", "Ottawa");
req.setAttribute("capitals", capitals);
RequestDispatcher rd=req.getRequestDispatcher("/employee.jsp");
rd.forward(req, resp);
}
}
运行结果:
accept-language: zh-CN,zh;q=0.8
session id: 4DE7C385AA790AA138BACB20A1D0A5E4
employee: Charles Unjeye,Guangzhou
capital: Beijing