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時,例
${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;
}
}