zoukankan      html  css  js  c++  java
  • JSP的EL表达式语言

    以下内容引用自http://wiki.jikexueyuan.com/project/jsp/expression-language.html

    JSP表达式语言(EL)可以方便地访问存储在JavaBean组件中的应用程序的数据。JSP EL允许创建表达式(a)算术和(b)逻辑。在一个JSP EL表达式中,可以使用整数、浮点型数字、字符串、内置的布尔常量值为true和false和null。

    一、简单的语法

    通常,当给JSP标签指定一个属性值时,只需使用一个字符串。例如:

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

    JSP EL允许给表达式指定这些属性值。一个简单的JSP EL语法如下:

    ${expr}

    这里的expr是指定表达式本身。在JSP EL中最常见的操作符是.和[]。这两个操作符允许访问Java beans和内置JSP对象的各种属性。

    例如可以用一个表达式编写上面的语法<jsp:setProperty>标签,如下:

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

    当JSP编译器在一个属性中看到了${}形式,它可以生成计算表达式的代码,并且替换表达式的值。

    还可以在模板文本中对一个标签使用JSP EL表达式。例如,把<jsp:text>标签简单的插入到一个JSP的主体内容中。在下面的<jsp:text>声明中,插入<h1>Hello JSP!</h1>到JSP输出:

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

    可以在<jsp:text>标签(或任何其他标签)的标签体内引入一个JSP EL表达式,对属性使用${}语法。例如:

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

    EL表达式可以使用括号组成子表达式。例如,${(1 + 2)*3} = 9,但${1+(2*3)} = 7。

    禁止EL表达式的计算,指定页面指令的isELIgnored属性如下:

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

    这个属性的有效值是true和false。如果它是true,当它们出现在静态文本或标签属性时,EL表达式被忽略。如果它是false,EL表达式都由容器进行计算。

    二、EL的基本操作

    JSP表达式语言(EL)支持大多数Java支持的算术和逻辑运算符。下面是最常用的操作符的列表:

    操作描述
    . 访问bean属性或映射项
    [] 访问数组或链表元素
    ( ) 组成子表达式来修改计算顺序
    +
    - 减或负数
    *
    / or div
    % or mod 模计算/余数
    == or eq 等于
    != or ne 不等于
    < or lt 小于
    > or gt 大于
    <= or le 小于等于
    >= or gt 大于等于
    && or and 逻辑与
    || or or 逻辑或
    ! or not 一元布尔补集
    empty 空的变量值

    三、JSP EL中的函数

    JSP EL同样允许使用函数表达式。这些功能必须定义在自定义标签库中。一个函数利用下面的语法使用:

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

    其中,ns是函数的命名空间,func是函数名,param1是第一个参数值。例如,函数fn:length,它是JSTL库的一部分,可以使用它得到一个字符串的长度,如下所示:

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

    要从(标准或自定义)标签库中使用一个函数,必须在服务器上安装库,而且必须在JSP中使用<taglib>指令来引用该库。

    四、JSP EL隐式对象

    JSP表达式语言支持以下隐式对象:

    隐式对象描述
    pageScope 变量范围是页面范围
    requestScope 变量范围是请求范围
    sessionScope 变量范围是会话范围
    applicationScope 变量范围是应用范围
    param 请求参数作为字符串
    paramValues 请求参数作为字符串集合
    header HTTP请求标头作为字符串
    headerValues HTTP请求标头作为字符串集合
    initParam 上下文初始化参数
    cookie Cookie 值
    pageContext 当前页面的 JSP PageContext 对象

    可以在表达式中使用这些对象,把它们看做是变量。这里有一些明确概念的例子:

    1、pageContext对象

    pageContext对象允许访问pageContext JSP对象。通过pageContext对象,可以访问请求对象。例如,要访问请求传入的查询字符串,可以使用下面的表达式:

    ${pageContext.request.queryString}

    2、Scope对象

    sessionScope、pageScope、requestScop、applicationScope变量在每个级别范围提供变量存储。

    例如,如果需要显式地在应用范围内访问box变量,可以通过applicationScope变量作为applicationScope.box来访问。

    3、param和paramValues对象

    param和paramValues对象通常通过request.getParameter和request.getParameterValues方法来有效的访问参数值。

    例如,使用表达式param.order{param["order"]}来访问命名为order的参数。

    下面是访问命名为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对象返回字符串数组。

    这将产生如下所示结果:

    4、header和headerValues对象

    header和headerValue对象通常通过request.getHeader和request.getHeaders方法来有效的访问标头值。

    例如,使用表达式header.useragent{header["user-agent"]}来访问命名得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>

    header对象返回单个字符串值,而headerValues对象返回字符串数组。

    这将产生如下所示结果:

    测试工程:https://github.com/easonjim/5_java_example/tree/master/jspbasics/test21

  • 相关阅读:
    topcoder srm 681 div1
    topcoder srm 683 div1
    topcoder srm 684 div1
    topcoder srm 715 div1
    topcoder srm 685 div1
    topcoder srm 687 div1
    topcoder srm 688 div1
    topcoder srm 689 div1
    topcoder srm 686 div1
    topcoder srm 690 div1 -3
  • 原文地址:https://www.cnblogs.com/EasonJim/p/6971552.html
Copyright © 2011-2022 走看看