橘子味的心
标题:JSP表达式语言(EL)

JSP表达式语言(EL)使得可以轻松访问存储在JavaBeans组件中的应用程序数据。JSP EL允许用来创建算术逻辑表达式。 在JSP EL表达式中,可以使用整数,浮点数,字符串,布尔值的内置常量为truefalse,以及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编译器在属性中遇到${}形式时,它会生成代码以评估表达式并替换expresson的值。

还可以在标签的模板文本中使用JSP EL表达式。 例如,<jsp:text>标签只是将其内容插入到JSP的正文内。以下<jsp:text>声明将<h1> Hello JSP!</ h1>插入JSP输出 -

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

现在,可以使用与属性相同的${}语法,将JSP EL表达式包含在<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属性如下:

<%@ page isELIgnored = "true" %>

此属性的有效值为truefalse。 如果设置为true,EL表达式在静态文本或标签属性中显示时将被忽略。 如果为false,EL表达式将由容器进行评估。

EL中的基本运算符

JSP表达式语言(EL)支持Java支持的大多数算术和逻辑运算符。下表列出了最常用的运算符 -

编号 运算符 描述
1 . 访问一个bean属性或Map的项
2 [] 访问数组或List元素
3 () 组合子表达式以更改评估顺序
4 + 相加
5 - 减去或取反一个值
6 * 乘法
7 /div 除法
8 %mod 求模
9 ==eq 测试等于
10 !=ne 测试不等于
11 <lt 测试小于
12 >gt 测试大于
13 <=le 测试小于或等于
14 >=ge 测试大于或等于
15 &&and 测试逻辑与
16 or 测试逻辑或
17 !not 一元布尔互补
18 empty 测试空变量值

JSP EL函数

JSP EL允许在表达式中使用函数。必须在自定义标签库中定义这些函数。函数用法具有以下语法 -

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

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

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

要使用任何标签库(标准或自定义)中的函数,必须在服务器上安装该库,并且必须使用JTAG代码中所述的<taglib>指令将库包含在JSP中。

JSP EL隐式对象

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

编号 隐式对象 描述
1 pageScope 来自页面范围的范围变量
2 requestScope 来自请求范围的范围变量
3 sessionScope 会话范围的范围变量
4 applicationScope 应用范围的范围变量
5 param 请求参数作为字符串
6 paramValues 请求参数作为字符串集合
7 header HTTP请求标头作为字符串
8 headerValues HTTP请求标头作为字符串集合
9 initParam 上下文初始化参数
10 cookie Cookie值
11 pageContext 当前页面的JSP PageContext对象

可以在表达式中使用这些对象,就像它们是变量一样。以下示例将帮助了解这些概念 -

pageContext对象

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

${pageContext.request.queryString}

范围对象

pageScoperequestScopesessionScopeapplicationScope变量提供对存储在每个范围级别的变量的访问。

例如,如果需要显式访问应用程序范围中的变量,则可以通过applicationScope变量 - applicationScope.box来访问它。

param和paramValues对象

可以通过paramparamValues对象的request.getParameterrequest.getParameterValues方法来访问参数值。

例如,要访问order参数,请使用表达式${param.order}${param [“order”]}

以下是访问username请求参数的示例。文件:getParameter.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*"%>
<%
    String title = "Accessing Request Param";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
    <%
        out.print(title);
    %>
</title>
</head>
<body>
    <div style="margin: auto; width: 100%">
        <center>
            <h2>
                <%
                    out.print(title);
                %>
            </h2>
        </center>

        <div align="center">
            <p>username参数值:${param["username"]}</p>
        </div>
    </div>
</body>
</html>

在编写上面文件以后,部署项目文件,打开浏览器访问:http://localhost:8080/jspEL/getParameter.jsp?username=maxsu,得到以下结果 -

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

header和headerValues对象

headerheaderValues对象可以访问通过request.getHeaderrequest.getHeaders方法通常可用的头值。

例如,要访问user-agent头,可使用${header.user-agent}${header [“user-agent”]}表达式。

以下是访问user-agent头参数的示例,文件:**

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*"%>
<%
    String title = "User Agent Example";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
    <%
        out.print(title);
    %>
</title>
</head>
<body>
    <div style="margin: auto; width: 100%">
        <center>
            <h1>
                <%
                    out.print(title);
                %>
            </h1>
        </center>

        <div align="center">
            <p>${header["user-agent"]}</p>
        </div>
    </div>
</body>
</html>

打开浏览器访问URL:http://localhost:8080/jspEL/header.jsp,输出以下结果 -

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


分类