EL表达式(2)
本篇介绍EL表达式的隐式对象,如同JSP一样,EL也封装了11个隐式对象,通过这些隐式对象可以在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集合对象。
在《Servlet的学习之ServletContext(1)》 中我们介绍过在web.xml文件中讲解过<context-param>标签,用于配置全局性的web参数,在Servlet中可以使用 ServletContext.getInitParameter方法获取指定参数的值。
而在JSP页面中,我们可以同EL表达式的initParam方法来获取为web应用配置的全局性参数。
例10:
在web.xml文件中配置:
<context-param>
<param-name>username</param-name>
<param-value>fjdingsd</param-value>
</context-param>
在JSP页面中:
${initParam.username }
在浏览器中观察:

EL表达式(2)的更多相关文章
- jsp页面无法识别el表达式的解决方案
今天在写一个springmvc的小demo时,碰到一个问题,在jsp页面中书写为${user.username}的表达式语言,在浏览器页面中仍然显示为${user.username},说明jsp根本不 ...
- El表达式的关系运算符
El表达式的关系运算符: == 对应 eq != 对应 ne > 对应 gt < 对应 It
- java web学习总结(三十一) -------------------EL表达式
一.EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数 ...
- EL表达式的算术运算
一个例子--乘法运算 ${book.bookCount * book.bookPrice } 两个不同对象的EL表达式的算术运算同理 ${student.studentNum * book.bookP ...
- EL表达式杂项
1.<%@ page isELIgnored="false" %> 是否忽略EL表达式,如果值为ture,那么 ${..}这样的会直接原样输出,不会进行EL表达式计算 ...
- c:out标签和el表达式与跨域攻击XSS
很多时候,在JSP中我们喜欢用EL表达式输出信息,但是最近发现这个确实存在个问题:XSS即跨域攻击. 下面看个例子: <c:out value="${student.name}&quo ...
- JavaWeb:EL表达式
JavaWeb:EL表达式 说明 1.Expression Language语言,一种用于JSP文件中的数据访问的语言. 2.能够简化JSP文件中该数据访问的代码,可用来替代传统的基于<%= % ...
- 重温JSP学习笔记--El表达式
el表达式是jsp内置的表达式语言,jsp从jsp2.0开始,就不再提倡使用java脚本,而是用el表达式和动态标签来替代,而el表达式主要替代的是jsp中的<%=....%>,也就是说e ...
- Spring2.0-applicationContext.xml中使用el表达式给实体类属性赋值被当成字符串-遁地龙卷风
(-1)写在前面 这两天读<javaweb开发王者归来>,学到Spring的PropertyPlaceholderConfigurer时出现一个问题,我已${jdbc.name}的形式赋值 ...
- Javaweb学习笔记——EL表达式
一.前言 EL表达式是什么? 简而言之,可以这样理解,EL表达式全名为:Exprexxsion Language,原先是JSTL 1.0为了方便存取数据而定义的语言,到了JSTL 2.0便正式成为标准 ...
随机推荐
- 【QT相关】对话框相关
为行编辑器限制规则: QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}"); lineEdit->setValidator(new QRegEx ...
- 浏览器与服务器间的交互(客服端 <---> 服务器)
浏览器与服务器间的交互(客服端 <---> 服务器) 请求--->处理--->响应 对类HttpContext 内部成员的使用 例如 :Request .Response . ...
- 2014年百度之星程序设计大赛 资格赛第一题 (longlong)
解题思路: 只要看(A-V)*K 这个公式的更新值是否大于等于A ,大于的话继续循环,否则报错 注意一点,数据会爆int WA代码: #include<stdio.h> int main( ...
- (Problem 17)Number letter counts
If the numbers 1 to 5 are written out in words: one, two, three, four, five, then there are 3 + 3 + ...
- 彻底理解浮动float CSS浮动详解 清除浮动的方法
我们把网页的常用的布局格式分为以下三种: 1.标准流. 所谓的标准流就是,行内元素自己单独一行,而块级元素是上下显示的. 以前我们学习的都是标准流. 注意:标准流使我们网页布局中最稳定的一种结构 ...
- kingso - / - Taocode
kingso - / - Taocode 这两天在线下搭建了kingso示例服务,有兴趣的同学请自取. 源代码位置:192.168.201.73:9022 /home/wcm/kingso 安 ...
- 关于libgdx中UI控件的旋转和缩放的备忘
最近遇到这样一个问题,定义了一个ImageButton后,想对按钮进行下旋转,结果setRotation(-90f),不起作用.后来在官网上找到了原因 关于UI控件的旋转 缩放官网上有这样一段话(链接 ...
- 以libevent网络库为引:网络通信和多线程
1. windows下编译及使用libevent http://www.cnblogs.com/luxiaoxun/p/3603399.html 2. <<libevent学习资料&g ...
- 百度网盘自动上传脚本-bpcs_uploader
安装jsonpear install pecl/json 一.bpcs_uploader下载和使用: 1.下载地址:http://oott123.github.com/bpcs_uploader/ 2 ...
- 14-UIKit(拖拽手势、布局)
目录: 1.手势创建的拖拽方式 2.frame,bounds,transform,center区别 3.触控(touch) 4.布局 5.代码布局 回到顶部 1.手势创建的拖拽方式 创建手势对象,修改 ...