文档章节

[Java] 146.EL表达式的11个内置对象

嘻哈开发者
 嘻哈开发者
发布于 2017/04/09 11:11
字数 2293
阅读 11
收藏 0

我们知道jsp有九个内置对象,而EL表达式有11个对象,这些内置对象无需创建可直接使用。今天我们就来学习EL表达式的11个内置对象。11个内置对象如下所示:

  • pageScope
  • requestScope
  • sessionScope
  • applicationScope
  • param;
  • paramValues;
  • header;
  • headerValues;
  • initParam;
  • cookie;
  • pageContext;

其中,pageScope,requestScope,sessionScope,applicationScope是域相关的内置对象,这里我们就不再多说。这11个内置对象中,有10个内置对象的类型是Map类型,只有pageContext的类型不是Map类型,它的类型是PageContext。下面我们来一一介绍其他的内置对象,如下:

请求参数相关内置对象

请求参数相关的内置对象是:

  • param:该内置对象的类型是Map<String,String>,可以用来获取值为单值的请求参数,其中key指的是请求参数的名称,value指的是请求参数的值,使用param获取请求参数与request.getParameter()方法一样。
  • paramValues:该内置对象的类型是Map<String,String[]>,可以用来获取值为多值的请求参数,其中key是参数名,value是多个参数值组成的字符串数组。

注意,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。这一点与使用request.getParameter()方法是不同的。

下面通过一个小例子来掌握这两个内置对象的使用,如下所示:

(1)创建一个web工程,Example7,在该应用的WebRoot目录下新建一个目录:params,然后在该目录下新建一个params.jsp页面,主要代码如例1-1所示:

例1-1 params.jsp

  1. <body>
  2.     <%-- map.key这是el的语法!
  3.     map['key']也可以操作map
  4.      --%>
  5. ${param.username }<br/>
  6. </body>
  7.  

复制代码

EL表达式操作map的语法是${map.key},或${map[‘key’]}。

(2)将Example7发布到服务器,然后启动服务器,在浏览器端访问:http://localhost:8080/Example7/params/params.jsp?username=zhangsan,浏览器显示结果如图1-1所示:

 

图1-1 浏览器显示结果

由图1-1可知,使用${param.username}成功的将请求参数的值获取到了。

(3)如果在浏览器端访问时发送了一个多值的请求参数给服务器,在params.jsp页面中使用paramValues内置对象获取,params.jsp页面内容如例1-2所示:

  1. <body>
  2. ${param.username }<br/>
  3. ${paramValues.hobby }<br/>
  4. </body>
  5.  

复制代码

(4)在浏览器端访问:http://localhost:8080/Example7/params/params.jsp?username=zhangsan&hobby=sw& hobby=sj,浏览器显示结果如图1-2所示:

 

图1-2 浏览器显示结果

现在如果希望将数组中的元素使用el表达式输出在浏览器端,el表达式的格式为:${map.key[索引值]}。

(5)修改params.jsp页面,如例1-3所示:

  1. <body>
  2. ${param.username }<br/>
  3. ${paramValues.hobby[0] }<br/>
  4. ${paramValues.hobby[1] }<br/>
  5. </body>
  6.  

复制代码

(6)再次访问params.jsp,访问路径为:http://localhost:8080/Example7/params/params.jsp?username=

zhangsan& hobby=sw& hobby=sj,浏览器显示的结果如图1-3所示:

 

图1-3 浏览器显示结果

请求头相关内置对象

与请求头相关的内置对象是:

  • header:该内置对象的类型是Map<String,String>,用来获取值为单值的请求头信息,其中key代表的是请求头名称,value代表的是请求头的值;
  • headerValues:该内置对象的类型是Map<String,String[]>,用来获取值为多值的请求头信息,key代表的是请求头名称,value代表的是请求头的多个值。

下面通过一个小例子来学习如何使用这两个内置对象获取请求头信息,如下所示:

(1)在Example7的WebRoot目录下新建一个目录header,然后再该目录下新建一个header.jsp页面,主要代码如例1-4所示:

例1-4 header.jsp

  1. <body>
  2. ${header['User-Agent']}
  3. </body>
  4.  

复制代码

例1-4中,请求头:User-Agent的名字中有一个特殊字符“-“,因此我们获取这个请求头的值时,el表达式需要写成“${map[‘key’]}”。

(2)在浏览器端访问:http://localhost:8080/Example7/header/header.jsp,浏览器端显示结果如图1-4所示:

 

