关闭

EL语法

标签: sessionEL语法
182人阅读 评论(0) 收藏 举报
分类:

${sessionScope.user}的使用方法

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 提供 . 和 [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的:

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

属性范围(jstl名称) | EL中的名称

Page        |    PageScope
Request     |    RequestScope
Session     |    SessionScope
Application |    ApplicationScope

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

范例 | 说明

${pageScope.username}

取出Page范围的username变量

${requestScope.username}

取出Request范围的username变量

${sessionScope.username}

取出Session范围的username变量

${applicationScope.username}

取出Application范围的username变量

其中,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;

所以,注意不要和java的语法(当字符串和数字用“+”链接时会把数字转换为字符串)搞混淆喽。

EL 隐含对象

JSP有9个隐含对象,而EL也有自己的隐含对象。EL隐含对象总共有11 个
这里写图片描述
这里写图片描述

不过有一点要注意的是如果你要用EL输出一个常量的话,字符串要加双引号,不然的话EL会默认把你认为的常量当做一个变量来处理,这时如果这个变量在4个声明范围不存在的话会输出空,如果存在则输出该变量的值。

属性(Attribute)与范围(Scope)

与范围有关的EL 隐含对象包含以下四个:pageScope、requestScope、sessionScope 和 applicationScope,它们基本上就和JSP的pageContext、request、session和application一样,所以笔者在这里只稍略说明。不过必须注意的是,这四个隐含对象只能用来取得范围属性值,即JSP中的getAttribute(String name),却不能取得其他相关信息,例如:JSP中的request对象除可以存取属性之外,还可以取得用户的请求参数或表头信息等等。但是在EL中,它就只能单纯用来取得对应范围的属性值,例如:我们要在session 中储存一个属性,它的名称为username,在JSP 中使用session.getAttribute(“username”) 来取得username 的值, 但是在EL中,则是使用${sessionScope.username}来取得其值的。

cookie

所谓的cookie是一个小小的文本文件,它是以key、value的方式将Session Tracking的内容记录在这个文本文件内,这个文本文件通常存在于浏览器的暂存区内。JSTL(JSP Standard Tag Library,JSP标准标签库)并没有提供设定cookie的动作,因为这个动作通常都是后端开发者必须去做的事情,而不是交给前端的开发者。假若我们在cookie 中设定一个名称为userCountry的值,那么可以使用${cookie.userCountry}来取得它。

header 和headerValues

header 储存用户浏览器和服务端用来沟通的数据,当用户要求服务端的网页时,会送出一个记载要求信息的标头文件,例如:用户浏览器的版本、用户计算机所设定的区域等其他相关数据。假若要取得用户浏览器的版本,即${header[“User-Agent”]}。另外在鲜少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues 来取得这些值。

注意:因为User-Agent 中包含“-”这个特殊字符,所以必须使用“[]”,而不能写成$(header.User-Agent)。
initParam

就像其他属性一样,我们可以自行设定web 站台的环境参数(Context),当我们想取得这些参数initParam就像其他属性一样,我们可以自行设定web 站台的环境参数(Context),当我们想取得这些参数

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

version="2.4"><context-param>

<param-name>userid</param-name>

<param-value>mike</param-value>

</context-param></web-app>

那么我们就可以直接使用 ${initParam.userid}来取得名称为userid,其值为mike 的参数。下面是之前的做法:
String userid = (String)application.getInitParameter("userid");

param和paramValues
在取得用户参数时通常使用一下request.getParameter(String name)
request.getParameterValues(String name)在 EL中则可以使用param和paramValues两者来取得数据。

${param.name}
${paramValues.name}

这里param 的功能和request.getParameter(String name)相同,而paramValues和
request.getParameterValues(String name)相同。如果用户填了一个表格,表格名称为username,则我们就可以使用${param.username}来取得用户填入的值。

看到这里,大家应该很明确EL表达式只能通过内置对象取值,也就是只读操作,如果想进行写操作的话就让后台代码去完成,毕竟EL表达式仅仅是视图上的输出标签罢了。

pageContext

我们可以使用 ${pageContext}来取得其他有关用户要求或页面的详细信息。下表列出了几个比较常用的部分
这里写图片描述
这里写图片描述
这个对象可有效地改善代码的硬编码问题,如页面中有一A标签链接访问一个SERVLET,如果写死了该SERVLET的HTTP地址那么如果当该SERVLET的SERVLET-MAPPING改变的时候必须要修改源代码,这样维护性会大打折扣。

Empty 运算符

Empty 运算符主要用来判断值是否为空(NULL,空字符串,空集合)。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

JSP 中EL表达式用法详解

EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便。接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${为起始、以}为结尾的。上述EL范例的意思是:从Session的范围中,取得 ...
  • m8396017
  • m8396017
  • 2016-09-05 22:51
  • 15225

el表达式实例

package bean; public class Person { public String name; public int age; public Address address; public String getName() { return name; } pu...
  • acmjk
  • acmjk
  • 2014-03-26 14:48
  • 1085

EL表达式/JSP标签和EL表达式

EL表达式 (详解) 标签: applicationsessionredirectstringjspspring 2009-05-15 18:07 101299人阅读 评论(62) 收藏 举报   EL表达式  ...
  • shenghuaDay
  • shenghuaDay
  • 2016-05-16 22:22
  • 340

EL表达式常见用法详解

1.EL表达式的简介 EL表达式是一种JSP技术,能够代替JSP中原本要用Java语言进行显示的语句,使得代码更容易编写与维护。最基本的语法是${express}。 2.获取并显示数据 1)从四个域中通过key找到简单数据并显示出来。表达式代码:${name} -->四个域的...
  • L_BestCoder
  • L_BestCoder
  • 2017-02-02 17:33
  • 1157

JSP中的EL表达式详细介绍

一、JSP EL语言定义          EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能。脚本编制元素是指页面中能够用于在 JSP 文件中嵌入 Java 代码的元素。它们通常用于对象操作以及执行那些...
  • qq_26676207
  • qq_26676207
  • 2016-08-31 14:53
  • 2679

EL表达式不能用于js文件中,一般用于jsp文件

因为在jsp文件中可以引入EL对应的标签库,但在JS文件中是无法引入的, 所以: EL表达式不能用于js文件中,一般用于jsp文件,但可用于jsp文件中的js代码里!!! 示例: 1、在taglib.jsp页面引入了EL对应的标签库,并且设置了两个变量ctx、ctxStatic:...
  • zhengxiangwen
  • zhengxiangwen
  • 2015-06-14 14:23
  • 1287

JAVAWEB开发之JSP、EL、及会话技术(Cookie和Session)的使用详解

Servlet的缺点 开发人员要十分熟悉JAVA 不利于页面调试和维护(修改,重新编译) 很难利用网页设计工具进行页面设计(HTML内容导入到servlet中,用PrintWriter的对象进行输出) JSP简介 JSP(Java Server Pages) 与Java Servlet一样,是在服务...
  • u013087513
  • u013087513
  • 2017-01-20 22:34
  • 2518

jsp中的JSTL与EL表达式用法

JSTL (JSP Standard Tag Library ,JSP标准标签库) JSTL标签库分为5类:JSTL核心标签库、JSTL函数标签库、数据库标签库、I18N格式化标签库、XML标签库。 JSTL的核心标签库主要包括:表达式操作、流程控制、迭代操作和URL操作。以下是JSTL...
  • tan313
  • tan313
  • 2015-11-12 21:25
  • 984

web开发时jsp中表单回显character类型的数据需注意

当我们后台在做表单数据回填时,经常有遇到一些莫名其妙的错误,导致自己无法找到bug所在,我在这聊聊我所遇到的一些坑! Character类型数据在el表达式中无法进行判断在将Character类型的性别属性值放在input标签中进行判断,是无法进行判断的,因为el表达式在进行比较时是没有字符类型的...
  • HeadingAlong
  • HeadingAlong
  • 2017-01-18 16:59
  • 705

EL和JSTL语法

一、什么是EL表达式和JSTL标签 1、它们是在JSP页面用于显示Java数据(普通变量或者是对象的属性)的工具,和OGNL表达式和Struts标签的作用类似 。 二、EL表达式格式(把变量或对象存入作用域才能使用EL表达式,作用域只是对对象的引用,不会复制对象) 1、必须使用${ }来包装 ...
  • longlong1229
  • longlong1229
  • 2017-07-28 09:55
  • 85
    个人资料
    • 访问:6648次
    • 积分:149
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:4篇
    • 译文:0篇
    • 评论:1条
    文章分类
    文章存档
    最新评论