為了能夠獲得Web應用中的是相關數據,EL提供了11個隱含對象,這些對象類似於JSP的內置對象,也是直接通過對象名進行操作。在EL的隱含對象中,除了PageContext是JavaBean對象,對應於javax.servlet.jsp.PageContext類型外,其他的隱含對象都對應於java.util.Map類型。這些隱含對象可以分為頁面上下文對象、訪問作用域范圍的隱含對象和訪問環境信息的隱含對象3種。下面分別進行詳細介紹。
頁面上下文對象為pageContext,用於訪問JSP內置對象(request/response/out/session/exception和page,但是不能用於獲取application/config/pageContext)和servletContext。在獲取到這些內置對象後,就可以獲取其屬性。這些屬性與對象的getXXX()方法相對應,在使用時,去掉方法名中的get,並將首字母改為小寫即可。
訪問request對象
通過pageContext獲取JSP內置對象中的request對象,可以使用以下語句:
${pageContext.request}
獲取到request對象後,就可以通過該對象獲取與客戶端相關的信息。例如:HTTP報頭信息、客戶信息提交方式、客戶端IP地址和端口號等。
范例:
要訪問getServerPort()方法,可以使用以下的代碼:
${pageContext.request.serverPort}
以上代碼將返回端口號。
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
${pageContext.request.serverName }
${pageContext.request.serverPort }
${pageContext.request.servletPath }
訪問response對象
通過pageContext獲取JSP內置對象中的response對象,可以使用下面的語句:
${pageContext.response}
范例:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
${pageContext.response.bufferSize }
${pageContext.response.characterEncoding }
訪問out對象
通過pageContext訪問out對象,使用以下語法:
${pageContext.out}
范例:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
${pageContext.out.bufferSize }
${pageContext.out.remaining}
訪問session對象
訪問session對象的語法格式為:
${pageContext.session}
范例:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
${pageContext.session.id }
訪問exception對象
通過pageContext獲取JSP內置對象的exception對象的語法個格式為:
${pageContext.exception}
范例:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
${pageContext.exception.localizedMessage }
訪問page對象
通過pageContext訪問page對象的語法格式為:
${pageContext.page}
范例:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
${pageContext.page.class }
訪問servletContext對象
語法格式如下:
${pageContext.servletComtext}
范例:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
${pageContext.servletContext.contextPath }
在EL中提供了4種用於訪問作用域范圍的隱含對象,即pageScope/requestScope/sessionScope/applicationScope。應用這4個隱含對象指定所要查找的標識符的作用域後,系統將不再按照默認的順序(page/request/session/application)來查找相應的標識符。他們與JSP中的page/request/session/application內置對象相似。不過,這4個隱含對象只能用於取得指定范圍內的屬性,而不能取得其他相關信息。
pageScope隱含對象
pageScope隱含對象用於返回包含page范圍的屬性值的集合,返回值為java.util.Map對象。
范例:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
${pageScope.user.name }
requestScope隱含對象
requestScope隱含對象用於返回包含request范圍內的屬性的集合。返回值為java.util.Map對象。
范例:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
${requestScope.user.name }
sesssionScope隱含對象
sessionScope隱含對象用於返回session范圍內的屬性值的集合。返回值為java.util.Map對象。
范例:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
${sessionScope.user.name }
applicationScope隱含對象
applicationScope隱含對象用於返回包含application范圍的屬性值的集合,返回值為java.util.Map對象
范例:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
${applicationScope.user.name }
在EL中提供了6個訪問環境信息的隱含對象。
param 對象用於獲取請求參數的值,應用在參數值只有一個的情況。在應用param對象時,返回的結果為字符串。
范例:
在JSP頁面中,放置一個名為user的文本框:
當表單提交後,要獲取name文本框的值,使用如下方式:
${param.name}
PS:
在name文本框中如果輸入了中文,那麼在使用EL輸出其內容的時候,要使用request.setCharacterEncoding(“GBK”);語句設置請求的編碼為支持中文的編碼,不然將出現亂碼。
如果一個請求參數名對應多個值,則需要使用paramValues對象獲取請求的參數值。在應用paramValues對象時,返回的結果是數組。
范例:
在JSP頁面中,放置一個名稱為affect的復選框。
登山
游泳
慢走
晨跑
當提交表單後,要獲取affect的值,可以使用下面的形式:
<%request.setCharacterEncoding(“UTF-8”);%>
愛好為:${paramValues.affect[0]}${paramValues.affect[1]}${paramValues.affect[2]}${paramValues.affect[3]}
在使用param和paramValues對象時,如果指定的參數不存在,則返回空字符串而不是返回null
header對象用於獲取HTTP請求的一個具體的header的值,但是在有些情況下,可能竄在同一個header擁有多個不同的值的情況,這就要使用到headerValues對象
范例:
要獲取HTTP請求的header的connection屬性,可以使用如下形式:
${header.connection}或者${header[“connection]}
但是,如果要獲取HTTP請求的header的user-agent屬性,則必須使用以下EL表達式:
${header[“user-agent”]}
initParam對象用於獲取Web應用的初始化參數的值
范例:
在Web應用的web.xml中設置一個初始化參數author,用於指定作者。
運用EL表達式獲取參數author:
${initParam.author}
F、cookie對象
在EL中沒有提供向cookie中保存值的方法,但是提供了訪問由請求設置的cookie方法,這可以通過cookie隱含對象來實現。如果在cookie中已經設定好了一個名稱為username的值,那麼可以通過${cookie.username}來獲取該cookie對象。如果要獲取cookie中的值,需要使用cookie對象的value屬性
范例:
使用response對象設置一個請求有效的cookie對象,然後在使用EL獲取該cookie對象的值,可以使用以下代碼:
<%
Cookie cookie=new Cookie(“user”,”zhangsan”);
response.addCookie(cookie);
%>
${cookie.user.value}