ภาษาการแสดงออกใน 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