JSP 中EL表达式用法详解

EL 全名为Expression Language

EL 语法很简单,它最大的特点就是使用上很方便。接下来介绍EL主要的语法结构:

${sessionScope.user.sex}

所有EL都是以${为起始、以}为结尾的。上述EL范例的意思是:从Session的范围中,取得

用户的性别。假若依照之前JSP Scriptlet的写法如下:

User user =(User)session.getAttribute(“user”);

String sex =user.getSex( );

两者相比较之下,可以发现EL 的语法比传统JSP Scriptlet 更为方便、简洁。

.与 [ ] 运算符

EL 提供 . 和 [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的:

s e s s i o n S c o p e . u s e r . s e x 等 于 {sessionScope.user.sex}等于 sessionScope.user.sex等于{sessionScope.user[“sex”]}

. 和 [ ] 也可以同时混合使用,如下:

${sessionScope.shoppingCart[0].price}

回传结果为shoppingCart中第一项物品的价格。

不过,以下两种情况,两者会有差异:

(1) 当要存取的属性名称中包含一些特殊字符,如. 或 – 等并非字母或数字的符号,就一定要使用 [ ],例如:${user.My-Name }

上述是不正确的方式,应当改为:${user[“My-Name”] }

(2) 我们来考虑下列情况:

${sessionScope.user[data]}

此时,data 是一个变量,假若data的值为"sex"时,那上述的例子等于${sessionScope.user.sex};

假若data 的值为"name"时,它就等于${sessionScope.user.name}。因此,如果要动态取值时,就可以用上述的方法来做,但. 无法做到动态取值。

EL 变量

EL 存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。因为我们并没有指定哪一个范围的username,所以它的默认值会先从Page 范围找,假如找不到,再依序到Request、Session、Application范围。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null,当然EL表达式还会做出优化,页面上显示空白,而不是打印输出NULL。

我们也可以指定要取出哪一个范围的变量:

其中,pageScope、requestScope、sessionScope和applicationScope都是EL 的隐含对象,由它们的名称可以很容易猜出它们所代表的意思,例如:${sessionScope.username}是取出Session范围的username 变量。这种写法是不是比之前JSP 的写法:

String username = (String) session.getAttribute(“username”);容易、简洁许多.

自动转变类型

EL 除了提供方便存取变量的语法之外,它另外一个方便的功能就是:自动转变类型,我们来看下面这个范例:

${param.count + 20}

假若窗体传来count的值为10时,那么上面的结果为30。之前没接触过JSP 的读者可能会认为上面的例子是理所当然的,但是在JSP 1.2 之中不能这样做,原因是从窗体所传来的值,它们的类型一律是String,所以当你接收之后,必须再将它转为其他类型,如:int、float 等等,然后才能执行一些数学运算,下面是之前的做法:

String str_count = request.getParameter(“count”);

int count = Integer.parseInt(str_count);

count = count + 20;

四大域对象

  1. PageContext :页面范围的数据

  2. ServletRequest:请求范围的数据

  3. HttpSession:会话范围的数据

  4. ServletContext:应用范围的数据

9个内置对象

  1. request对象

    request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的 请求信息,主要用于接受通过HTTP协议传送到服务器的数据。

    (包括头信息. 系统信息. 请求方式以及请求参数等)。request对象的作用域为一次请求。

    2.response对象

    response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。

    3.session对象

    session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。

    session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。

    4.application对象

    application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。

    与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。

    5.out 对象

    out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。

    在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

    6.pageContext 对象

    pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out. request. reponse. session. application 等对象。

    pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。

    7.config 对象

    config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。

    当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。

    开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。

    8.page 对象

    page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。

    9.exception 对象

    exception 对象的作用是显示异常信息,只有在包含 isErrorPage=“true” 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。

    excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有异常情况。

    如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。

EL 隐含对象

SP有9个隐含对象,而EL也有自己的隐含对象。EL隐含对象总共有11 个

学习笔记(9):EL的学习相关推荐

  1. Hadoop学习笔记—18.Sqoop框架学习

    Hadoop学习笔记-18.Sqoop框架学习 一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据 ...

  2. JavaScript学习笔记(十)——学习心得与经验小结

    JavaScript学习笔记(十)--学习心得与经验小结 目前我先列好提纲,利用每晚和周末的闲暇时间,将逐步写完 ^_^ 转载于:https://www.cnblogs.com/mixer/archi ...

  3. oracle 百万记录 cache,学习笔记:通过案例深入学习In-Memory Database Cache 总结配置过程...

    天萃荷净 详细记录关于In-Memory Database Cache配置方法与使用案例 一.Oracle数据库创建相关用户和权限 1.创建timesten用户 store information a ...

  4. Hadoop学习笔记—15.HBase框架学习(基础知识篇)

    Hadoop学习笔记-15.HBase框架学习(基础知识篇) HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase ...

  5. Hadoop学习笔记—16.Pig框架学习

    Hadoop学习笔记-16.Pig框架学习 一.关于Pig:别以为猪不能干活 1.1 Pig的简介 Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-LIKE语言叫Pig Latin, ...

  6. 学习笔记之——基于深度学习的图像超分辨率重建

    最近开展图像超分辨率( Image Super Resolution)方面的研究,做了一些列的调研,并结合本人的理解总结成本博文~(本博文仅用于本人的学习笔记,不做商业用途) 本博文涉及的paper已 ...

  7. CS230(DeepLearning)Leture2的学习笔记(2)之深度学习

    CS230_Leture2的学习笔记2之深度学习 我们先来回顾下第二章的学习目标:        而对于第二章Week1的学习目标已经完成,具体学习内容参考博主另一篇博客,站内搜索 CS230(Dee ...

  8. 梅科尔工作室-Django学习笔记(二次学习)(3)

    本次学习的是如何用django实现前端鸿蒙OS登录 下面介绍一下本次的操作过程. 1.首先创立MySQL数据并将数据库导入到django当中 其中:导入数据库的操作: 2.配置urls 对应新建的pe ...

  9. 【学习笔记】Pytorch深度学习—Batch Normalization

    [学习笔记]Pytorch深度学习-Batch Normalization Batch Normalization概念 `Batch Normalization ` `Batch Normalizat ...

  10. JAVA学习笔记(类的学习)

    JAVA学习笔记(类的学习) 类声明和类体 构造方法和对象创建 对象的引用和实体 成员变量 方法 方法重载 关键字this 包 import语句 访问权限 对象数组 反编译和文档生成器 JAR文件 1 ...

最新文章

  1. 链家租房信息案例数据分析
  2. vlist java实现-转
  3. XenApp 6.0/6.5服务优化
  4. 聊聊JVM(三)两种计算Java对象大小的方法
  5. centos amd双显卡_PCIe4.0和PCIe3.0对显卡性能差别大吗?
  6. Linux shell 脚本中, $@ 和$# 分别是什么意思?
  7. 【点阵液晶编程连载五】液晶驱动代码的移植
  8. 双塔模型的瓶颈究竟在哪?
  9. redis 中一个字段 修改map_Redis中bitmap的妙用
  10. stm32 ov2640硬件软件笔记
  11. DAMA数据管理知识体系指南pdf
  12. 关于一个App调起另一个App
  13. 大文件前端直接上传至七牛
  14. 亳州学院计算机查询网址,亳州学院教务管理系统入口http://www.bzuu.edu.cn/jwc/
  15. 免费教程《Excel VBA:办公自动化》
  16. 分享Qt多工程多目录的编译案例,subdirs
  17. 自动化测试实施的前提条件
  18. Biopython+python 自动化分析蛋白质pdb文件,输出id,序列以及作用位点
  19. 计算机毕业设计php旅游网站的设计与实现
  20. c++错误:Process returned -1073741571 (0xC00000FD)

热门文章

  1. css鼠标图片hover移入移出缓慢放大缩小
  2. HBR 聪明人如何做决策
  3. 扩展标记语言-XML
  4. 阿帕奇SSL https配置
  5. 论文笔记 ACL 2021|Low-resource Event Detection with Ontology Embedding
  6. 用波特五力模型分析法针对对AI音箱进行竞争态势分析
  7. JFreeChart应用
  8. AUTOSAR方法论剖析
  9. 微软IE 8浏览器,虽败犹胜
  10. 唐胡子俱乐部:如何打造优秀的运营团队?