java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要介绍了 EL 表达式的隐式对象,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
在使用 EL 时,其实 EL 是先看标识符是否是其隐式对象之一,如果不是,才从四个域 (page、request、session、application) 中顺序搜索(使用 pageContext.findAttribute 方法)。
EL 总共有如下隐式对象:
而这里,EL 和 JSP 一样拥有 pageContext 对象,通过在 EL 中使用 pageContext 对象,能获取 JSP 中其它几个隐式对象,然后再获得这些对象中的属性。例如获取当前 web 工程的名称的经典 EL 表达式:${pageContext.request.contextPath},就是由 pageContext 先获取 request 对象 (因为在 JSP 的 API 中,我们可以看到 pageContext 有 getRequest 方法),获取到 request 对象后,因为 request 中含有 getContextPath 方法,因此我们还可以获得 request 对象中 contextPath 属性的值。
pageScope、requestScope、sessionScope、applicationScope 这四个 EL 隐式对象分别代表了各自域中的 Map 对象 (每个域以关键字来保存数据或对象,肯定是使用 Map 集合),这 Map 对象保存了存在这些域中的键值对。通过 EL 表达式和这些隐式对象,我们可以直接从指定的域中获取存储的数据。
例 1:
- <%
- User u = new User();
- u.setUsername("fjdingsd");
- session.setAttribute("user", u);
- %>
- 欢迎您:${sessionScope.user.username}
在浏览器中观察:
对于用户登录这样的案例来说,我们检查用户是否登录肯定只需要从 session 域中查询,这样使用 EL 表达式的 sessionScope 隐式对象就足够了。
param 隐式对象:表示所有请求参数的 Map 集合对象。例如表单提交,那么在请求参数中的数据就以键值对存储在 param 对象所代表的 Map 集合中,下面的例子我以 get 方式来替代 post 方式来模拟表单请求参数:
例 2:
${param.username}
在地址栏上添加 URL 参数,可以看到:
使用 param 隐式对象同样也能作为数据回显功能,在以前 JSP 页面提交的表单如果想做出数据回显功能,必须创建一个 form 的 bean 对象,当表单校验失败时,重新将这个 bean 对象通过转发 (forward) 传回 JSP 页面再取出。而使用 param 对象,不需要新建 form 的 bean 对象,只需要在表单校验失败时转发回表单所在的 JSP 页面,通过 param 对象就可以从请求中取出之前的表单数据。
例 3:表单验证失败的数据回显 demo
在 JSP 页面 beantag.jsp 中:
- <form action="${pageContext.request.contextPath}/servlet/FormHandler" method="post">
- 用户名 <input type="text" name="username" value="${param.username}" />
- <input type="submit" value="提交" >
- </form>
在处理表单的 Servlet 中:
- //省略表单验证过程,验证失败重新转发到表单页面
- request.getRequestDispatcher("/beantag.jsp").forward(request, response);
刚进入表单注册页面:
假设表单验证失败,则转发请求到表单注册页面,并回显数据:
paramValues 隐式对象:也是表示一个保存所有的请求参数的 Map 集合对象,但是 paramValues 对象和 param 对象的区别是,对任何一个参数,paramValues 都是以字符串数组 (String[]) 作为保存数据的类型,因此 paramValues 对象适合在有同名参数的情况下使用。
例 4:
- ${paramValues.name[0]}
浏览器中观察:
例 5:
- ${paramValues.name[1]}
浏览器中观察:
header 隐式对象:表示一个保存了该 JSP 页面发出请求的请求头字段的 Map 集合对象。
注意:这个对象只能获取请求头字段的信息,不能获取响应头字段的信息。另外如果头字段中含有小横线的 "-",例如 "Accept-Encoding",则要使用中括号加引号的 EL 取数据形式,例如 ${header['accept-encoding']}。
例 6:
- ${header.connection}
在浏览器中观察:
例 7:
- ${header['accept-encoding']}
在浏览器中观察:
headerValues 隐式对象功能类似于 header 隐式对象,但以字符串数组封装每个保存的请求头字段信息,这点跟 paramValues 隐式对象是一样的。
cookie 隐式对象:表示一个保存了该请求中所有的 Cookie 的 Map 集合对象。
假设在请求中有一个 cookie,cookie 的键值对为:
- JSESSIONID = E9546AE9C86FB722BDBD7AF947157379
例 8:
- ${cookie.JSESSIONID}
在浏览器中观察:
可以看到,cookie 隐式对象的名称 (cookie) 是 Map 集合的名称,而在这个 Map 集合中,有一个键值对的 key 命名为 JSESSIONID,而通过 ${cookie.JSESSIONID}获取到的是一个 Cookie 对象,那么我们如何获取该 Cookie 的值呢?
之前说过 EL 表达式都是通过对象的具有的属性来获取属性值,能被称为属性的都有 getXXX 方法,而 Cookie 正是具有 getName() 方法和 getValue() 方法,因此在 EL 表达式中获取了 Cookie 对象后可以再获取这两个属性:
例 9:
- ${cookie.JSESSIONID.name} <br>
- ${cookie.JSESSIONID.value} <br>
在浏览器中观察:
initParam 隐式对象:表示一个保存了所有 web 应用初始化参数 (context-param) 的 Map 集合对象。
而在 JSP 页面中,我们可以同 EL 表达式的 initParam 方法来获取为 web 应用配置的全局性参数。
例 10:
在 web.xml 文件中配置:
- <context-param>
- <param-name>username</param-name>
- <param-value>fjdingsd</param-value>
- </context-param>
在 JSP 页面中:
- ${initParam.username }
在浏览器中观察:
来源: http://www.phperz.com/article/18/0102/356273.html