1. ข้อมูลเบื้องต้นเกี่ยวกับ JSP
JSP (Java Server Pages) เป็นภาษาสคริปต์ฝั่งเซิร์ฟเวอร์ เป็นเทคโนโลยีที่เพิ่มภาษา Java ให้กับเพจ HTML เพื่อสร้างเพจแบบไดนามิก: มีการเพิ่มแท็กใหม่ (<%, %>,...)
JSP เป็นเทคโนโลยีการสร้างเว็บเพจแบบไดนามิกที่พัฒนาขึ้นโดยใช้ Java และ Servlet การใช้งานพื้นฐานคือ Java Servlet
หน้า JSP ประกอบด้วยโค้ด HTML และโค้ด Java ที่ฝังอยู่ในนั้น เซิร์ฟเวอร์ประมวลผลโค้ด Java เหล่านี้หลังจากที่ไคลเอ็นต์ร้องขอเพจ จากนั้นจึงส่งคืนเพจ HTML ที่สร้างขึ้นไปยังเบราว์เซอร์ของไคลเอ็นต์
2. กระบวนการดำเนินการ JSP ไคลเอนต์ร้องขอเพจ JSP -> JSP Parser แยกวิเคราะห์ *.jsp และคอมไพล์เป็น *.java -> คำสั่ง javac คอมไพล์เป็น *.class -> รันไฟล์คลาส -> ตอบสนองและส่งกลับผลลัพธ์เป็น ลูกค้า
รหัส JSP มีสองหมวดหมู่: องค์ประกอบ JSP และข้อมูลเทมเพลต ข้อมูลเทมเพลตอ้างอิงถึงส่วนที่กลไก JSP ไม่ได้ประมวลผล กล่าวคือ กลไก JSP จะส่งออกส่วนอื่นที่ไม่ใช่แท็ก <%...%> โดยตรงโดยไม่มีการประมวลผลใดๆ
เมื่อ JSP ถูกดำเนินการเป็นครั้งแรกหรือหลังจากแก้ไขไฟล์ JSP มันจะเรียก JSP Parser เพื่อคอมไพล์ไฟล์ *.jsp ลงในโปรแกรมเซิร์ฟเล็ต ดังนั้นมันจะช้าลง
3. ไวยากรณ์พื้นฐานของ JSP
1. คำอธิบายประกอบสองประเภท
(1) ความคิดเห็น HTML คุณสามารถเพิ่มความคิดเห็นในรูปแบบ HTML ให้กับโค้ด JSP ได้ ความคิดเห็นนี้ถูกส่งไปยังไคลเอนต์แต่จะไม่แสดงบนเพจ ไวยากรณ์จะเป็นดังนี้:
หากโปรแกรมเมอร์เป็นแฮกเกอร์ ความคิดเห็นที่ส่งกลับมายังไคลเอนต์จะเป็น
(2) ความคิดเห็น JSP เขียนด้วยรหัส JSP แต่ไม่ได้ส่งไปยังไคลเอนต์
<%-- ความคิดเห็น JSP ความคิดเห็นนี้จะถูกละเว้นเมื่อมีการคอมไพล์ JSP --%>
<%-- /*ความคิดเห็นหลายบรรทัดใน Scriptlet*/ --%>
<%-- /**ความคิดเห็นแบบหลายบรรทัดใน Scriptlet ซึ่งสามารถแยกออกจากไฟล์ java โดยใช้ javadoc*/ --%>
<%-- ความคิดเห็นบรรทัดเดียวของ JSP--%>
2. 3 องค์ประกอบสคริปต์
(1) การประกาศตัวแปรระดับโลก
<%! int i=0; String str="สวัสดีชาวโลก!";
(2) การแสดงออก
ในโค้ด JSP นิพจน์มักใช้เพื่อส่งออกค่าของตัวแปรซึ่งสามารถอยู่ที่ใดก็ได้
<%! int a=1; int b=2; String str="สวัสดีชาวโลก!";
<%=a+b%> <%=str>
PS: คุณไม่สามารถใช้สัญลักษณ์ ";" เป็นจุดสิ้นสุดของนิพจน์ได้ แต่นิพจน์เดียวกันจะต้องลงท้ายด้วยเครื่องหมายอัฒภาคใน Scriptlet
(3)สคริปต์เล็ต
ส่วนสคริปต์ถูกใช้เพื่อให้มีส่วนโปรแกรม Java ที่ถูกต้อง
<% int b=3; %>ตัวแปรท้องถิ่น
3. 3 องค์ประกอบคำสั่ง
(1)คำสั่งหน้า
<%@ หน้า contentType="text/html;charset=utf-8"%>
กำหนดแอ็ตทริบิวต์โกลบอลของไฟล์ JSP รวมถึง: ภาษา, ส่วนขยาย, อิมพอร์ต, เซสชัน, บัฟเฟอร์, ออโต้ฟลัช, isThreadSafe, ข้อมูล, errorPage, isErrorPage, contentType (รูปแบบเอาต์พุตจากเซิร์ฟเวอร์ไปยังไคลเอ็นต์)
ตำแหน่งสามารถอยู่ที่ใดก็ได้บนหน้า แต่ขอแนะนำให้วางไว้ที่ด้านบนของหน้า
ภาษา: ประกาศประเภทของภาษาสคริปต์ ปัจจุบันใช้ได้เฉพาะ "java" เท่านั้น
ขยาย: ระบุชื่อเต็มของคลาส Java ที่ต้องเพิ่มเมื่อคอมไพล์ JSP มันจะจำกัดความสามารถในการคอมไพล์ของ JSP ดังนั้นโปรดใช้ด้วยความระมัดระวัง!
import: รายการแพ็คเกจ Java ที่ต้องนำเข้า
เซสชัน: ตั้งค่าว่าไคลเอ็นต์ต้องการเซสชัน HTTP หรือไม่ ค่าเริ่มต้นเป็นจริง
บัฟเฟอร์: ขนาดของบัฟเฟอร์ถูกใช้โดยวัตถุ out เพื่อประมวลผลเอาต์พุตของ JSP ที่ดำเนินการไปยังเบราว์เซอร์ไคลเอ็นต์ ค่าเริ่มต้นคือ 8Kb
autoFlush: ตั้งค่าว่าจะบังคับเอาต์พุตหรือไม่ หากบัฟเฟอร์ล้น หากถูกกำหนดเป็น true (ค่าเริ่มต้น) ผลลัพธ์จะเป็นปกติ หากถูกกำหนดเป็น false จะเกิดข้อผิดพลาดที่ไม่คาดคิด
isThreadSafe: ตั้งค่าว่าไฟล์ JSP สามารถใช้ในหลายเธรดได้หรือไม่ ค่าเริ่มต้นเป็นจริง
ข้อมูล: ข้อมูลข้อความ สามารถดึงข้อมูลได้โดยใช้เมธอด Servlet.getServletInfo()
errorPage: ตั้งค่าไฟล์ JSP ที่จัดการเหตุการณ์ข้อยกเว้น
sErrorPage: ตั้งค่าว่าเพจนี้เป็นเพจที่จัดการเหตุการณ์ข้อยกเว้นหรือไม่ หากตั้งค่าเป็นจริง คุณจะสามารถใช้ออบเจ็กต์ข้อยกเว้นได้
contentType: ตั้งค่าประเภท MIME และชุดการเข้ารหัสอักขระ ประเภท MIME เริ่มต้นคือ text/html และชุดอักขระเริ่มต้นคือ charset=ISO-8859-1
สามารถใช้คำสั่ง < %@page %> หลายคำสั่งในหนึ่งเพจได้ แต่ยกเว้นแอตทริบิวต์นำเข้า คุณลักษณะอื่นๆ สามารถใช้ได้เพียงครั้งเดียวเท่านั้น
แพ็คเกจที่นำเข้าโดย JSP ตามค่าเริ่มต้น แพ็คเกจต่อไปนี้ถูกนำเข้าระหว่างการคอมไพล์ JSP ดังนั้นจึงไม่จำเป็นต้องใช้คำสั่งเพจเพื่อแนะนำแพ็คเกจเหล่านั้นในไฟล์ JSP:
java.lang.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*
(2) รวมถึงคำสั่ง
รหัส HTML
<%@ รวมไฟล์ = "เส้นทางสัมพัทธ์" %>
ใช้คำสั่งรวมเพื่อรวมไฟล์สแตติกใน JSP และแยกวิเคราะห์คำสั่ง JSP ในไฟล์นี้
หากพาธเริ่มต้นด้วย "/" ดังนั้นพาธนี้จะอ้างอิงถึงพาธบริบทของแอปพลิเคชัน jsp เป็นหลัก
หากพาธถูกเปิดเป็นชื่อไฟล์หรือไดเร็กทอรีไฟล์ พาธนี้จะเป็นพาธปัจจุบันของไฟล์ JSP ที่กำลังใช้งาน
(3)คำสั่งแท็กลิบ
รหัส HTML
<%@ taglib uri = "TagLibrary" คำนำหน้า = "mypfx" %>
ใช้คำสั่ง taglib เพื่อกำหนดไลบรารีแท็กและคำนำหน้าที่กำหนดเอง
uri: Uniform Resource Identifier จะตั้งชื่อเลเบลแบบกำหนดเองโดยไม่ซ้ำกันตามคำนำหน้าของเลเบล ซึ่งอาจเป็นพาธแบบสัมพัทธ์หรือแบบสัมบูรณ์ก็ได้
คำนำหน้า: คำนำหน้าของป้ายกำกับที่กำหนดเอง อย่าใช้ jsp, jspx, java, javax, servlet, sun, sunw เป็นคำนำหน้า เนื่องจาก Sun ได้ประกาศไว้แล้ว
4. 8 คำสั่งการกระทำ
(1) การข้ามหน้า:
แท็ก
มีทั้งหมด 2 คุณสมบัติ
คุณลักษณะของหน้าคือนิพจน์หรือสตริงที่อธิบายไฟล์หรือ URL ที่จะกำหนดเส้นทาง
รหัส HTML
รับชื่อผู้ใช้ผ่าน request.getParameter("username")
(2)รวมหน้า:
หากรวมเฉพาะไฟล์สแตติก ดังนั้นการรวมนี้จะเพิ่มเนื้อหาของไฟล์ที่รวมเข้ากับไฟล์ JSP เท่านั้น ซึ่งคล้ายกับ < %@include% >;
หากมีการรวมทรัพยากรบนเว็บแบบไดนามิก ไฟล์ที่รวมไว้จะถูกดำเนินการโดยคอมไพเลอร์ JSP ด้วย
หากไฟล์รวมนี้เป็นไดนามิก คุณยังสามารถใช้
(3) สร้าง Bean:
สร้างอินสแตนซ์ Bean และระบุชื่อและขอบเขต
ประกอบด้วยคุณสมบัติ 5 ประการ
id: ยืนยันตัวแปร Bean ในขอบเขตที่กำหนด และใช้ id เพื่อใช้อินสแตนซ์ Bean นี้ในโปรแกรม ค่าของ id คำนึงถึงขนาดตัวพิมพ์
ขอบเขต: ขอบเขตที่มี Bean อยู่และขอบเขตที่ถูกต้องของชื่อตัวแปร id ค่าเริ่มต้นคือหน้า
คลาส: ใช้คีย์เวิร์ดใหม่และตัวสร้างคลาสเพื่อสร้างอินสแตนซ์ bean จากคลาส คลาสนี้ไม่สามารถเป็นนามธรรมได้ และต้องมีคอนสตรัคเตอร์สาธารณะและไม่มีอาร์กิวเมนต์
type: หาก Bean นี้มีอยู่แล้วในขอบเขตที่ระบุ การใช้ type จะกำหนดประเภทข้อมูลให้กับ Bean นี้ หากใช้ประเภทโดยไม่มีคลาสหรือ beanName bean จะไม่ถูกสร้างอินสแตนซ์
beanName: beanName อาจเป็นสตริง package.class หรือนิพจน์ jsp และค่าจะถูกส่งไปยังเมธอด Beans.instantiate ค่าของประเภทสามารถเหมือนกับ beanName คลาสพื้นฐาน หรืออินเทอร์เฟซที่นำไปใช้
(4) ตั้งค่าคุณสมบัติ Bean:
ชื่อ: ระบุชื่อของอินสแตนซ์ Bean ที่สร้างขึ้นใน
คุณสมบัติ: จับคู่คุณสมบัติใน Bean
พารามิเตอร์: อ้างถึงชื่อพารามิเตอร์ในออบเจ็กต์คำขอ และตั้งค่าที่สอดคล้องกับแอตทริบิวต์ Bean
ค่า: ใช้ค่าที่ระบุเพื่อตั้งค่าคุณสมบัติ Bean ค่านี้สามารถเป็นสตริงหรือนิพจน์ได้ หากเป็นสตริง จะถูกแปลงเป็นประเภทของแอตทริบิวต์ Bean (เช่น "0.98" จะถูกแปลงเป็นประเภทคู่ 0.98) หากเป็นนิพจน์ ประเภทของนิพจน์จะต้องสอดคล้องกับประเภทของแอตทริบิวต์ Bean
PS: ไม่สามารถใช้แอตทริบิวต์พารามิเตอร์และแอตทริบิวต์ค่าพร้อมกันใน
(5) รับคุณสมบัติ Bean:
รับค่าแอตทริบิวต์ในวัตถุ Bean ที่มีอยู่และแสดงบนเพจ
ชื่อ: ชื่อเดียวกับอินสแตนซ์วัตถุที่มีอยู่
คุณสมบัติ: ชื่อของคุณสมบัติในวัตถุ
(6) ใช้ปลั๊กอิน Applet:
รหัส HTML ไม่สามารถโหลดแอปเพล็ตได้!
ทางเลือก>
ใช้
(7) กำหนดพารามิเตอร์:
สามารถใช้ได้ใน
(8) ข้อความแสดงข้อผิดพลาดปลั๊กอิน:
เมื่อปลั๊กอิน
3. อ็อบเจ็กต์ในตัว JSP
1. คำขอ: วัตถุคำขอ วัตถุนี้สรุปข้อมูลที่ส่งโดยผู้ใช้ สามารถรับข้อมูลที่ห่อหุ้มได้โดยการเรียกวิธีการที่เกี่ยวข้องของวัตถุ
เมื่อออบเจ็กต์คำขอได้รับตัวอักษรจีนที่ลูกค้าส่งมา ตัวอักษรที่อ่านไม่ออกจะปรากฏขึ้นและจะต้องดำเนินการประมวลผลพิเศษ
วิธีการที่ใช้กันทั่วไป:
getParameter(String parameterName): รับข้อมูลการส่งแบบฟอร์ม
getProtocol(): รับโปรโตคอลที่ลูกค้าใช้
getServletPath(): รับหน้าที่ลูกค้าส่งข้อมูล
getMethod(): วิธีการรับข้อมูลที่ลูกค้าส่งมา
getHeader(String str): รับค่าของ Accept, Accept-encoding และ Host ในไฟล์ส่วนหัว HTTP
getRermoteHost(): รับที่อยู่ IP ของลูกค้า
getServerName: รับชื่อเซิร์ฟเวอร์
getServerPort: รับหมายเลขพอร์ตของเซิร์ฟเวอร์
getParameterNames(): รับชื่อของพารามิเตอร์ทั้งหมดที่ลูกค้าส่งมา
2. การตอบสนอง: ออบเจ็กต์ตอบสนองตอบสนองแบบไดนามิกต่อคำขอของลูกค้าและส่งข้อมูลไปยังไคลเอนต์
(1) ตอบสนองต่อแอตทริบิวต์ contentType แบบไดนามิก ใช้คำสั่ง page เพื่อตั้งค่าแอตทริบิวต์ contentType ของเพจแบบคงที่ เมื่อตั้งค่าแอตทริบิวต์นี้แบบไดนามิก ให้ใช้ response.setContextType("text/html;charset=utf-8");
(2) การเปลี่ยนเส้นทางการตอบสนอง
response.sendRedirect("index.jsp");
3. เซสชัน: วัตถุเซสชัน
(1) วัตถุเซสชันคืออะไร?
อ็อบเจ็กต์เซสชันจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อมีการโหลดเพจ JSP แรกเพื่อให้การจัดการเซสชันเสร็จสมบูรณ์
เริ่มต้นเมื่อไคลเอ็นต์เปิดเบราว์เซอร์และเชื่อมต่อกับเซิร์ฟเวอร์ และสิ้นสุดเมื่อไคลเอ็นต์ปิดเบราว์เซอร์และออกจากเซิร์ฟเวอร์ ซึ่งเรียกว่าเซสชัน
(2) ID ของวัตถุเซสชัน
เมื่อลูกค้าเยี่ยมชมเพจ JSP บนเซิร์ฟเวอร์เป็นครั้งแรก กลไก JSP จะสร้างอ็อบเจ็กต์เซสชันและกำหนดหมายเลข ID เป็นประเภทสตริง นอกจากนี้ กลไก JSP ยังส่งหมายเลข ID นี้ไปยังไคลเอนต์และเก็บไว้ในคุกกี้ ด้วยวิธีนี้อ็อบเจ็กต์เซสชัน จะไม่จนกว่าไคลเอนต์จะปิดเบราว์เซอร์ที่อ็อบเจ็กต์เซสชันของลูกค้าจะถูกแก้ไขโดยเซิร์ฟเวอร์ และความโต้ตอบของเซสชันกับไคลเอนต์จะหายไป
(3) วิธีการทั่วไป
public String getId(): รับหมายเลขของวัตถุเซสชัน
โมฆะสาธารณะ setAttribute(String str,Object obj): เพิ่มวัตถุพารามิเตอร์ให้กับวัตถุเซสชัน
วัตถุสาธารณะ getAttribute(): รับคุณลักษณะในวัตถุเซสชันตามชื่อแอตทริบิวต์
public boolean isNew(): ตรวจสอบว่าเป็นลูกค้าใหม่หรือไม่
4. แอปพลิเคชัน: วัตถุแอปพลิเคชัน
(1) ออบเจ็กต์แอปพลิเคชันคืออะไร
ออบเจ็กต์แอปพลิเคชันนี้ถูกสร้างขึ้นหลังจากเซิร์ฟเวอร์เริ่มทำงาน เมื่อลูกค้าเรียกดูระหว่างหน้าต่างๆ ของเว็บไซต์ที่เยี่ยมชม ออบเจ็กต์แอปพลิเคชันจะเหมือนกัน และลูกค้าทั้งหมดแชร์ออบเจ็กต์แอปพลิเคชันในตัวนี้
(2) วิธีการทั่วไป
setAttribute(String key,Object obj): เพิ่มอ็อบเจ็กต์พารามิเตอร์ให้กับอ็อบเจ็กต์ Application
getAttibute (คีย์สตริง): รับแอตทริบิวต์ในวัตถุ Application ตามชื่อแอตทริบิวต์
5. ออก: วัตถุเอาท์พุต
วัตถุออกคือสตรีมเอาท์พุตที่ใช้ในการส่งออกข้อมูลไปยังไคลเอนต์
out.print(): ส่งออกข้อมูลประเภทต่างๆ
out.newLine(): ส่งออกอักขระขึ้นบรรทัดใหม่
out.close(): ปิดสตรีม
6. การกำหนดค่า: วัตถุการกำหนดค่า โดยทั่วไปเราใช้วัตถุการกำหนดค่าเพื่อรับข้อมูลการกำหนดค่าเริ่มต้นบางส่วน วิธีการที่ใช้กันทั่วไปคือ getInitParameter และ getInitParameterNames เพื่อรับพารามิเตอร์ระหว่างการเริ่มต้น Servlet
7.เพจ: วัตถุหน้า
อ็อบเจ็กต์เพจแสดงถึงอ็อบเจ็กต์คลาสที่กำลังรันอยู่ซึ่งสร้างโดยไฟล์ JSP และไม่แนะนำสำหรับผู้อ่านทั่วไป
8.PageContext: วัตถุบริบทของหน้า
คลาส PageContext ที่แนะนำโดย JSP ช่วยให้คุณเข้าถึงคุณสมบัติต่างๆ ของเพจได้ ตัวแปร pageContext เก็บค่าของออบเจ็กต์ PageContext ที่เชื่อมโยงกับเพจปัจจุบัน คลาส PageContext มีเมธอดต่างๆ เช่น getRequest, getResponse, getOut และ getSession
9.ข้อยกเว้น: วัตถุข้อยกเว้น
อ็อบเจ็กต์ข้อยกเว้นแสดงถึงอ็อบเจ็กต์ข้อยกเว้นที่สร้างขึ้นเมื่อไฟล์ JSP กำลังทำงานอยู่ อ็อบเจ็กต์นี้ไม่สามารถใช้โดยตรงในไฟล์ JSP ธรรมดา แต่สามารถใช้ได้เท่านั้น
< %@page isErrorPage="true"%> ถูกใช้ในไฟล์ JSP นี่เป็นเพราะว่าอ็อบเจ็กต์ข้อผิดพลาดที่สร้างขึ้นเมื่อไฟล์ JSP กำลังทำงานอยู่ถูกโยนทิ้งและสามารถดักจับได้โดย JSP เท่านั้นที่ใช้แท็ก < %@pageisErrorPage="true"% > เพื่อดักจับอ็อบเจ็กต์ข้อผิดพลาด วิธีที่ใช้บ่อยที่สุดคือ getMessage ซึ่งใช้เพื่อรับข้อมูลข้อผิดพลาด
4. หน้าเข้าสู่ระบบอินสแตนซ์: index.jsp
รหัส HTML
<%@ ภาษาหน้า = "java" pageEncoding = "UTF-8" contentType = "text/html; charset=UTF-8" %>
<หัว>