7.3.1  内置对象与域对象

优质
小牛编辑
152浏览
2023-12-01

在处理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所示。

02

图7.2 按内置对象处理EL表达式中的标识符