什么是表达式语言 (EL)?
表达式语言(EL)是一种机制,可以简化存储在Java Bean组件和其他对象(如请求,会话和应用程序等)中的数据的可访问性。JSP 中有许多运算符在 EL 中使用,如算术运算符和逻辑运算符来执行表达式。它是在JSP 2.0中引入的
在本教程中,您将学习 -
表达式语言的 JSP 语法 (EL)
EL 的语法 :$(表达式)
- 在 JSP 中,大括号中存在的任何内容都会在运行时发送到输出流时进行评估。
- 表达式是有效的 EL 表达式,可以与静态文本混合,并且可以与其他表达式组合以形成更大的表达式。
为了更好地理解表达式在JSP中的工作原理,我们将看到下面的示例。
在此示例中,我们将看到如何将 EL 用作运算符来将两个数字 (1+2) 相加并分别获得输出。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Guru JSP1</title>
</head>
<body>
<a>Expression is:</a>
${1+2};
</body>
</html>
代码说明:
- 代码行 11: 表达式语言(EL)设置在我们添加两个数字1 + 2的地方,因此它将输出为3。
执行上述代码时,将具有以下输出。
输出:
- 表达式为:3(数字 1+2 将被添加并用作输出)
流控制语句:
JSP 提供了 Java 的强大功能,可以嵌入到应用程序中。我们可以在JSP编程中使用Java的所有API和构建块,包括控制流语句,其中包括决策和循环语句。
下面描述了两种类型的流控制语句;
- 决策声明
- 循环语句
决策声明:
JSP 中的决策语句基于条件集是真还是假。该语句将相应地运行。
有两种类型的决策声明如下所述:
- 如果 – 否则
- 开关
JSP If-else
"if else"语句是所有控制流语句的基础,它告诉程序仅在特定测试的计算结果为 true 时才执行代码的某个部分。
此条件用于测试多个条件,无论它们是真还是假。
- 如果第一个条件为真,则执行"if block",然后
- 如果为 false,则执行"else block"
if – else 语句的语法:
If(test condition)
{
//Block of statements
}
else
{
//Block of statements
}
在此示例中,
我们将通过获取变量并检查变量是否与它所初始化的内容匹配的值来测试"if else"条件:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Guru JSP2</title>
</head>
<body>
<%! int month=5; %>
<% if(month==2){ %>
<a>Its February</a>
<% }else{ %>
<a>Any month other than February</a>
<%} %>
</body>
</html>
代码说明:
- 代码行 10: 名为 month 的变量在表达式标记中初始化为 5
- 代码行 11: 在 EL 标记中,有"如果条件"指出如果月份等于 2(条件在这里测试为真或假)
- 代码行 12: 如果条件为真,即变量月份为2,则它将打印到输出流
- 代码行 13-15: 如果上述 if 条件失败,则对于语句将打印到输出流且条件关闭的所有其他情况,它将移动到 else 部分
执行上述代码时,将具有以下输出。
输出:
- 由于我们的月份是5,这不等于#2(2月)。因此,我们有输出"2月以外的任何月份"(月份被提及为5,因此执行其他月份)
JSP Switch
switch 语句的正文称为"开关块"。
- 开关大小写用于检查可能的执行路径数。
- 交换机可用于所有数据类型
- switch 语句包含多个事例和一个缺省事例
- 它计算表达式,然后执行匹配大小写后面的所有语句
switch 语句的语法:
switch (operator)
{
Case 1:
Block of statements
break;
Case 2:
Block of statements
break;
case n:
Block of statements
break;
default:
Block of statements
break;
}
- 开关块以一个参数开头,该参数是需要传递的运算符,并且
- 然后有不同的情况提供条件,并且与操作员匹配的情况将执行该情况。
在下面的示例中,
我们定义了一个变量周,它与情况匹配,以真为准。在本例中,周为 2,因此为 2nd大小写匹配,输出为星期二:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Guru JSP3</title>
</head>
<body>
<%! int week=2; %>
<% switch(week){
case 0:
out.println("Sunday");
break;
case 1:
out.println("Monday");
break;
case 2:
out.println("Tuesday");
break;
case 3:
out.println("wednesday");
break;
case 4:
out.println("Thursday");
break;
case 5:
out.println("Friday");
break;
default:
out.println("Saturday");
}
%>
</body>
</html>
代码说明:
- 代码行 10: 名为 week 的变量在表达式标记中初始化为 2
- 代码行 11: 在 EL 标记中,开关情况启动,其中周作为参数传递
- 代码行 12 – 29: 从案例 0 到案例 5,所有案例都已提及,其中 week 参数的值与案例匹配,因此输出是打印的。在这种情况下,值为 2,因此在这种情况下将执行情况 2。这里的"out"是JSP的类,它为生成的响应写入输出流,而"println"是该类的方法。
- 代码行 30-32: 如果上述所有情况都失败,则它将移动到默认部分并执行,其中语句将打印到输出流并关闭条件
执行上述代码时,将具有以下输出。
输出:
- 在本例中,输出为星期二,因为调用了第二种情况。
循环语句
JSP For 循环
它用于迭代特定条件的元素,并且具有三个参数。
- 变量计数器已初始化
- 条件直到必须执行循环
- 计数器必须递增
对于循环语法:
For(inti=0;i<n;i++)
{
//block of statements
}
在此示例中,
我们有 for 循环,它迭代直到计数器小于给定的数字:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Guru JSP4</title>
</head>
<body>
<%! int num=5; %>
<% out.println("Numbers are:");
for(int i=0;i<num;i++){
out.println(i);
}%>
</body>
</html>
代码说明:
- 代码行 10: 名为"num"的变量在表达式标记中初始化为 5
- 代码行 11-14: 在 EL 标记中,"out"是 JSP 的类,"println"是输出流中输出的方法,for 循环启动,它有三个参数:
- 变量 i 初始化为 0,
- 条件给出,其中 i 小于局部变量 num,
- 并且每次循环迭代时,i都会递增。
在"forloop"的主体中,有一类JSP,它使用方法println打印到输出流中,我们正在打印变量i。
执行上述代码时,将具有以下输出。
输出:
- 输出数字为 0 1 2 3 4。在这个例子中,我们给出的条件是,直到计数器小于等于变量,必须执行"for循环"。数字为 5,因此循环将从 0 开始,一直运行到 4(5 次)。因此,输出。
JSP 同时循环
它用于迭代元素,其中它具有条件的一个参数。
语法:
While(i<n)
{
//Block of statements
}
在此示例中,
我们有一个 while 循环,它将迭代到大于计数器的日:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Guru JSP5</title>
</head>
<body>
<%! int day=2; int i=1; %>
<% while(day>=i){
if(day==i){
out.println("Its Monday");
break;}
i++;}
%>
</body>
</html>
代码说明:
- 代码行 10: 在表达式标记中,名为 i 的变量初始化为 1,day 为 2
- 代码行 11-17: 在EL标签中,有"while loop"将迭代,直到我们设置了一个条件,好像日期大于或等于i变量将为真。(天>=i)
其中有"if condition"(day等于i)和"if condition"为真,那么它将打印输出流,它将退出while循环,否则i变量递增并循环迭代。
当我们执行代码时,我们将得到以下输出
输出为:
- 此代码的输出将是"其星期一"。
JSP 运算符
JSP 运算符支持其大多数算术和逻辑运算符,这些运算符由 java in 表达式语言 (EL) 标记支持。
下面提到了常用的运算符:
以下是运营商:
. | 访问 Bean 属性或地图条目 |
[] | 访问数组或 List 元素 |
( ) | 对子表达式进行分组以更改评估顺序 |
+ | 加法 |
– | 减去或否定值 |
* | 乘法 |
/ 或 div | 划分 |
% 或 mod | 模数(余数) |
== 或 eq | 平等测试 |
!= 或 ne | 不等式测试 |
< 或 lt | 测试小于 |
> 或 gt | 测试大于 |
< = 或 le | 小于或等于的测试 |
>= 或 ge | 测试大于或等于 |
&& or 和 | 测试逻辑 AND |
||或或 | 测试逻辑 OR |
!还是没有 | 一元布尔补码 |
空 | 测试空变量值 |
在此示例中,
- 我们声明两个变量 num1 和 num2,然后取一个变量 num3,其中我们使用 JSP 运算符 + by 将 num1 和 num2 相加,得到 num3。
- 然后,我们使用 JSP 运算符 (!= , >) 检查 num3 是否不等于 0 的条件,然后
- 然后取另一个变量num4,乘以两个num1和num2,我们得到num4。
这些所有数字都应该打印出来作为我们的输出:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Guru JSP6</title>
</head>
<body>
<% int num1=10; int num2 = 50;
int num3 = num1+num2;
if(num3 != 0 || num3 > 0){
int num4= num1*num2;
out.println("Number 4 is " +num4);
out.println("Number 3 is " +num3);
}%>
</body>
</html>
代码说明:
- 代码行 10: 在表达式标记中,名为 num1 的变量初始化为 10,num2 初始化为 50
- 代码行 11: 变量 num3 是 num1 和 num2 的总和,其中我们使用加法运算符
- 代码行 12-16: 在 EL 标记中,我们使用了一个 OR 条件,即逻辑运算符和算术运算符来检查 if 条件中的 num3 是否大于 0。当任何一个条件为真时,将使用OR,在这种情况下,它将输入"if case",其中我们将两个数字"num1"和"num2"相乘,并在"num4"中获取输出,它将打印输出流。
执行上述代码时,将具有以下输出。
输出:
- 第一个输出是数字4是500(变量num4是num1 * num2)
- 第二个输出是数字 3 是 60(变量 num3,其中 num1+num2)
总结:
- JSP 表达式语言 (EL) 使访问存储在 javabeans 组件中的数据的应用程序变得容易。
- 它还允许创建既算术又符合逻辑的表达式。
- 在EL标签中,我们可以使用整数。浮点数、字符串和布尔值。
- 在JSP中,我们还可以使用循环和使用EL标签的决策语句