ภาษาการแสดงออกใน JSP
ภาษานิพจน์ (EL) คืออะไร?
Expression Language (EL) เป็นกลไกที่ทำให้การเข้าถึงข้อมูลที่จัดเก็บง่ายขึ้น Java ส่วนประกอบถั่วและวัตถุอื่น ๆ เช่นคำขอ เซสชัน และแอปพลิเคชัน ฯลฯ
มีตัวดำเนินการมากมายใน 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: Expression Language (EL) ถูกกำหนดไว้โดยให้เราทำการบวกตัวเลขสองตัวคือ 1+2 ดังนั้นผลลัพธ์ที่ได้จะเป็น 3
เมื่อคุณรันโค้ดข้างต้นคุณจะได้ผลลัพธ์ดังต่อไปนี้
เอาท์พุต:
- นิพจน์คือ: 3 (เนื่องจากตัวเลข 1+2 จะถูกเพิ่มเข้าไปและทำหน้าที่เป็นผลลัพธ์)
คำสั่งควบคุมการไหล:
JSP ให้อำนาจของ Java เพื่อนำไปฝังในแอปพลิเคชัน เราสามารถใช้ API และ Building Block ทั้งหมดของ Java in การเขียนโปรแกรมเจเอสพี รวมถึงคำสั่งควบคุมโฟลว์ซึ่งรวมถึงการตัดสินใจและคำสั่งลูป
คำสั่งควบคุมการไหลมีสองประเภทที่อธิบายไว้ด้านล่าง
- คำแถลงการตัดสินใจ
- คำสั่งวนรอบ
คำแถลงการตัดสินใจ:
คำสั่งการตัดสินใจใน JSP ขึ้นอยู่กับว่าชุดเงื่อนไขเป็นจริงหรือเท็จ คำสั่งจะทำงานตามนั้น
คำแถลงการตัดสินใจมีสองประเภทที่อธิบายไว้ด้านล่าง:
- ถ้า-อย่างอื่น
- สลับ
JSP ถ้า-อย่างอื่น
คำสั่ง “If else” เป็นคำสั่งพื้นฐานของคำสั่ง control flow ทั้งหมด และคำสั่งนี้จะบอกให้โปรแกรมดำเนินการโค้ดบางส่วนเฉพาะในกรณีที่การทดสอบนั้นประเมินว่าเป็นจริงเท่านั้น
เงื่อนไขนี้ใช้เพื่อทดสอบเงื่อนไขมากกว่าหนึ่งเงื่อนไขว่าเป็นจริงหรือเท็จ
- หากเงื่อนไขแรกเป็นจริง ระบบจะดำเนินการ "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: เดือนที่ตั้งชื่อตัวแปรจะเริ่มต้นเป็น 5 ในแท็กนิพจน์
- รหัสบรรทัด 11: ในแท็ก EL มีคำว่า "if Condition" ระบุว่าถ้าเดือนมีค่าเท่ากับ 2 (ทดสอบเงื่อนไขที่นี่ว่าเป็นจริงหรือเท็จ)
- รหัสบรรทัด 12: หากเงื่อนไขเป็นจริงซึ่งตัวแปรเดือนคือ 2 ตัวแปรจะพิมพ์ไปที่เอาท์พุตสตรีม
- รหัสบรรทัด 13-15: หากเงื่อนไขข้างต้นล้มเหลว ระบบจะย้ายไปยังส่วนอื่นสำหรับกรณีอื่นๆ ทั้งหมดที่คำสั่งจะพิมพ์ไปยังเอาท์พุตสตรีมและเงื่อนไขถูกปิด
เมื่อคุณรันโค้ดข้างต้นคุณจะได้ผลลัพธ์ดังต่อไปนี้
Output:
- เนื่องจากเดือนที่เรามีคือ 5 ซึ่งไม่เท่ากับ #2 (กุมภาพันธ์) ดังนั้น เราจึงมีผลลัพธ์เป็น "เดือนอื่นที่ไม่ใช่กุมภาพันธ์" (เดือนจะระบุเป็น 5 ดังนั้นจึงมีการดำเนินการอื่น)
เจเอสพี สวิตช์
เนื้อความของคำสั่ง switch เรียกว่า "switch block"
- กรณีสวิตช์ใช้เพื่อตรวจสอบจำนวนเส้นทางการดำเนินการที่เป็นไปได้
- สวิตช์สามารถใช้ได้กับข้อมูลทุกประเภท
- คำสั่ง 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 case ตรงกัน และผลลัพธ์คือวันอังคาร:
<%@ 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: ตัวแปรที่ตั้งชื่อสัปดาห์จะเริ่มต้นเป็น 2 ในแท็กนิพจน์
- รหัสบรรทัด 11: ในแท็ก EL กรณีสวิตช์จะเริ่มต้นโดยที่สัปดาห์ถูกส่งเป็นพารามิเตอร์
- รหัสบรรทัด 12 - 29: ทุกกรณีได้รับการกล่าวถึงโดยเริ่มจากกรณีที่ 0 ถึงกรณีที่ 5 โดยที่ค่าของพารามิเตอร์สัปดาห์จะตรงกับกรณีต่างๆ และเอาต์พุตจะถูกพิมพ์ตามลำดับ ในกรณีนี้ ค่าคือ 2 ดังนั้นกรณีที่ 2 จะถูกดำเนินการในกรณีนี้ ที่นี่ “out” คือคลาสของ JSP ซึ่งเขียนสตรีมเอาต์พุตสำหรับการตอบสนองที่สร้างขึ้น และ “println” เป็นวิธีการของคลาสนั้น
- รหัสบรรทัด 30-32: หากทุกกรณีข้างต้นล้มเหลว มันจะย้ายไปยังส่วนเริ่มต้นและจะถูกดำเนินการ โดยที่คำสั่งจะพิมพ์ไปยังเอาท์พุตสตรีมและเงื่อนไขถูกปิด
เมื่อคุณรันโค้ดข้างต้นคุณจะได้ผลลัพธ์ดังต่อไปนี้
Output:
- ผลลัพธ์ในกรณีนี้คือวันอังคารเนื่องจากเรียกว่ากรณีที่ 2
คำสั่งวนรอบ
JSP สำหรับวง
ใช้สำหรับวนซ้ำองค์ประกอบสำหรับเงื่อนไขบางอย่าง และมีพารามิเตอร์ 3 ตัว
- ตัวนับตัวแปรถูกเตรียมใช้งานแล้ว
- เงื่อนไขจนถึงจะต้องดำเนินการวนซ้ำ
- ต้องเพิ่มตัวนับ
สำหรับไวยากรณ์ลูป:
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 loop เริ่มต้นซึ่งมีพารามิเตอร์สามตัว:
- ตัวแปร i เริ่มต้นเป็น 0
- มีการกำหนดเงื่อนไขโดยที่ i มีค่าน้อยกว่าตัวแปรท้องถิ่น num
- และฉันจะเพิ่มขึ้นทุกครั้งที่วนซ้ำ
ในเนื้อความของ "forloop" มีคลาสของ JSP ออกมาซึ่งพิมพ์ลงในสตรีมเอาต์พุตโดยใช้วิธี println โดยที่เรากำลังพิมพ์ตัวแปร i
เมื่อคุณรันโค้ดข้างต้นคุณจะได้ผลลัพธ์ดังต่อไปนี้
Output:
- เอาท์พุต Numbers คือ 0 1 2 3 4 ในตัวอย่างนี้ เราจะให้เงื่อนไขที่ว่าจนกว่าตัวนับจะน้อยกว่าเท่ากับตัวแปร จะต้องดำเนินการ "for loop" ตัวเลขคือ 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 และวันเป็น 2 ในแท็กนิพจน์
- รหัสบรรทัด 11-17: ในแท็ก EL จะมีคำว่า " while loop" จะวนซ้ำจนกว่าเราจะมีเงื่อนไขที่ตั้งไว้ราวกับว่าวันมีค่ามากกว่าหรือเท่ากับตัวแปร i จะเป็นจริง (วัน>=i)ภายในนั้นมี “if Condition” (วันเท่ากับ i) และ “if Condition” เป็นจริง จากนั้นมันจะพิมพ์สตรีมเอาต์พุต และจะออกจากลูป while มิฉะนั้นตัวแปร i จะเพิ่มขึ้นและ วนซ้ำ
เมื่อเรารันโค้ดจะได้ผลลัพธ์ดังนี้
ผลลัพธ์คือ:
- ผลลัพธ์ของโค้ดนี้จะเป็น “its Monday"
JSP Operaโปร
JSP Operators รองรับตัวดำเนินการทางคณิตศาสตร์และตรรกะส่วนใหญ่ซึ่งได้รับการสนับสนุนโดย ชวา ภายในแท็กภาษาแสดงออก (EL) ตัวดำเนินการที่ใช้บ่อยมีดังต่อไปนี้:
ต่อไปนี้คือตัวดำเนินการ:
| . | เข้าถึงคุณสมบัติ bean หรือรายการแผนที่ |
| [] | เข้าถึงอาร์เรย์หรือองค์ประกอบรายการ |
| () | จัดกลุ่มนิพจน์ย่อยเพื่อเปลี่ยนลำดับการประเมิน |
| + | นอกจากนี้ |
| - | การลบหรือการปฏิเสธของค่า |
| * | การคูณ |
| / หรือ div | การแบ่ง |
| % หรือดัดแปลง | โมดูโล่ (ที่เหลือ) |
| == หรือสมการ | ทดสอบความเท่าเทียมกัน |
| != หรือ ne | ทดสอบความไม่เท่าเทียมกัน |
| < หรือ lt | ทดสอบได้น้อยกว่า |
| > หรือ gt | ทดสอบให้มากกว่า |
| <= หรือ ล | ทดสอบน้อยกว่าหรือเท่ากับ |
| >= หรือ ge | ทดสอบมากกว่าหรือเท่ากับ |
| &&หรือและ | ทดสอบตรรกะและ |
| - หรือหรือ | ทดสอบตรรกะหรือ |
| - หรือไม่ | ส่วนเสริม Unary Boolean |
| ว่างเปล่า | ทดสอบค่าตัวแปรว่าง |
ในตัวอย่างนี้
- เรากำลังประกาศตัวแปรสองตัวคือ num1 และ num2 จากนั้นรับตัวแปร num3 โดยที่เราใช้ตัวดำเนินการ JSP + by เพื่อเพิ่ม 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" ซึ่งเราจะคูณตัวเลขสองตัวคือ "num1" และ "num2" และรับเอาต์พุตใน "num4" และจะพิมพ์สตรีมเอาต์พุต
เมื่อคุณรันโค้ดข้างต้นคุณจะได้ผลลัพธ์ดังต่อไปนี้
Output:
- เอาต์พุตแรกคือหมายเลข 4 คือ 500 (ตัวแปร num4 ซึ่งก็คือ num1*num2)
- เอาต์พุตที่สองคือหมายเลข 3 คือ 60 (ตัวแปร num3 ซึ่ง num1+num2)
สรุป
- JSP Expression Language (EL) ช่วยให้เข้าถึงแอปพลิเคชันสำหรับข้อมูลที่จัดเก็บไว้ในส่วนประกอบ javabeans ได้อย่างง่ายดาย
- นอกจากนี้ยังอนุญาตให้สร้างนิพจน์ที่เป็นทั้งทางคณิตศาสตร์และตรรกะ
- ภายในแท็ก EL เราสามารถใช้จำนวนเต็ม ตัวเลขทศนิยมลอยตัว สตริง และค่าบูลีนได้
- ใน JSP เรายังสามารถใช้ลูปและคำสั่งการตัดสินใจโดยใช้แท็ก EL






