7.3.1 内置对象与域对象
在处理EL表达式的标识符时,会先判断标识符是否为EL的内置对象,如果为EL的内置对象,则按内置对象来处理,如果不是EL内置对象,则会将表达式中的表示符当成域对象来处理。相当于pageContext.findAttribute方法返回域属性中的相应对象。如果标识符在域中未找到相应的对象,则什么都不会输出,也就是说返回结果为null。
表7.1列出了所有的EL内置对象及其作用。
表7.1 EL内置对象及其作用
内置对象 | 描述 |
pageScope | 表示page域中所有属性的Map对象 |
requestScope | 表示request域中所有属性的Map对象 |
sessionScope | 表示session域中所有属性的Map对象 |
applicationScope | 表示application域中的所有属性的Map对象 |
pageContext | 对应于JSP页面中的pageContext对象 |
param | 表示所有请求参数的Map对象。获得指定请求参数的值就是调用ServletRequest.getParameter方法返回该请求参数的值。 |
paramValues | 表示所有请求参数的Map对象。获得指定请求参数的值就是调用ServletRequest.getParameterValues方法来获得该请求参数值的String数组。也就是说,paramValues对象返回指定请求参数的值是一个String[]类型,而不是一个请求参数值。 |
header | 表示所有HTTP请求消息头字段的Map对象。获得指定消息头字段值就是调用HttpServletRequest.getHeader方法返回指定HTTP消息头字段的值。 |
headerValues | 表示所有HTTP请求消息头字段的Map对象。获得指定消息头字段值就是调用HttpServletRequest.getHeaders方法返回指定消息头字段值的String数组。 |
cookie | 表示所有Cookie信息的Map对象,其中Map对象的key表示Cookie的名称,Map对象的key表示Cookie的值。 |
initParam | 表示Web应用程序中的所有初始化参数的Map对象。获得指定初始化参数值就是调用ServletContext.getInitParameter方法返回的初始化参数值。 |
表7.1所示的11个EL内置对象中只有pageContext对象和JSP中的pageContext完全对应,其他10个内置对象都是Map对象。通过这10个对象只能访问相应的key-value对,并不能操作这些内置对象所对应的JSP内置对象的方法、属性。
如果EL表达式中的标识符和内置对象重名,系统会将该标识符当作EL内置对象处理。如下面的代码所示:
<!-- elobject.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setAttribute("requestScope", "myRequest");
request.setAttribute("pageContext1", "pageContext1");
session.setAttribute("pageContext", "pageContext");
%>
<!-- 下面两个EL表达式中的表示符被当成EL内置对象处理 -->
${requestScope}<br>
${pageContext}<br>
<!-- 下面的EL表达式中的表示域被当成域属性处理 -->
${pageContext1}
上面的JSP页面的运行结果如图7.2所示。
图7.2 按内置对象处理EL表达式中的标识符