zoukankan      html  css  js  c++  java
  • Java-JSP:EL表达式

    ylbtech-Java-JSP:EL表达式

     EL(Expression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化

    1.返回顶部
    1、
    1、语法结构
    ${expression}
    2、[ ]与.运算符
    EL 提供“.“和“[ ]“两种运算符来存取数据。
    当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母或数字的符号,就一定要使用“[ ]“。例如:
    ${ user. My-Name}应当改为${user["My-Name"]}
    如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:
    ${sessionScope.user[data]}中data 是一个变量
    3、变量
    EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。
    因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找
    假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传""。
    属性范围在EL中的名称
    Page PageScope
    Request RequestScope
    Session SessionScope
    Application ApplicationScope
    JSP 表达式语言定义可在表达式中使用的以下文字:
    文字文字的值
    Boolean
    true 和 false
    Integer
    与 Java 类似。可以包含任何正数或负数,例如 24、-45、567
    Floating Point
    与 Java 类似。可以包含任何正的或负的浮点数,例如 -1.8E-45、4.567
    String
    任何由单引号或双引号限定的字符串。对于单引号、双引号和反斜杠,使用反斜杠字符作为转义序列。必须注意,如果在字符串两端使用双引号,则单引号不需要转义。
    Null
    null
    2、操作符
    JSP 表达式语言提供以下操作符,其中大部分是 Java 中常用的操作符:
    术语
    定义
    算术型
    +、-(二元)、*、/、div、%、mod、-(一元)
    逻辑型
    and、&&、or、||、!、not
    关系型
    ==、eq、!=、ne、<、lt、>、gt、<=、le、>=、ge。可以与其他值进行比较,或与布尔型、字符串型、整型或浮点型文字进行比较。
    empty 空操作符是前缀操作,可用于确定值是否为空。
    条件型
    A ?B :C。根据 A 赋值的结果来赋值 B 或 C。
    3、隐式对象
    JSP 表达式语言定义了一组隐式对象,其中许多对象在 JSP scriplet 和表达式中可用:
    pageContext
    JSP 页的上下文。它可以用于访问 JSP 隐式对象,如请求、响应、会话、输出、servletContext 等。例如,${pageContext.response} 为页面的响应对象赋值。
    此外,还提供几个隐式对象,允许对以下对象进行简易访问:
    术语
    定义
    param
    将请求参数名称映射到单个字符串参数值(通过调用 ServletRequest.getParameter (String name) 获得)。getParameter (String) 方法返回带有特定名称的参数。表达式 ${param . name}相当于 request.getParameter (name)。
    paramValues
    将请求参数名称映射到一个数值数组(通过调用 ServletRequest.getParameter (String name) 获得)。它与 param 隐式对象非常类似,但它检索一个字符串数组而不是单个值。表达式 ${paramValues. name} 相当于 request.getParamterValues(name)
    header
    将请求头名称映射到单个字符串头值(通过调用 ServletRequest.getHeader(String name) 获得)。表达式 ${header. name} 相当于 request.getHeader(name)
    headerValues
    将请求头名称映射到一个数值数组(通过调用 ServletRequest.getHeaders(String) 获得)。它与头隐式对象非常类似。表达式 ${headerValues. name} 相当于 request.getHeaderValues(name)
    cookie
    将 cookie 名称映射到单个 cookie 对象。向服务器发出的客户端请求可以获得一个或多个 cookie。表达式 ${cookie. name .value} 返回带有特定名称的第一个 cookie 值如果请求包含多个同名的 cookie,则应该使用 ${headerValues. name} 表达式
    initParam
    将上下文初始化参数名称映射到单个值(通过调用 ServletContext.getInitparameter(String name) 获得)。
    除了上述两种类型的隐式对象之外,还有些对象允许访问多种范围的变量,如 Web 上下文、会话、请求、页面
    术语
    定义
    pageScope
    将页面范围的变量名称映射到其值。例如,EL 表达式可以使用 ${pageScope.objectName} 访问一个 JSP 中页面范围的对象,还可以使用 ${pageScope.objectName. attributeName} 访问对象的属性
    requestScope
    将请求范围的变量名称映射到其值。该对象允许访问请求对象的属性。例如,EL 表达式可以使用 ${requestScope. objectName} 访问一个 JSP 请求范围的对象,还可以使用 ${requestScope. objectName. attributeName} 访问对象的属性
    sessionScope
    将会话范围的变量名称映射到其值。该对象允许访问会话对象的属性。例如:
    ${sessionScope. name}
    applicationScope
    将应用程序范围的变量名称映射到其值。该隐式对象允许访问应用程序范围的对象
    2、
    2.返回顶部
    1、
    特别强调

    1、注意当表达式根据名称引用这些对象之一时,返回的是相应的对象而不是相应的属性。例如:即使现有的 pageContext 属性包含某些其他值,${pageContext} 也返回 PageContext 对象。
    2、注意 <%@ page isELIgnored="true" %> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用EL语言

    举例说明

    1、例如,
    < %=request. getParameter(“username”)% > 等价于 ${ param. username }
    2、例如,但是下面的那句EL语言可以完成如果得到一个username为空,则不显示null,而是不显示值
    <%=user.getAddr( ) %> 等价于 ${user.addr}
    3、例如:
    <%=request.getAttribute(“userlist”) %> 等价于$ { requestScope.userlist }
    4、例如,原理如上例3。
    ${requestScope.userlist} 1
    ${sessionScope.userlist} 2
    ${applicationScope.userlist} 3
    ${pageScope.userlist} 4
    ${userlist} 含义:执行顺序为4 1 2 3。
    “.”后面的只是一个字符串,并不是真正的内置对象,不能调用对象
    5、例如,
    <%=user.getAddr( ) %> 等价于 ${user.addr}
    第一句前面的user,为一个变量
    第二句后面user,必须为在某一个范围里的属性

    2、
    3.返回顶部
    0、
    1、

    JSP 表达式语言

    JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单。JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式。在JSP EL表达式内可以使用整型数,浮点数,字符串,常量true、false,还有null。


    一个简单的语法

    典型的,当您需要在JSP标签中指定一个属性值时,只需要简单地使用字符串即可:

    <jsp:setProperty name="box" property="perimeter" value="100"/>

    JSP EL允许您指定一个表达式来表示属性值。一个简单的表达式语法如下:

    ${expr}

    其中,expr指的是表达式。在JSP EL中通用的操作符是 . 和 {} 。这两个操作符允许您通过内嵌的JSP对象访问各种各样的JavaBean属性。

    举例来说,上面的<jsp:setProperty>标签可以使用表达式语言改写成如下形式:

    <jsp:setProperty name="box" property="perimeter" 
                     value="${2*box.width+2*box.height}"/>

    当JSP编译器在属性中见到"${}"格式后,它会产生代码来计算这个表达式,并且产生一个替代品来代替表达式的值。

    您也可以在标签的模板文本中使用表达式语言。比如<jsp:text>标签简单地将其主体中的文本插入到JSP输出中:

    <jsp:text>
    <h1>Hello JSP!</h1>
    </jsp:text>

    现在,在<jsp:text>标签主体中使用表达式,就像这样:

    <jsp:text>
    Box Perimeter is: ${2*box.width + 2*box.height}
    </jsp:text>

    在EL表达式中可以使用圆括号来组织子表达式。比如${(1 + 2) * 3}等于9,但是${1 + (2 * 3)} 等于7。

    想要停用对EL表达式的评估的话,需要使用page指令将isELIgnored属性值设为true:

    <%@ page isELIgnored ="true|false" %>

    这样,EL表达式就会被忽略。若设为false,则容器将会计算EL表达式。


    EL中的基础操作符

    EL表达式支持大部分Java所提供的算术和逻辑操作符:

    操作符描述
    . 访问一个Bean属性或者一个映射条目
    [] 访问一个数组或者链表的元素
    ( ) 组织一个子表达式以改变优先级
    +
    - 减或负
    *
    / or div
    % or mod 取模
    == or eq 测试是否相等
    != or ne 测试是否不等
    < or lt 测试是否小于
    > or gt 测试是否大于
    <= or le 测试是否小于等于
    >= or ge 测试是否大于等于
    && or and 测试逻辑与
    || or or 测试逻辑或
    ! or not 测试取反
    empty 测试是否空值

    JSP EL中的函数

    JSP EL允许您在表达式中使用函数。这些函数必须被定义在自定义标签库中。函数的使用语法如下:

    ${ns:func(param1, param2, ...)}

    ns指的是命名空间(namespace),func指的是函数的名称,param1指的是第一个参数,param2指的是第二个参数,以此类推。比如,有函数fn:length,在JSTL库中定义,可以像下面这样来获取一个字符串的长度:

    ${fn:length("Get my length")}

    要使用任何标签库中的函数,您需要将这些库安装在服务器中,然后使用<taglib>标签在JSP文件中包含这些库。


    JSP EL隐含对象

    JSP EL支持下表列出的隐含对象:

    隐含对象描述
    pageScope page 作用域
    requestScope request 作用域
    sessionScope session 作用域
    applicationScope application 作用域
    param Request 对象的参数,字符串
    paramValues Request对象的参数,字符串集合
    header HTTP 信息头,字符串
    headerValues HTTP 信息头,字符串集合
    initParam 上下文初始化参数
    cookie Cookie值
    pageContext 当前页面的pageContext

    您可以在表达式中使用这些对象,就像使用变量一样。接下来会给出几个例子来更好的理解这个概念。


    pageContext对象

    pageContext对象是JSP中pageContext对象的引用。通过pageContext对象,您可以访问request对象。比如,访问request对象传入的查询字符串,就像这样:

    ${pageContext.request.queryString}

    Scope对象

    pageScope,requestScope,sessionScope,applicationScope变量用来访问存储在各个作用域层次的变量。

    举例来说,如果您需要显式访问在applicationScope层的box变量,可以这样来访问:applicationScope.box。


    param和paramValues对象

    param和paramValues对象用来访问参数值,通过使用request.getParameter方法和request.getParameterValues方法。

    举例来说,访问一个名为order的参数,可以这样使用表达式:${param.order},或者${param["order"]}。

    接下来的例子表明了如何访问request中的username参数:

    <%@ page import="java.io.*,java.util.*" %>
    <%
        String title = "Accessing Request Param";
    %>
    <html>
    <head>
    <title><% out.print(title); %></title>
    </head>
    <body>
    <center>
    <h1><% out.print(title); %></h1>
    </center>
    <div align="center">
    <p>${param["username"]}</p>
    </div>
    </body>
    </html>

    param对象返回单一的字符串,而paramValues对象则返回一个字符串数组。


    header和headerValues对象

    header和headerValues对象用来访问信息头,通过使用 request.getHeader方法和request.getHeaders方法。

    举例来说,要访问一个名为user-agent的信息头,可以这样使用表达式:${header.user-agent},或者${header["user-agent"]}。

    接下来的例子表明了如何访问user-agent信息头:

    <%@ page import="java.io.*,java.util.*" %>
    <%
        String title = "User Agent Example";
    %>
    <html>
    <head>
    <title><% out.print(title); %></title>
    </head>
    <body>
    <center>
    <h1><% out.print(title); %></h1>
    </center>
    <div align="center">
    <p>${header["user-agent"]}</p>
    </div>
    </body>
    </html>
    2、
    4.返回顶部
     
    5.返回顶部
    1、
    2、
    3、
     
    6.返回顶部
     
    warn 作者:ylbtech
    出处:http://ylbtech.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Golang服务器热重启、热升级、热更新(safe and graceful hot-restart/reload http server)详解
    如果清空Isilon cluster上的文件,Shadow Store和data reduction的统计信息也会一并清空么?
    合并从B站下载的分开的音频和视频
    使用Notepad++远程编辑WinSCP中打开的文本文件报错“file xxx does exist anymore”
    Leetcode 1143. 最长公共子序列(LCS)动态规划
    Leetcode 126 127 单词接龙i&ii
    如何在一个Docker中同时运行多个程序进程?
    dockerfile cmd使用
    Leetcode 160.相交链表
    Leetcode 912. 排序数组
  • 原文地址:https://www.cnblogs.com/storebook/p/9550838.html
Copyright © 2011-2022 走看看