EL表达式

来源:互联网 发布:自学软件测试 编辑:程序博客网 时间:2024/06/18 05:29

[ ]与.运算符

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存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。

因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。

假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。

属性范围在EL中的名称

        Page         PageScope

        Request         RequestScope

        Session         SessionScope

        Application     ApplicationScope


隐含对象

 1.与范围有关的隐含对象

与范围有关的EL 隐含对象包含以下四个:pageScoperequestScopesessionScopeapplicationScope

它们基本上就和JSP的pageContext、request、session和application一样;

在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得其他相关信息。

例如:我们要取得session中储存一个属性username的值,可以利用下列方法:

    session.getAttribute("username") 取得username的值,

在EL中则使用下列方法

    ${sessionScope.username}

 

2.与输入有关的隐含对象

与输入有关的隐含对象有两个:paramparamValues,它们是EL中比较特别的隐含对象。

 

例如我们要取得用户的请求参数时,可以利用下列方法:

   

 request.getParameter(String name) request.getParameterValues(String name)

在EL中则可以使用param和paramValues两者来取得数据。

    ${param.name}

    ${paramValues.name}

 

3.其他隐含对象

cookie

JSTL并没有提供设定cookie的动作,

例:要取得cookie中有一个设定名称为userCountry的值,可以使用${cookie.userCountry}来取得它。

 

headerheaderValues

header 储存用户浏览器和服务端用来沟通的数据

例:要取得用户浏览器的版本,可以使用${header["User-Agent"]}。

另外在某些情况下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues 来取得这些值。

 

initParam

initParam取得设定web站点的环境参数(Context)

例:一般的方法String userid= (String)application.getInitParameter("userid");

    可以使用${initParam.userid}来取得名称为userid

 

pageContext

pageContext取得其他有关用户要求或页面的详细信息。

    ${pageContext.request.queryString}         取得请求的参数字符串

    ${pageContext.request.requestURL}         取得请求的URL,但不包括请求之参数字符串

    ${pageContext.request.contextPath}         服务的web application 的名称

    ${pageContext.request.method}           取得HTTP 的方法(GET、POST)

    ${pageContext.request.protocol}         取得使用的协议(HTTP/1.1、HTTP/1.0)

    ${pageContext.request.remoteUser}         取得用户名称

    ${pageContext.request.remoteAddr }         取得用户的IP 地址

    ${pageContext.session.new}             判断session 是否为新的

    ${pageContext.session.id}               取得session 的ID

   ${pageContext.servletContext.serverInfo}   取得主机端的服务信息

 

三、EL运算符

1.算术运算符有五个:+、-、*或$、/或div、%或mod

2.关系运算符有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge

3.逻辑运算符有三个:&&或and、||或or、!或not

4.其它运算符有三个:Empty运算符、条件运算符、()运算符

最常用的表达式:

为空判断:${empty param.name}

三元运算:${A?B:C}

算数运算:${A*(B+C)}

 

自动转变类型

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

 

${param.count +20}

但是在JSP 1.2 之中不能这样做,原因是从窗体所传来的值,它们的类型一律是String,所以当你接收之后,必须再将它转为其他类型,如:int、float 等等,然后才能执行一些数学运算,下面是之前的做法:

 

String str_count= request.getParameter("count");int count =Integer.parseInt(str_count);count = count +20;

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

7 0