- 内容提要
- 作者简介
- 译者简介
- 前言
- HTTP
- Servlet 和 JSP
- 下载 Spring 或使用 STS 与 Maven/Gradle
- 手动下载 Spring
- 使用 STS 和 Maven/Gradle
- 下载 Spring 源码
- 本书内容简介
- 下载示例应用
- 第 1 章Spring 框架
- 第 2 章模型 2 和 MVC 模式
- 第 3 章Spring MVC 介绍
- 第 4 章基于注解的控制器
- 第 5 章数据绑定和表单标签库
- 第 6 章转换器和格式化
- 第 7 章验证器
- 第 8 章表达式语言
- 第 9 章JSTL
- 第 10 章国际化
- 第 11 章上传文件
- 第 12 章下载文件
- 第 13 章应用测试
- 附录 A Tomcat
- 附录 B Spring Tool Suite 和 Maven
- 附录 C Servlet
- 附录 D JavaServer Pages
- 附录 E 部署描述符
8.4 EL 隐式对象
在 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}
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论