From Gossip@caterpillar

JSP/Servlet: EL 隱含物件



在EL中提供有11個隱含物件,其中除了pageContext隱含物件是個JavaBean物件,對應於javax.servlet.jsp.PageContext型態之外,剩下的隱含物件都是對應於java.util.Map型態,所以使用EL隱含物件, 可以讓您以字典的方式來取值,例如users.get("Justin") 可以使用users["Justin"]的方式來取得字典"Justin"所對應的數值。

與作用範圍相關的EL隱含物件有pageScope、requestScope、sessionScope與 applicationScope,它們分別可以取得使用JSP隱含物件pageContext、request、session與 application的 setAttribute()方法所設定的屬性物件,如果不使用EL隱含物件指定作用範圍,則預設是取得pageScope的屬性。

如果要取得與使用者請求參數資料,則可以使用param或paramValues,舉例來說,${ param.user }其作用相當於<%= request.getParameter("user") %>,而paramValues則相當於request.getParameterValues(),可與取得表單多選項的值,由於傳回的是多個 值,您可以使用[]運算子來指定取得哪個元素,例如${ paramValues.hobbies[0] }。

如果要取得使用者請求的表頭資料,則可以使用header或headerValues隱含物件,例如${ header["User-Agent"] },headerValues則用來取得同一表頭所包括的多值,作用相當於request.getHeaders()方法。

cookie隱含物件可以用來取得使用者的Cookie設定值,雖然我們之前沒有說明過Cookie的使用,但是其使用方式類似於 session;如果您在Cookie中設定了username屬性,則可以使用${ cookie.username }來取得屬性值。

initParam可以用來取得JSP網頁在web.xml中設定的初始值,例如${ initParam.initCount } 的作用相當於<%= servletContext.getInitParameter("initCount") %>。

pageContext對應於javax.servlet.jsp.PageContext型態,您可以藉由PageContext來取得 request、response、session等物件,從而取得當中的相關訊息,只要是ServletContext中getXXX()方法,就可以 用${ pageContext.xxx }來取得,如果XXX物件有getYYY()方法,則可以用${ pageContext.xxx.yyy }來取得值,例如${ pageContext.request.remoteAddr }可以用來取得HttpServletRequest物件,並使用它的getRemoteAddr()方法來取得使用者的IP位址。