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。

当您执行上述代码时,将获得以下输出。

输出:

JSP Expression Language

  • 表达式是:3(因为数字 1+2 将被相加并作为输出)

流程控制语句

JSP 提供了Java的功能,可以嵌入到应用程序中。我们可以在JSP编程中使用Java的所有API和构建块,包括控制流语句,这些语句包括决策制定和循环语句。

以下是两种流程控制语句;

  1. 决策语句
  2. 循环语句

决策语句

JSP中的决策语句基于设置的条件是真还是假。语句将相应地表现。

以下是两种决策语句;

  1. If – else
  2. 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 部分,对于所有其他情况,该语句将打印到输出流,并且条件关闭。

当您执行上述代码时,将获得以下输出。

输出

JSP 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 部分并被执行,其中语句将打印到输出流,条件关闭。

当您执行上述代码时,将获得以下输出。

输出

JSP Switch

  • 在这种情况下,输出是 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>

代码解释

  1. 代码行 10:变量“num”被初始化为 5,在表达式标签中。
  2. 代码行 11-14:在 EL 标签中,“out”是 JSP 的类,“println”是 out 的方法,用于在输出流中打印,并且 for 循环开始,它有三个参数。
    • 变量 i 被初始化为 0,
    • 给出了条件,即 i 应小于局部变量 num,
    • 并且每次循环迭代时 i 都会递增。

在“forloop”的主体中,有 JSP 的 out 类,它使用 println 方法打印到输出流,我们正在打印变量 i。

当您执行上述代码时,将获得以下输出。

输出

JSP For loop

  • 输出数字是 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 变量递增,循环继续迭代。

当我们执行代码时,将获得以下输出。

输出是

JSP While loop

  • 此代码的输出将是“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”,然后打印输出流。

当您执行上述代码时,将获得以下输出。

输出

JSP Operators

  • 第一个输出是 Number 4 is 500(变量 num4,即 num1*num2)。
  • 第二个输出是 Number 3 is 60(变量 num3,即 num1+num2)。

摘要

  • JSP 表达式语言(EL)使得访问存储在 javabeans 组件中的应用程序数据变得容易。
  • 它还允许创建算术和逻辑表达式。
  • 在 EL 标签中,我们可以使用整数、浮点数、字符串和布尔值。
  • 在 JSP 中,我们还可以使用 EL 标签使用循环和决策语句。