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 标签使用循环和决策语句。