什麼是EL表達式?
Expression Language(表達式語言)。
EL表達式能幹什麼?
替代JSP頁面中數據訪問時的複雜編碼,簡化開發,讓JSP代碼更加簡潔。
如何使用?
基本語法:${expression}
如果不實用EL表達式,JSP頁面獲取後臺傳來的數據,需要通過Java腳本的方式獲取:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% String message = (String)request.getAttribute("message"); %> <%=message %> </body> </html>
使用EL表達式之後,可大大簡化這種繁瑣的開發方式,讓JSP頁面更加簡潔。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> ${message } </body> </html>
${message}中的message對應域對象中數據的key值,那麼問題來了,域對象有4種,如果每一個域對象中都存放一個key=message的數據,那麼EL表達式取的是哪個呢?
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% pageContext.setAttribute("message", "page"); request.setAttribute("message", "request"); session.setAttribute("message", "session"); application.setAttribute("message", "application"); %> ${message } </body> </html>
結果如圖:
可以看到取的是pageContext中的數據,EL表達式默認取數據的方式是根據pageContext->request->session->application的順序進行,如果在某個域對象中獲取了數據,則返回,不再繼續查找,如果沒有找到,繼續來到下一個域對象中查找,直到遍歷完4個域對象。
我們也可以指定EL在某個特定的域對象中查找,只需要在EL表達式中添加前綴即可:pageScope,requestScope,sessionScope,applicationScope,分別對於page作用域,request作用域,session作用域,application作用域。
比如,指定EL在request中查找。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% pageContext.setAttribute("message", "page"); request.setAttribute("message", "request"); session.setAttribute("message", "session"); application.setAttribute("message", "application"); %> ${requestScope.message } </body> </html>
EL取對象的屬性值
EL表達式可以直接通過屬性名取出對應的值,底層實際在調用getter方法。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.southwind.entity.Reader" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% Reader reader = new Reader(); reader.setId(1); reader.setName("張三"); request.setAttribute("reader", reader); %> ${reader.id }--${reader.name } </body> </html>
EL表達式獲取集合
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.southwind.entity.Reader" %> <%@ page import="java.util.*" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% Reader reader = new Reader(); reader.setId(1); reader.setName("張三"); Reader reader2 = new Reader(); reader2.setId(2); reader2.setName("李四"); Reader reader3 = new Reader(); reader3.setId(3); reader3.setName("王五"); List<Reader> list = new ArrayList<Reader>(); list.add(reader); list.add(reader2); list.add(reader3); request.setAttribute("list", list); %> ${list[0].id }--${list[0].name }<br/> ${list[1].id }--${list[1].name }<br/> ${list[2].id }--${list[2].name }<br/> </body> </html>
EL表達式支持關係運算符和邏輯運算符
運算符可以使用轉義字符來表示:
&&:and
||:or
!:not
==:eq
!=:ne
<:lt
>:gt
<=:le
>=:ge
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.southwind.entity.Reader" %> <%@ page import="java.util.*" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% request.setAttribute("num1", 8); request.setAttribute("num2", 9); request.setAttribute("num3", 9); %> ${ num1 < num2 }<br/> ${ num1 lt num2 }<br/> ${ num1 > num2 }<br/> ${ num1 gt num2 }<br/> ${ num2 == num3 }<br/> ${ num2 eq num3 }<br/> ${ num1 < num2 && num1 > num2 }<br/> ${ num1 < num2 and num1 > num2 }<br/> ${ num1 < num2 || num1 > num2 }<br/> ${ num1 < num2 or num1 > num2 }<br/> </body> </html>
關鍵字empty判斷變量是否爲空
null,長度爲零的String,size爲0的集合都會認爲是空。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.southwind.entity.Reader" %> <%@ page import="java.util.*" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% Integer num = null; String str = ""; List<String> list = new ArrayList<String>(); request.setAttribute("num", num); request.setAttribute("str", str); request.setAttribute("list", list); %> ${ empty num }<br/> ${ empty str }<br/> ${ empty list }<br/> </body> </html>
EL訪問http請求參數對象
添加param前綴即可。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.southwind.entity.Reader" %> <%@ page import="java.util.*" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> ${param.id } </body> </html>
如果是多個參數,通過paramValues來獲取。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.southwind.entity.Reader" %> <%@ page import="java.util.*" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> ${paramValues.id[0] }<br/> ${paramValues.id[1] }<br/> ${paramValues.id[2] } </body> </html>
EL訪問pageContext對象
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.southwind.entity.Reader" %> <%@ page import="java.util.*" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> ${pageContext.servletConfig.servletName}<br/> ${pageContext.servletContext.contextPath}<br/> ${pageContext.request} </body> </html>