图1-4 浏览器显示结果

由图1-4可知,使用${header['User-Agent']}成功的获取到请求头的值。至于headerValues内置对象这里就不再演示,因为在以后的开发中很少在页面中使用el表达式获取请求头的信息。

初始化参数相关内置对象

我们再学习Servlet时,讲过在web.xml文件中配置全局初始化参数,并且全局初始化参数可以使用ServletContext对象获取,现在在EL表达式中内置了一个与初始化参数相关的对象:

  • initParam:该内置对象的类型是Map<String,String>,用来获取web.xml文件中<context-param>标签的参数值,其中key代表的是参数名,value代表的是参数值。

下面通过一个小例子来学习如何使用initParam内置对象获取全局初始化参数,如下所示:

(1)对Example7应用下的web.xml文件进行编辑,添加全局初始化参数,主要如例1-5所示:

例1-5 web.xml

  1. <context-param>
  2. <param-name>name</param-name>
  3. <param-value>itcast</param-value>
  4. </context-param>
  5. <context-param>
  6. <param-name>address</param-name>
  7. <param-value>beijing</param-value>
  8. </context-param>
  9.  

复制代码

(2)在Example7的WebRoot目录下新建一个目录initParam,然后再该目录下新建一个initParam.jsp页面,页面的主要代码如例1-6所示:

例1-6 initParam.jsp

  1. <body>
  2. ${initParam.name }
  3. ${initParam.address }
  4. </body>
  5.  

复制代码

(3)在浏览器端访问:http://localhost:8080/Example7/initParam/initParam.jsp,浏览器显示结果如图1-5所示:

 

图1-5 浏览器显示结果

Cookie相关内置对象

EL表达式也内置一个名为cookie的对象,该内置对象与cookie相关,如下:

  • cookie:该内置对象的类型为Map<String,Cookie>,其中key是Cookie的名字,value是Cookie对象本身。

下面我们就来通过一个小例子来学习如何使用cookie内置对象获取cookie相关信息,如下所示:

(1)在Example7的WebRoot目录下新建一个cookie目录,然后在该目录下新建一个cookie.jsp页面,主要代码如例1-6所示:

例1-6 cookie.jsp

  1. <body>
  2. <h1>
  3. 名字为JSESSIONID的cookie的值:
  4. ${cookie.JSESSIONID.value }
  5. </h1>
  6. </body>
  7.  

复制代码

例1-6中,因为cookie内置对象的key值是cookie的名称,所以${cookie.JSESSIONID}获取的是名为JSESSIONID的Cookie对象,而Cookie类有getValue()方法,所以${cookie.JSESSIONID.value}就是获取Cookie的值。当然如果想要获取cookie的name值,el表达式为${cookie.JSESSIONID.name}。

(2)在浏览器端访问:http://localhost:8080/Example7/cookie/cookie.jsp,浏览器显示结果如图1-6所示:

 

图1-6 浏览器显示结果

将例1-6中的el表达式修改为“${cookie.JSESSIONID}”,再访问cookie.jsp,浏览器显示结果如图1-7所示:

 

图1-7 浏览器显示结果

由图1-7可知,${cookie.JSESSIONID}获取的是名字为JSESSIONID的cookie对象。

pageContext内置对象

在文档的开头我们就说过,EL表达式的11个内置对象中,有10个内置对象的类型是Map类型,只有pageContext的类型是PageContext。下面我们就来学习如何使用这个内置对象,如下所示:

(1)在Example7的WebRoot目录下新建一个pageContext目录,然后在该目录下新建一个pageContext.jsp页面,主要内容如例1-7所示:

例1-7pageContext.jsp

  1. <body>
  2. ${pageContext.request}
  3. </body>
  4.  

复制代码

(2)在浏览器端访问:http://localhost:8080/Example7/pageContext/pageContext.jsp,浏览器显示结果如图1-8所示:

 

图1-8 浏览器显示结果

图1-8中输出的正是request对象,我们知道pageContext内置对象的类型是PageContext,而该类有一个方法:getRequest(),该方法的返回值就是一个ServletRequest类型的对象。因此${pageContext.request}输出的就是一个request对象。

(3)将例1-7中的el表达式进行修改,该成“${pageContext.request.contextPath}“,然后再访问pageContext.jsp页面,浏览器端显示结果如图1-9所示:

 

图1-9 浏览器显示结果

