文档章节

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

嘻哈开发者
 嘻哈开发者
发布于 2017/04/09 11:11
字数 2293
阅读 6
收藏 0
点赞 0
评论 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
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的不...

DavidBao
2015/05/15
0
0
02、Java的lambda表达式和JavaScript的箭头函数

[toc] 前言 在JDK8和ES6的语言发展中,在Java的lambda表达式和JavaScript的箭头函数这两者有着千丝万缕的联系;本次试图通过这篇文章弄懂上面的两个“语法糖”。 简介 Lambda 表达式来源于 ...

weir_will
06/14
0
0
Hibernate 映射文件配置

对象关系的映射是用一个XML文档来说明的。映射文档可以使用工具来生成,如XDoclet,Middlegen和AndroMDA等。 下面从一个映射的例子开始讲解映射元素,映射文件的代码如下。 <?xml version=...

wangxiaoyi
2012/09/16
0
0
Spring AOP切点表达式详解

简介 面向对象编程,也称为OOP(即Object Oriented Programming)最大的优点在于能够将业务模块进行封装,从而达到功能复用的目的。通过面向对象编程,不同的模板可以相互组装,从而实现更为...

张旭峰
06/05
0
2
js和java中正则表达式的易混淆点

js中正则表达式的使用 对表单中的值进行正则表达式匹配一般有两种方法: var reg = new RegExp(regStr); reg.test(value); 如下: var reg = new RegExp(“\d{3}”); reg.test(“abc123def”...

绝影jy
2014/07/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
1
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
0
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
0
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
今天
2
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
0
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
2
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
0
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部