JSP中的表达式语言
什么是表达式语言(EL)?
表达式语言(EL)是一种简化了对存储在Java Bean组件和其他对象(如请求、会话和应用程序等)中的数据可访问性的机制。
JSP中有许多用于EL的运算符,如算术运算符和逻辑运算符,用于执行表达式。它是在JSP 2.0中引入的。
表达式语言(EL)的JSP语法
EL语法:$(expression)
- 在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中的决策语句基于设置的条件是真还是假。语句将相应地表现。
以下是两种决策语句;
- If – else
- switch
JSP If-else
“If else”语句是所有控制流语句的基础,它告诉程序仅当特定测试评估为真时才执行代码的某个部分。
此条件用于测试一个或多个条件是否为真或假。
- 如果第一个条件为真,则执行“if块”,
- 如果为假,则执行“else块”。
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 标签中有一个“if 条件”,声明如果 month 等于 2(此处测试条件为真或假)。
- 代码行 12:如果条件为真,即变量 month 是 2,则它将打印到输出流。
- 代码行 13-15:如果上面的 if 条件失败,那么它将进入 else 部分,对于所有其他情况,该语句将打印到输出流,并且条件关闭。
当您执行上述代码时,将获得以下输出。
输出
- 由于 month 是 5,不等于 #2(二月)。因此,我们的输出是“二月以外的任何月份”(月份显示为 5,因此执行 else)。
JSP Switch
switch 语句的主体称为“switch 块”。
- switch case 用于检查多个可能的执行路径。
- switch 可以与所有数据类型一起使用。
- switch 语句包含多个 case 和一个 default case。
- 它评估表达式,然后执行匹配 case 后面的所有语句。
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;
}
- Switch 块以一个参数开始,即需要传递的运算符,
- 然后有不同的 case 提供条件,任何与运算符匹配的 case 都会被执行。
在下面的示例中,我们定义了一个名为 week 的变量,并将其与 true 的 case 进行匹配。在这种情况下,week 为 2,因此匹配第 2 个 case,输出是 Tuesday(星期二)。
<%@ 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 标签中,switch case 开始,并将 week 作为参数传递。
- 代码行 12-29:所有 case 都已提及,从 case 0 到 case 5,其中 week 参数的值与 case 进行匹配,并相应地打印输出。在这种情况下,值为 2,因此将执行 case 2。此处“out”是 JSP 的类,用于写入生成响应的输出流,“println”是该类的方法。
- 代码行 30-32:如果以上所有 case 都失败,则它将进入 default 部分并被执行,其中语句将打印到输出流,条件关闭。
当您执行上述代码时,将获得以下输出。
输出
- 在这种情况下,输出是 Tuesday(星期二),因为调用了第 2 个 case。
循环语句
JSP For循环
它用于根据特定条件迭代元素,并且有三个参数。
- 变量计数器被初始化
- 循环需要执行的条件
- 计数器需要递增
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”是 out 的方法,用于在输出流中打印,并且 for 循环开始,它有三个参数。
- 变量 i 被初始化为 0,
- 给出了条件,即 i 应小于局部变量 num,
- 并且每次循环迭代时 i 都会递增。
在“forloop”的主体中,有 JSP 的 out 类,它使用 println 方法打印到输出流,我们正在打印变量 i。
当您执行上述代码时,将获得以下输出。
输出
- 输出数字是 0 1 2 3 4。在此示例中,我们给出条件,即只要计数器小于或等于某个变量,“for loop”就必须执行。num 是 5,所以循环将从 0 开始,运行到 4(5 次)。因此,输出。
JSP While循环
它用于迭代元素,其中有一个条件参数。
语法
While(i<n)
{
//Block of statements
}
在此示例中,我们有一个 while 循环,它将迭代直到 day 大于或等于计数器。
<%@ 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”将迭代直到我们有一个条件设置为如果 day 大于等于 i 变量将为真(day>=i)。在其中有一个“if 条件”(day 等于 i),如果“if 条件”为真,则它将打印输出流,并退出 while 循环,否则 i 变量递增,循环继续迭代。
当我们执行代码时,将获得以下输出。
输出是
- 此代码的输出将是“its Monday”。
JSP运算符
JSP 运算符支持表达式语言(EL)标签中 java 支持的绝大多数算术和逻辑运算符。下面提到了常用的运算符。
以下是运算符:
| . | 访问 bean 属性或 Map 条目 |
| [] | 访问数组或 List 元素 |
| ( ) | 对子表达式进行分组以更改评估顺序 |
| + | 加法 |
| – | 值的减法或取反 |
| * | 乘法 |
| / 或 div | 事业部 |
| % 或 mod | 模(余数) |
| == 或 eq | 相等性测试 |
| != 或 ne | 不等性测试 |
| < 或 lt | 小于测试 |
| > 或 gt | 大于测试 |
| <= 或 le | 小于等于测试 |
| >= 或 ge | 大于等于测试 |
| && 或 and | 逻辑 AND 测试 |
| || 或 or | 逻辑 OR 测试 |
| ! 或 not | 一元布尔非 |
| Empty | 空变量值测试 |
在此示例中,
- 我们声明了两个变量 num1 和 num2,然后取一个变量 num3,其中我们使用 JSP 运算符 + 来添加 num1 和 num2 并得到 num3。
- 然后我们检查一个条件,即 num3 是否不等于 0,使用 JSP 运算符(!=、>),
- 然后取另一个变量 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 条件,这是一个逻辑运算符和算术运算符,用于检查 num3 是否大于 0,在 if 条件中。当任何一个条件为真时,就会使用 OR,在这种情况下,它将进入“if case”,我们正在将两个数字“num1”和“num2”相乘,并将输出放入“num4”,然后打印输出流。
当您执行上述代码时,将获得以下输出。
输出
- 第一个输出是 Number 4 is 500(变量 num4,即 num1*num2)。
- 第二个输出是 Number 3 is 60(变量 num3,即 num1+num2)。
摘要
- JSP 表达式语言(EL)使得访问存储在 javabeans 组件中的应用程序数据变得容易。
- 它还允许创建算术和逻辑表达式。
- 在 EL 标签中,我们可以使用整数、浮点数、字符串和布尔值。
- 在 JSP 中,我们还可以使用 EL 标签使用循环和决策语句。






