วัตถุโดยนัยของ JSP
วัตถุโดยนัยของ JSP คืออะไร?
- วัตถุ JSP ที่เป็นนัยจะถูกสร้างขึ้นในระหว่างขั้นตอนการแปลของ JSP ไปยังเซิร์ฟเล็ต
- ออบเจ็กต์เหล่านี้สามารถใช้ได้โดยตรงในสคริปต์ที่อยู่ในวิธีการบริการ
- คอนเทนเนอร์สร้างขึ้นโดยอัตโนมัติ และสามารถเข้าถึงได้โดยใช้ออบเจ็กต์
มี Implicit Objects กี่รายการใน JSP
วัตถุโดยนัยที่มีอยู่ในคอนเทนเนอร์มี 9 ประเภท:
- ออก
- ขอร้อง
- คำตอบ
- การกำหนดค่า
- การใช้งาน
- เซสชั่น
- บริบทของหน้า
- หน้า
- ข้อยกเว้น
มาเรียนกันทีละคน
1) ออก
- Out เป็นหนึ่งในวัตถุโดยนัยที่จะเขียนข้อมูลลงในบัฟเฟอร์และส่งเอาต์พุตไปยังไคลเอนต์ในการตอบสนอง
- วัตถุออกช่วยให้เราสามารถเข้าถึงสตรีมเอาท์พุตของเซิร์ฟเล็ต
- Out เป็นอ็อบเจ็กต์ของคลาส javax.servlet.jsp.jspWriter
- ในขณะที่ทำงานกับ เซิร์ฟเล็ตเราต้องการวัตถุตัวพิมพ์
ตัวอย่าง:
<%@ 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>Implicit Guru JSP1</title>
</head>
<body>
<% int num1=10;int num2=20;
out.println("num1 is " +num1);
out.println("num2 is "+num2);
%>
</body>
</html>
คำอธิบายของรหัส:
รหัสบรรทัด 11-12– out ใช้สำหรับพิมพ์ลงในเอาท์พุตสตรีม
เมื่อเรารันโค้ดข้างต้น เราจะได้ผลลัพธ์ดังต่อไปนี้:
Output:
- ผลลัพธ์ที่ได้คือค่า num1 และ num2
2) การร้องขอ
- วัตถุคำขอเป็นอินสแตนซ์ของ java.servlet.http.HttpServletRequest และเป็นหนึ่งในอาร์กิวเมนต์ของวิธีการบริการ
- มันจะถูกสร้างขึ้นโดยคอนเทนเนอร์สำหรับทุกคำขอ
- จะถูกใช้เพื่อขอข้อมูลเช่นพารามิเตอร์ ข้อมูลส่วนหัว ชื่อเซิร์ฟเวอร์ ฯลฯ
- ใช้ getParameter() เพื่อเข้าถึงพารามิเตอร์คำขอ
ตัวอย่าง:
Implicit_jsp2.jsp (แบบฟอร์มที่ใช้ส่งคำขอไปที่ guru.jsp)
<%@ 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>Implicit Guru form JSP2</title>
</head>
<body>
<form action="guru.jsp">
<input type="text" name="username">
<input type="submit" value="submit">
</form>
</body>
</html>
Guru.jsp (ที่ดำเนินการ)
คำอธิบายของรหัส:
รหัสบรรทัด 10-13 : ในคำขอ implicit_jsp2.jsp(form) ถูกส่งไป ดังนั้นชื่อผู้ใช้ของตัวแปรจึงได้รับการประมวลผลและส่งไปที่ guru.jsp ซึ่งเป็นการกระทำของ JSP
Guru.jsp
รหัสบรรทัด 10-11: เป็นการดำเนินการ jsp ที่คำขอได้รับการประมวลผล และชื่อผู้ใช้ถูกนำมาจากแบบฟอร์ม jsp
เมื่อคุณรันโค้ดข้างต้น คุณจะได้รับผลลัพธ์ดังต่อไปนี้
Output:
เมื่อคุณเขียนการทดสอบและคลิกปุ่มส่ง คุณจะได้รับผลลัพธ์ต่อไปนี้ "ยินดีต้อนรับการทดสอบ"
3) การตอบสนอง
- “การตอบสนอง” เป็นอินสแตนซ์ของคลาสที่ใช้อินเทอร์เฟซ HttpServletResponse
- คอนเทนเนอร์สร้างวัตถุนี้และส่งผ่านไปยังวิธี _jspservice() เป็นพารามิเตอร์
- “ออบเจ็กต์การตอบกลับ” จะถูกสร้างขึ้นโดยคอนเทนเนอร์สำหรับแต่ละคำขอ
- แสดงถึงการตอบสนองที่สามารถมอบให้กับลูกค้าได้
- ออบเจ็กต์การตอบสนองโดยนัยจะใช้กับประเภทเนื้อหา เพิ่มคุกกี้ และเปลี่ยนเส้นทางไปยังหน้าตอบกลับ
ตัวอย่าง:
<%@ 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>Implicit Guru JSP4</title>
</head>
<body>
<%response.setContentType("text/html"); %>
</body>
</html>
คำอธิบายของรหัส:
รหัสบรรทัด 11: ในวัตถุตอบสนองเราสามารถกำหนดประเภทเนื้อหาได้
ที่นี่เรากำลังตั้งค่าเฉพาะประเภทเนื้อหาในวัตถุตอบกลับ ดังนั้นจึงไม่มีผลลัพธ์สำหรับสิ่งนี้
4) การกำหนดค่า
- “Config” เป็นประเภท java.servlet.servletConfig
- มันถูกสร้างขึ้นโดยคอนเทนเนอร์สำหรับแต่ละเพจ jsp
- มันถูกใช้เพื่อรับพารามิเตอร์การเริ่มต้นใน web.xml
ตัวอย่าง:
Web.xml (ระบุชื่อและการแม็พของเซิร์ฟเล็ต)
Implicit_jsp5.jsp (รับค่าของชื่อเซิร์ฟเล็ต)
<%@ 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>Implicit Guru JSP5</title>
</head>
<body>
<% String servletName = config.getServletName();
out.println("Servlet Name is " +servletName);%>
</body>
</html>
คำอธิบายของรหัส:
ใน web.xml
รหัสบรรทัด 14-17: ใน web.xml เรามีการแมปเซิร์ฟเล็ตกับคลาส
Implicit_jsp5.jsp
รหัสบรรทัด 10-11: ในการรับชื่อของเซิร์ฟเล็ตใน JSP เราสามารถใช้ config.getServletName ซึ่งจะช่วยให้เรารับชื่อของเซิร์ฟเล็ต
เมื่อคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ดังต่อไปนี้:
Output:
- ชื่อเซิร์ฟเล็ตคือ “GuruServlet” ตามชื่อที่มีอยู่ใน web.xml
5) แอปพลิเคชัน
- Application object (code line 10) เป็นอินสแตนซ์ของ javax.servlet.ServletContext และใช้เพื่อรับข้อมูลบริบทและคุณลักษณะใน JSP
- วัตถุแอปพลิเคชันจะถูกสร้างขึ้นโดยคอนเทนเนอร์หนึ่งตัวต่อแอปพลิเคชัน เมื่อแอปพลิเคชันได้รับการปรับใช้
- วัตถุ Servletcontext มีชุดของวิธีการที่ใช้ในการโต้ตอบกับคอนเทนเนอร์เซิร์ฟเล็ต เราสามารถค้นหาข้อมูลเกี่ยวกับคอนเทนเนอร์เซิร์ฟเล็ต
ตัวอย่าง:
<%@ 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 Implicit JSP6</title>
</head>
<body>
<% application.getContextPath(); %>
</body>
</html>
คำอธิบายของรหัส:
- ในโค้ดข้างต้น แอตทริบิวต์ของแอปพลิเคชันช่วยในการรับเส้นทางบริบทของเพจ JSP
6) เซสชัน
- เซสชันกำลังถือวัตถุ "httpsession" (บรรทัดรหัส 10)
- อ็อบเจ็กต์เซสชันใช้เพื่อรับ ตั้งค่า และลบแอตทริบิวต์ในขอบเขตเซสชัน และยังใช้เพื่อรับข้อมูลเซสชันด้วย
ตัวอย่าง:
Implicit_jsp7 (ตั้งค่าแอตทริบิวต์แล้ว)
<%@ 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>Implicit JSP</title>
</head>
<body>
<% session.setAttribute("user","GuruJSP"); %>
<a href="implicit_jsp8.jsp">Click here to get user name</a>
</body>
</html>
Implicit_jsp8.jsp (getAttribute)
<%@ 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>implicit Guru JSP8</title>
</head>
<body>
<% String name = (String)session.getAttribute("user");
out.println("User Name is " +name);
%>
</body>
</html>
คำอธิบายของรหัส:
Implicit_jsp7.jsp
รหัสบรรทัด 11: เรากำลังตั้งค่าผู้ใช้แอ็ตทริบิวต์ในตัวแปรเซสชัน และสามารถดึงค่านั้นได้จากเซสชันใดก็ตามไม่ว่าจะเรียก jsp จากสิ่งนั้น (_jsp8.jsp)
รหัสบรรทัด 12: เรากำลังเรียก jsp อื่นบน href ซึ่งเราจะได้รับค่าสำหรับผู้ใช้แอตทริบิวต์ที่ตั้งค่าไว้
Implicit_jsp8.jsp
รหัสบรรทัด 11: เราได้รับค่าแอตทริบิวต์ผู้ใช้จากวัตถุเซสชันและแสดงค่านั้น
เมื่อคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ต่อไปนี้:
เมื่อคลิกลิงก์สำหรับชื่อผู้ใช้ คุณจะได้ผลลัพธ์ดังต่อไปนี้
Output:
- เมื่อเราคลิกลิงก์ที่ให้ไว้ใน implicit_jsp7.jsp เราจะถูกเปลี่ยนเส้นทางไปยังหน้า jsp ที่สอง เช่น หน้า (_jsp8.jsp) และเราได้รับค่าจากวัตถุเซสชันของแอตทริบิวต์ผู้ใช้ (_jsp7.jsp)
7) บริบทหน้า
- ออบเจ็กต์นี้เป็นประเภทบริบทของหน้า
- ใช้เพื่อรับ ตั้งค่า และลบแอ็ตทริบิวต์ออกจากขอบเขตเฉพาะ
ขอบเขตมี 4 ประเภท:
- หน้า
- ขอร้อง
- เซสชั่น
- การใช้งาน
ตัวอย่าง:
<%@ 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>Implicit Guru JSP9</title>
</head>
<body>
<% pageContext.setAttribute("student","gurustudent",pageContext.PAGE_SCOPE);
String name = (String)pageContext.getAttribute("student");
out.println("student name is " +name);
%>
</body>
</html>
คำอธิบายของรหัส:
รหัสบรรทัด 11: เรากำลังตั้งค่าแอตทริบิวต์โดยใช้วัตถุ pageContext และมีพารามิเตอร์สามตัว:
- คีย์
- ความคุ้มค่า
- ขอบเขต
ในโค้ดข้างต้น คีย์คือนักเรียนและค่าคือ "gurustudent" ในขณะที่ขอบเขตคือขอบเขตของหน้า ที่นี่ขอบเขตคือ "หน้า" และสามารถใช้ได้เฉพาะขอบเขตหน้าเท่านั้น
รหัสบรรทัด 12: เราได้รับค่าของแอตทริบิวต์โดยใช้ pageContext
เมื่อคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ต่อไปนี้:
Output:
- ผลลัพธ์จะพิมพ์ว่า “ชื่อนักเรียนคือ gurustudent”
8) หน้า
- ตัวแปรโดยนัยของหน้าเก็บอ็อบเจ็กต์เซิร์ฟเล็ตที่ดำเนินการในปัจจุบันสำหรับ jsp ที่สอดคล้องกัน
- ทำหน้าที่เป็นอ็อบเจ็กต์นี้สำหรับเพจ jsp ปัจจุบัน
ตัวอย่าง:
ในตัวอย่างนี้ เรากำลังใช้วัตถุหน้าเพื่อรับชื่อหน้าโดยใช้วิธี toString
<%@ 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>Implicit Guru JSP10</title>
</head>
<body>
<% String pageName = page.toString();
out.println("Page Name is " +pageName);%>
</body>
</html>
คำอธิบายของรหัส:
รหัสบรรทัด 10-11: ในตัวอย่างนี้ เรากำลังพยายามใช้เมธอด toString() ของอ็อบเจ็กต์เพจ และพยายามรับชื่อสตริงของเพจ JSP
เมื่อคุณรันโค้ด คุณจะได้ผลลัพธ์ดังต่อไปนี้:
Output:
- เอาต์พุตเป็นชื่อสตริงของหน้า jsp ด้านบน
9) ข้อยกเว้น
- ข้อยกเว้นเป็นวัตถุโดยนัยของคลาสที่สามารถขว้างได้
- มันถูกใช้สำหรับ การจัดการข้อยกเว้นใน JSP.
- วัตถุข้อยกเว้นสามารถใช้ได้เฉพาะในหน้าแสดงข้อผิดพลาดเท่านั้นตัวอย่าง:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" isErrorPage="true"%>
<!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>Implicit Guru JSP 11</title>
</head>
<body>
<%int[] num1={1,2,3,4};
out.println(num1[5]);%>
<%= exception %>
</body>
</html>
คำอธิบายของรหัส:
รหัสบรรทัด 10-12 – มีอาร์เรย์ของตัวเลข เช่น num1 ที่มีสี่องค์ประกอบ ในผลลัพธ์ เรากำลังพยายามพิมพ์องค์ประกอบที่ห้าของอาร์เรย์จาก num1 ซึ่งไม่ได้ประกาศไว้ในรายการอาร์เรย์ ดังนั้นจึงใช้เพื่อรับอ็อบเจ็กต์ข้อยกเว้นของ jsp
Output:
เราได้รับ ArrayIndexOfBoundsException ในอาร์เรย์ที่เราได้รับอาร์เรย์ num1 ขององค์ประกอบที่ห้า