图1-9中,浏览器端显示的是当前应用的名称,我们在学习request对象时讲过:调用request的getContextPath()方法可以获得当前应用的名称,而el表达式底层就是调用get方法,所以${pageContext.request.contextPath}输出的是当前工程的名字。

我们在表单或超链接中写的访问路径之前都是:/工程名/资源路径,为了以后开发的维护方便,我们以后在表单或超链接中写的路径不要直接写工程名,用${pageContext.request.contextPath}代替,如例1-8所示:

  1. <body>
  2.     ${pageContext.request.contextPath  }
  3.     <hr/>
  4.     <a href="${pageContext.request.contextPath }/header/header.jsp">点击这里</a>
  5.     <form action="${pageContext.request.contextPath }/cookie/cookie.jsp" method="post">
  6.       <input type="submit" value="xxx"/>
  7.     </form>
  8.     <hr/>
  9. </body>
  10.  

复制代码

浏览器访问结果如图1-10所示:

 

图1-10 浏览器显示结果

 

当然,使用pageContext内置对象还可以获取session对象的id值,如:${pageContext.session.id}。pageContext对象可以获取jsp的其他内置对象,所以通过pageContext对象可以获取其他内置对象的任意的属性值。

配套文档与对应高清视频下载

http://pan.baidu.com/s/1sjz8PwL

在线视频

本文转载自:http://bbs.itcast.cn/thread-79404-1-1.html

共有 人打赏支持
嘻哈开发者
粉丝 54
博文 114
码字总数 1519
作品 0
广州
程序员
EL表达式的JavaBean导航功能

EL表达式 1. EL是JSP内置的表达式语言! jsp2.0开始,不让再使用java脚本,而是使用el表达式和动态标签来替代java脚本! EL替代的是<%= ... %>,也就是说,EL只能做输出! 2. EL表达式来读取...

小和尚敲代码
2015/03/06
0
2
EL表达式的使用及编写和使用EL表达式的自定义函数

什么是EL表达式 Expression Language————表达式语言 EL表达式的作用 获取数据 执行运算 获取Web开发常用对象 执行Java方法 获取数据: <% User user = new User("旺财", "幸福路", 18);...

Lunqi
2015/08/19
0
4
Apache Commons包简介

Components Description Latest Version Released BeanUtils 易于使用的包装在Java反射和内省API 1.9.2 2014-05-29 CLI 命令行参数解析 1.2 2009-03-19 Codec 一般的编码/解码算法(例如语音...

银月光海
2015/01/15
0
0
Java 语言的 XPath API

如果要告诉别人买一加仑牛奶,您会怎么说?“请去买一加仑牛奶回来” 还是 “从前门出去,向左转,走三个街区向右转,再走半个街区向右转进入商店。走向四号通道,沿通道走五米向左,拿一瓶一...

benqend
2014/12/02
0
0
Groovy轻松入门-通过与Java的比较,迅速掌握Groovy

Groovy和Java的相同点有: 3+, 4+, 6+, 8+, 10+, 12+, 13, 14, 15, 18+, 20+, 21, 22, 23, 28+, 29+, 30+, 31+, 32+ +表示Groovy不但涵盖了Java的语法,而且还有增强部分。 Groovy和Java的不...

Sub
2013/03/08
0
1

没有更多内容

加载失败,请刷新页面

加载更多

分布式锁的那点事

在多线程并发的情况下,要保证一个代码块在同一时间只能由一个线程访问,可以用锁来保证,比如java的synchronized语法以及ReentrantLock类等等。这样子可以保证JVM进程内的多个线程同步执行。...

无语年华
3分钟前
0
0
apahce启用http2

需要前置条件传送门 其实前置做完了,h2是很简单的事 1.apache启用http2_module 2.打开apche的配置文件,写上 Protocols h2 http/1.1 3.重启apache,打开浏览器看看吧...

gcudwork
19分钟前
0
0
redis-string

set key value 设置值 set命令有以下选项: ex senconds :为健设置秒级过期时间 px millisencondes :为健设置毫秒级过期时间 nx :健不存在时候,可以设置成功,用于添加 xx : 与nx相反,不...

拐美人
24分钟前
1
0
正弦 余弦 角度 用于画时钟

<html> <head> <title>时钟</title> </head> <style> #canvas{ background: #1977ca } </style>......

一箭落旄头
41分钟前
4
0
驰狼课堂

http://www.chilangedu.com/

求是科技
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部