1、簡介html
最初定義在JSTL1.0規範中,直到JSP2.0以後,EL表達式才正式成爲JSP規範中的一部分。java
EL表達式定義了一系列的隱式對象和操做符,使得開發人員可以更方便地訪問頁面上下文,以及不一樣做用域內的對象。web
EL語法以下:數組
${El表達式}
隱式對象 | 說明 |
pageContext | 當前頁面的pageContext對象 |
pageScope | 表示page 做用域 |
requestScope | 表示request 做用域 |
sessionScope | 表示session 做用域 |
applicationScope | 表示application 做用域 |
param | 接收Request 對象的參數(只有一個值) |
paramValues | 接收Request對象的參數(擁有多個值) |
header | HTTP 信息頭 |
headerValues | HTTP 信息頭值 |
cookie | Cookie值 |
initParam | 取得配置的初始化參數 |
1 . 做用域訪問對象瀏覽器
pageScope,requestScope,sessionScope,applicationScope變量用來訪問存儲在各個做用域層次的變量。cookie
實例1session
${pageScope.name}
若是EL表達式中不指定查找範圍,例如:app
${name}
Web容器將會自動按照page >> request >> session >> application的順序查找jsp
2 . 參數訪問對象函數
param和paramValues對象用來訪問頁面輸入參數,經過調用request.getParameter方法和request.getParameterValues方法,能夠獲得用戶的請求參數。
param對象用於獲得請求中單一名稱的參數;paramValue對象用於獲得請求中的多個值
實例1 ELSubmitParam.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action='ELParam.jsp' method='post'> 姓名:<input type='text' name='user' /><br /> 年齡:<input type='text' name='ages' /><br /> <label for='football'>足球</label><input type='checkbox' name='sport' id='football' value="football"/> <label for='swimming'>游泳</label><input type='checkbox' name='sport' id='swimming' value="swimming"/> <label for='run'>步行</label><input type='checkbox' name='sport' id='run' value="run"/><br /> <input type='submit' value='提交' /> </form> </body> </html>
實例2 ELParam.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ page isELIgnored="false"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% request.setCharacterEncoding("UTF-8"); %> <h2>用戶提交的參數</h2> <p>姓名 : ${param.user }</p> <p>年齡 : ${param.ages }</p> <p>運動 : ${paramValues.sport[0] } ${paramValues.sport[1] } ${paramValues.sport[2] }</p> </body> </html>
3 . 其餘隱式對象
(1)pageContext對象
pageContext對象是JSP中pageContext對象的引用。
實例1
${pageContext.request.property}取得請求的參數字符串 ${pageContext.request.requestURL} 取得請求的URL,不包括參數字符串 ${pageContext.request.contextPath} 服務的web application 的名稱 ${pageContext.request.method} 取得HTTP 的方法(GET、POST) ${pageContext.request.protocol} 取得使用的協議(HTTP/1.一、HTTP/1.0) ${pageContext.request.remoteUser} 取得用戶名稱 ${pageContext.request.remoteAddr} 取得用戶的IP 地址 ${pageContext.session.new} 判斷session 是否爲新的 ${pageContext.session.id} 取得session 的ID ${pageContext.servletContext.serverInfo} 取得主機端的服務信息
(2)header和headerValues對象
用來讀取請求的信息頭 。
實例1
${header["UserAgent"]} 獲取瀏覽器的版本信息
(3)cookie對象
讀取用戶請求中的cookie參數
實例1
${cookie.JSESSIONID.value }
(4)initParam對象
讀取設置在web.xml中配置的相關參數。等價於調用application.getInitParameter()或 servletContext.getInitParameter()方法。
EL表達式支持大部分Java所提供的算術和邏輯操做符:
. | 訪問一個Bean屬性或者一個映射條目 |
[] | 訪問一個數組或者鏈表的元素 |
( ) | 組織一個子表達式以改變優先級 |
+ | 加 |
- | 減或負 |
* | 乘 |
/ or div | 除 |
% or mod | 取模 |
== or eq | 測試是否相等 |
!= or ne | 測試是否不等 |
< or lt | 測試是否小於 |
> or gt | 測試是否大於 |
<= or le | 測試是否小於等於 |
>= or ge | 測試是否大於等於 |
&& or and | 測試邏輯與 |
|| or or | 測試邏輯或 |
! or not | 測試取反 |
empty | 測試是否空值 |
注意:
1 . EL表達式中的‘+’只有數學運算的功能,沒有鏈接符的功能,它會試着把運算符兩邊的操做數轉換爲數值類型,進而進行數學加法運算,最後把結果輸出。
2. empty 判斷EL表達式中的表達式是否爲空.
實例1
${empty sessionScope.user}
EL表達式語法容許開發人員開發並調用自定義函數,也能夠調用 JSTL函數(本篇筆記中不做詳細介紹)。
EL函數必須是一個public修飾的類,且EL表達式調用的方法必須是public修飾的且爲靜態方法。
EL自定義hsh開發步驟以下:
1 . 編寫調用自定義函數的類,編寫類中具體實現的靜態方法
實例1
package cn.iborder.elfn; public class ELfn { public static String elfn1(String name){ return "EL自定義函數"; } }
2 . 創建TLD文件,定義表達式函數
實例1
<?xml version="1.0" encoding="GBK"?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <!-- 定義函數版本 --> <tlib-version>1.0</tlib-version> <!-- 定義函數名稱 --> <short-name>el</short-name> <!-- 定義第一個函數 --> <function> <name>elfn</name> <function-class>cn.iborder.elfn.ELfn</function-class> <!-- 定義函數的對應方法 --> <function-signature> java.lang.String elfn() </function-signature> </function> </taglib>
3 . 在JSP頁面內導入而且使用
實例1
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page isELIgnored="false" %> <%@ taglib prefix="el" uri="/WEB-INF/elfn.tld" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>自定義EL函數</title> </head> <body> <h1>${el:elfn() }</h1> </body> </html>