วงจรชีวิตของ JSP
JSP LifeCycle คืออะไร?
JSP Life Cycle ถูกกำหนดให้เป็นการแปลเพจ JSP ไปเป็นเซิร์ฟเล็ต เนื่องจากเพจ JSP จำเป็นต้องแปลงเป็นเซิร์ฟเล็ตก่อนจึงจะประมวลผลคำขอบริการได้ วงจรชีวิตเริ่มต้นด้วยการสร้าง JSP และจบลงด้วยการล่มสลายของสิ่งนั้น
ระยะต่างๆ ของวงจรชีวิตของ JSP
เมื่อเบราว์เซอร์ถามถึง JSP เอ็นจิ้น JSP จะตรวจสอบก่อนว่าจำเป็นต้องคอมไพล์เพจหรือไม่ หาก JSP ถูกคอมไพล์ครั้งล่าสุดหรือการแก้ไขล่าสุดเสร็จสิ้นใน JSP กลไก JSP จะคอมไพล์เพจ
กระบวนการรวบรวมหน้า JSP ประกอบด้วยสามขั้นตอน:
- การแยกวิเคราะห์ JSP
- เปลี่ยน JSP ให้เป็นเซิร์ฟเล็ต
- กำลังรวบรวมเซิร์ฟเล็ต
แผนภาพวงจรชีวิตของ JSP
JSP Lifecycle แสดงในแผนภาพด้านล่าง
ขั้นตอนต่อไปนี้จะอธิบายวงจรชีวิตของ JSP:
- คำแปลหน้า JSP
- การรวบรวมหน้า JSP (การรวบรวมหน้า JSP เป็น _jsp.java)
- การโหลดคลาส (_jsp.java ถูกแปลงเป็นไฟล์คลาส _jsp.class)
- การสร้างอินสแตนซ์ (วัตถุของเซิร์ฟเล็ตที่สร้างขึ้นถูกสร้างขึ้น)
- การเริ่มต้น(
_jspinit()
วิธีการถูกเรียกใช้โดยคอนเทนเนอร์) - คำขอดำเนินการ(
_jspservice()
วิธีการถูกเรียกใช้โดยคอนเทนเนอร์) - ทำลาย (
_jspDestroy()
วิธีการเรียกใช้โดยคอนเทนเนอร์)
ให้เรามีบทสรุปโดยละเอียดเพิ่มเติมเกี่ยวกับประเด็นข้างต้น:
1) การแปลหน้า JSP:
A Java ไฟล์เซิร์ฟเล็ตถูกสร้างขึ้นจากไฟล์ต้นฉบับ JSP นี่เป็นก้าวแรกของวงจรชีวิต JSP ในขั้นตอนการแปล คอนเทนเนอร์จะตรวจสอบความถูกต้องทางวากยสัมพันธ์ของหน้า JSP และไฟล์แท็ก
- คอนเทนเนอร์ JSP ตีความคำสั่งและการดำเนินการมาตรฐานและการดำเนินการแบบกำหนดเองที่อ้างอิงถึงไลบรารีแท็ก (ทั้งหมดเป็นส่วนหนึ่งของหน้า JSP และจะกล่าวถึงในหัวข้อถัดไป) ที่ใช้ในหน้า JSP นี้
- ในคำอธิบายรูปภาพข้างต้น demo.jsp จะถูกแปลเป็น demo_jsp.java ในขั้นตอนแรก
- ลองมาตัวอย่างของ “demo.jsp” ดังที่แสดงด้านล่าง:
สาธิต.jsp
<html> <head> <title>Demo JSP</title> </head> <% int demvar=0;%> <body> Count is: <% Out.println(demovar++); %> <body> </html>
คำอธิบายรหัสสำหรับ Demo.jsp
รหัสบรรทัด 1: แท็กเริ่มต้น html
รหัสบรรทัด 2: ป้ายหัว
รหัสบรรทัด 3 - 4: Title Tag เช่น Demo JSP และแท็กปิด head
รหัสบรรทัด 5 - 6: แท็ก Scriptlet ซึ่งเริ่มต้นการสาธิตตัวแปร
รหัสบรรทัด 7 - 8: ในแท็ก body ข้อความที่จะพิมพ์ในเอาต์พุต (จำนวนคือ: )
รหัสบรรทัด 9: แท็กสคริปต์ที่พยายามพิมพ์ตัวแปรเดโมวาร์ด้วยค่าที่เพิ่มขึ้น
รหัสบรรทัด 10 - 11: ปิดแท็กเนื้อหาและ HTML แล้ว
หน้า Demo JSP จะถูกแปลงเป็นเซิร์ฟเล็ต demo_jsp ในโค้ดด้านล่าง
คำอธิบายโค้ดสำหรับ Demo_jsp.java
รหัสบรรทัด 1: คลาส Servlet demo_jsp กำลังขยายคลาสพาเรนต์ HttpServlet
รหัสบรรทัด 2 - 3: การแทนที่วิธีการบริการของ jsp เช่น _jspservice ซึ่งมีวัตถุ HttpServletRequest และ HttpServletResponse เป็นพารามิเตอร์
รหัสบรรทัด 4: วิธีการเปิด
รหัสบรรทัด 5: การเรียกวิธีการ getWriter()
ของวัตถุตอบสนองเพื่อรับ PrintWriterobject (พิมพ์การแสดงการจัดรูปแบบของวัตถุไปยังสตรีมเอาต์พุตข้อความ)
รหัสบรรทัด 6: การเรียกเมธอด setContentType ของวัตถุตอบสนองเพื่อตั้งค่าประเภทเนื้อหา
รหัสบรรทัด 7: การใช้ write()
วิธีการของวัตถุ PrintWriter พยายามแยกวิเคราะห์ html
รหัสบรรทัด 8: กำลังเริ่มต้นตัวแปร demovar เป็น 0
รหัสบรรทัด 9: โทร write()
วิธีการของวัตถุ PrintWriter เพื่อแยกวิเคราะห์ข้อความ
รหัสบรรทัด 10: โทร print()
เมธอดของอ็อบเจ็กต์ PrintWriter เพื่อเพิ่มตัวแปร demovar จาก 0+1=1 ดังนั้นเอาต์พุตจะเป็น 1
รหัสบรรทัด 11: การใช้ write()
วิธีการของวัตถุ PrintWriter พยายามแยกวิเคราะห์ html
Output:
- ที่นี่คุณจะเห็นว่าในภาพหน้าจอเอาต์พุตคือ 1 เนื่องจาก demvar เริ่มต้นเป็น 0 แล้วเพิ่มขึ้นเป็น 0+1=1
ในตัวอย่างข้างต้น
- demo.jsp คือ JSP ที่ตัวแปรหนึ่งถูกเตรียมใช้งานและเพิ่มขึ้น JSP นี้ถูกแปลงเป็นเซิร์ฟเล็ต (demo_jsp.class ) โดยที่เอ็นจิ้น JSP โหลดเพจ JSP และแปลงเป็นเนื้อหาเซิร์ฟเล็ต
- เมื่อการแปลงเกิดขึ้น ข้อความเทมเพลตทั้งหมดจะถูกแปลงเป็น
println()
งบและทั้งหมด องค์ประกอบเจเอสพี ถูกแปลงเป็น Java รหัส.
นี่คือวิธีการแปลเพจ JSP แบบธรรมดาเป็นคลาสเซิร์ฟเล็ต
2) การรวบรวมเพจ JSP
- ไฟล์ Java servlet ที่สร้างขึ้นจะถูกคอมไพล์เป็นคลาส Java servlet
- การแปลเพจต้นฉบับของ Java ไปเป็นคลาสการใช้งานสามารถเกิดขึ้นได้ตลอดเวลาระหว่างการนำเพจ JSP ไปใช้งานในคอนเทนเนอร์และการประมวลผลเพจ JSP
- ในคำอธิบายภาพด้านบน demo_jsp.java ถูกคอมไพล์เป็นไฟล์คลาส demo_jsp.class
3) การโหลดคลาส
- ขณะนี้คลาส Servlet ที่โหลดจากแหล่ง JSP ถูกโหลดลงในคอนเทนเนอร์แล้ว
4) การสร้างอินสแตนซ์
- ในขั้นตอนนี้ ออบเจ็กต์คืออินสแตนซ์ของคลาสจะถูกสร้างขึ้น
- คอนเทนเนอร์จัดการอินสแตนซ์ของคลาสนี้ตั้งแต่หนึ่งรายการขึ้นไปเพื่อตอบสนองต่อคำขอและเหตุการณ์อื่น ๆ โดยทั่วไปแล้ว คอนเทนเนอร์ JSP จะถูกสร้างขึ้นโดยใช้คอนเทนเนอร์เซิร์ฟเล็ต คอนเทนเนอร์ JSP เป็นส่วนขยายของคอนเทนเนอร์เซิร์ฟเล็ต เนื่องจากทั้งคอนเทนเนอร์รองรับ JSP และเซิร์ฟเล็ต
- อินเทอร์เฟซ JSPPage ซึ่งจัดทำโดยคอนเทนเนอร์จัดเตรียมไว้
init()
และdestroy()
วิธีการ - มีอินเทอร์เฟซ HttpJSPPage ซึ่งให้บริการคำขอ HTTP และยังมีวิธีบริการอีกด้วย
5) การเริ่มต้น
public void jspInit() { //initializing the code }
_jspinit()
เมธอดจะเริ่มต้นอินสแตนซ์เซิร์ฟเล็ตซึ่งสร้างจาก JSP และจะถูกเรียกใช้โดยคอนเทนเนอร์ในเฟสนี้- เมื่อสร้างอินสแตนซ์แล้ว วิธีการ init จะถูกเรียกใช้ทันทีหลังจากนั้น
- มันถูกเรียกเพียงครั้งเดียวในระหว่างวงจรชีวิต JSP วิธีการเริ่มต้นจะถูกประกาศดังที่แสดงด้านบน
6) การประมวลผลคำขอ
void _jspservice(HttpServletRequest request HttpServletResponse response) { //handling all request and responses }
_jspservice()
เมธอดถูกเรียกใช้โดยคอนเทนเนอร์สำหรับคำขอทั้งหมดที่เพจ JSP สร้างขึ้นในระหว่างวงจรการใช้งาน- สำหรับระยะนี้ จะต้องผ่านขั้นตอนข้างต้นทั้งหมด จากนั้นจึงจะเรียกใช้ได้เฉพาะวิธีการบริการเท่านั้น
- มันส่งผ่านออบเจ็กต์การร้องขอและการตอบกลับ
- วิธีการนี้ไม่สามารถแทนที่ได้
- วิธีการที่แสดงไว้ด้านบน: มีหน้าที่สร้างวิธี HTTP ทั้งหมด เช่น GET, POST เป็นต้น
7) ทำลาย
public void _jspdestroy() { //all clean up code }
_jspdestroy()
คอนเทนเนอร์ก็เรียกใช้เมธอดเช่นกัน- วิธีการนี้เรียกว่าเมื่อคอนเทนเนอร์ตัดสินใจว่าไม่ต้องการอินสแตนซ์เซิร์ฟเล็ตเพื่อให้บริการคำขออีกต่อไป
- เมื่อทำการเรียกวิธีการทำลาย เซิร์ฟเล็ตก็พร้อมสำหรับการรวบรวมขยะ
- นี่คือจุดสิ้นสุดของวงจรชีวิต
- เราสามารถแทนที่ได้
jspdestroy()
วิธีการเมื่อเราทำการล้างข้อมูลใดๆ เช่น การปล่อยการเชื่อมต่อฐานข้อมูลหรือการปิดไฟล์ที่เปิดอยู่