JSP 中的表达式语言
什么是表达语言 (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 嵌入到应用程序中。我们可以使用 Java in JSP 编程 包括包含决策和循环语句的控制流语句。
下面描述了两种类型的流控制语句;
- 决策陈述
- 循环语句
决策声明:
JSP 中的决策语句基于设置的条件是真还是假。语句将相应地做出行为。
决策陈述有两种类型,如下所述:
- 如果别的
- 开关
JSP If-else
“If else” 语句是所有控制流语句的基础,它告诉程序仅当特定测试结果为真时才执行特定的代码部分。
此条件用于测试多个条件是真还是假。
- 如果第一个条件为真,则执行“if block”,并且
- 如果为假,则执行“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 标签中,有“if 条件”,表明月份是否等于 2(此处测试条件为真或假)
- 代码行12: 如果条件为真,即变量月份为 2,则它将打印到输出流
- 代码行13-15: 如果上述 if 条件失败,则它将移动到 else 部分,对于所有其他情况,语句将打印到输出流并且条件关闭
当您执行上述代码时,您将得到以下输出。
输出:
- 由于我们得到的月份是 5,不等于 #2(二月)。因此,我们输出“二月以外的任何月份”(月份为 5,因此执行其他操作)
JSP 开关
switch 语句的主体称为“switch 块”。
- switch case 用于检查可能的执行路径的数量。
- 开关可用于所有数据类型
- switch 语句包含多个 case 和一个 default 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 块以一个参数开始,该参数是需要传递的运算符,
- 然后有不同的情况提供条件,并且任何与运算符匹配的情况都会执行。
在下面的例子中,我们定义了一个变量 week,并且它与为真的情况相匹配。在本例中,week 是 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 标签中,switch case 以 week 作为参数传递
- 代码行 12 – 29: 已提及所有案例,从案例 0 到案例 5,其中 week 参数的值与案例匹配,因此输出为 print。在本例中,值为 2,因此将在本例中执行案例 2。此处,“out”是 JSP 类,用于为生成的响应写入输出流,“println”是该类的一种方法。
- 代码行30-32: 如果上述所有情况都失败,那么它将转到默认部分并执行,其中语句将打印到输出流并且条件关闭
当您执行上述代码时,您将得到以下输出。
输出:
- 在这种情况下,输出是星期二,正如第二种情况所称。
循环语句
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 类,它使用方法 println 打印到输出流中,其中打印变量 i。
当您执行上述代码时,您将得到以下输出。
输出:
- 输出 Numbers 是 0 1 2 3 4。在此示例中,我们给出条件,即直到计数器小于等于变量时,才必须执行“for 循环”。数字为 5,因此循环将从 0 开始并运行到 4(5 次)。因此输出。
JSP While 循环
它用于迭代 分子 其中它有一个条件参数。
语法:
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 循环”会不断迭代,直到我们设置一个条件,如果 day 大于或等于 i 变量则为真。(day>=i)其中有“if 条件”(day 等于 i)并且“if 条件”为真,那么它会打印输出流,并且它会退出 while 循环,否则 i 变量会增加并且循环不断迭代。
当我们执行代码时,我们将得到以下输出
输出为:
- 该代码的输出将是“其 Monday“。
JSP Opera职权范围
JSP Operators 支持大多数算术和逻辑运算符,这些运算符由 java的 在表达式语言 (EL) 标签内。常用运算符如下:
以下是运算符:
. | 访问 bean 属性或 Map 条目 |
[] | 访问数组或列表元素 |
() | 对子表达式进行分组以更改求值顺序 |
+ | 增加 |
– | 减去或取反 |
* | 乘法 |
/ 或 div | 您所属的事业部 |
% 或 mod | 模数(余数) |
== 或 eq | 测试相等性 |
!= 或 ne | 检验不平等 |
< 或 lt | 测试小于 |
> 或 gt | 测试大于 |
<= 或 le | 测试小于或等于 |
>= 或 ge | 测试大于或等于 |
&& 或 和 | 测试逻辑与 |
|| 或 或 | 测试逻辑或 |
! 或不 | 一元布尔补码 |
空的 | 测试空变量值 |
在这个例子中,
- 我们声明两个变量 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 标签来使用循环和决策语句