返回介绍

8.4 EL 隐式对象

发布于 2025-04-22 20:10:01 字数 6154 浏览 0 评论 0 收藏

在 JSP 页面中,可以利用 JSP 脚本来访问 JSP 隐式对象。但是,在免脚本的 JSP 页面中,则不可能访问这些隐式对象。EL 允许通过提供一组它自己的隐式对象来访问不同的对象。EL 隐式对象见表 8.1。

表 8.1 EL 隐式对象

对象

描述

pageContext

这是当前 JSP 的 javax.servlet.jsp.PageContext

initParam

这是一个包含所有环境初始化参数并用参数名作为 key 的 Map

param

这是一个包含所有请求参数并用参数名作为 key 的 Map。每个 key 的值就是指定名称的第一个参数值。因此,如果两个请求参数同名,则只有第一个能够利用 param 获取值。要想访问同名参数的所有参数值,可用 params 代替

paramValues

这是一个包含所有请求参数并用参数名作为 key 的 Map。每个 key 的值就是一个字符串数组,其中包含了指定参数名称的所有参数值。就算该参数只有一个值,它也仍然会返回一个带有一个元素的数组

header

这是一个包含请求标题并用标题名作为 key 的 Map。每个 key 的值就是指定标题名称的第一个标题。换句话说,如果一个标题的值不止一个,则只返回第一个值。要想获得多个值的标题,得用 headerValues 对象代替

headerValues

这是一个包含请求标题并用标题名作为 key 的 Map。每个 key 的值就是一个字符串数组,其中包含了指定标题名称的所有参数值。就算该标题只有一个值,它也仍然会返回一个带有一个元素的数组

cookie

这是一个包含了当前请求对象中所有 Cookie 对象的 Map。Cookie 名称就是 key 名称,并且每个 key 都映射到一个 Cookie 对象

applicationScope

这是一个包含了 ServletContext 对象中所有属性的 Map,并用属性名称作为 key

sessionScope

这是一个包含了 HttpSession 对象中所有属性的 Map,并用属性名称作为 key

requestScope

这是一个 Map,其中包含了当前 HttpServletRequest 对象中的所有属性,并用属性名称作为 key

pageScope

这是一个 Map,其中包含了全页面范围内的所有属性。属性名称就是 Map 的 key

下面逐个介绍这些对象。

8.4.1 pageContext

pageContext 对象表示当前 JSP 页面的 javax.servlet.jsp.PageContext。它包含了所有其他的 JSP 隐式对象,见表 8.2。

表 8.2 JSP 隐式对象

对象

EL 中的类型

request

javax.servlet.http.HttpServletRequest

response

javax.servlet.http.HttpServletResponse

out

javax.servlet.jsp.JspWriter

session

javax.servlet.http.HttpSession

application

javax.servlet.ServletContext

config

javax.servlet.ServletConfig

PageContext

javax.servlet.jsp.PageContext

page

javax.servlet.jsp.HttpJspPage

exception

java.lang.Throwable

例如,可以利用以下任意一个表达式来获取当前的 ServletRequest:

${pageContext.request}
${pageContext["request"]

并且,还可以利用以下任意一个表达式来获取请求方法:

${pageContext["request"]["method"]}
${pageContext["request"].method}
${pageContext.request["method"]}
${pageContext.request.method}

表 8.3 列出了 pageContext.request 中一些有用的属性。

表 8.3 pageContext.request 中一些有用的属性

属性

说明

characterEncoding

请求的字符编码

contentType

请求的 MIME 类型

locale

浏览器首先 locale

locales

所有 locale

protocol

HTTP 协议,例如:HTTP/1.1

remoteAddr

客户端 IP 地址

remoteHost

客户端 IP 地址或主机名

scheme

请求发送方案,HTTP 或 HTTPS

serverName

服务器主机名

serverPort

服务器端口

secure

请求是否通过安全链接传输

对请求参数的访问比对其他隐式对象更加频繁;因此,这里提供了 param 和 paramValues 两个隐式对象。

8.4.2 initParam

隐式对象 initParam 用于获取上下文参数的值。例如,为了获取名为 password 的上下文参数值,可以使用以下表达式:

${initParam.password}

或者

${initParam["password"]

8.4.3 param

隐式对象 param 用于获取请求参数值。这个对象表示一个包含所有请求参数的 Map。例如,要获取 userName 参数,可以使用以下任意一种表达式:

${param.userName}
${param["userName"]}

8.4.4 paramValues

利用隐式对象 paramValues 可以获取一个请求参数的多个值。这个对象表示一个包含所有请求参数,并以参数名称作为 key 的 Map。每个 key 的值是一个字符串数组,其中包含了指定参数名称的所有值。即使该参数只有一个值,它也仍然返回一个带有一个元素的数组。例如,为了获得 selectedOptions 参数的第一个值和第二个值,可以使用以下表达式:

${paramValues.selectedOptions[0]}
${paramValues.selectedOptions[1]}

8.4.5 header

隐式对象 header 表示一个包含所有请求标题的 Map。为了获取 header 值,要利用 header 名称作为 key。例如,为了获取 accept-language 这个 header 值,可以使用以下表达式:

${header["accept-language"]}

如果 header 名称是一个有效的 Java 变量名,如 connection,那么也可以使用.运算符:

${header.connection}

8.4.6 headerValues

隐式对象 headerValues 表示一个包含所有请求 head 并以 header 名称作为 key 的 Map。但是,与 head 不同的是,隐式对象 headerValues 返回的 Map 返回的是一个字符串数组。例如,为了获取标题 accept-language 的第一个值,要使用以下表达式:

${headerValues["accept-language"][0]}

8.4.7 cookie

隐式对象 cookie 可以用来获取一个 cookie。这个对象表示当前 HttpServletRequest 中所有 cookie 的值。例如,为了获取名为 jsessionid 的 cookie 值,要使用以下表达式:

${cookie.jsessionid.value}

为了获取 jsessionid cookie 的路径值,要使用以下表达式:

${cookie.jsessionid.path}

8.4.8 applicationScope、sessionScope、requestScope 和 pageScope

隐式对象 applicationScope 用于获取应用程序范围级变量的值。假如有一个应用程序范围级变量 myVar,就可以利用以下表达式来获取这个属性:

${applicationScope.myVar}

注意,在 servlet/JSP 编程中,有界对象是指在以下对象中作为属性的对象:PageContext、ServletRequest、HttpSession 或者 ServletContext。隐式对象 sessionScope、requestScope 和 pageScope 与 applicationScope 相似。但是,其范围分别为 session、request 和 page。

有界对象也可以通过没有范围的 EL 表达式获取。在这种情况下,JSP 容器将返回 PageContext、ServletRequest、HttpSession 或者 ServletContext 中第一个同名的对象。执行顺序是从最小范围(PageContext)到最大范围(ServletContext)。例如,以下表达式将返回 today 引用的任意范围的对象。

${today}

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。