วัตถุโดยนัยของ JSP

วัตถุโดยนัยของ JSP คืออะไร?

  • วัตถุ JSP ที่เป็นนัยจะถูกสร้างขึ้นในระหว่างขั้นตอนการแปลของ JSP ไปยังเซิร์ฟเล็ต
  • ออบเจ็กต์เหล่านี้สามารถใช้ได้โดยตรงในสคริปต์ที่อยู่ในวิธีการบริการ
  • คอนเทนเนอร์สร้างขึ้นโดยอัตโนมัติ และสามารถเข้าถึงได้โดยใช้ออบเจ็กต์

มี Implicit Objects กี่รายการใน JSP

วัตถุโดยนัยที่มีอยู่ในคอนเทนเนอร์มี 9 ประเภท:

  1. ออก
  2. ขอร้อง
  3. คำตอบ
  4. การกำหนดค่า
  5. การใช้งาน
  6. เซสชั่น
  7. บริบทของหน้า
  8. หน้า
  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 ใช้สำหรับพิมพ์ลงในเอาท์พุตสตรีม

เมื่อเรารันโค้ดข้างต้น เราจะได้ผลลัพธ์ดังต่อไปนี้:

ออกใน JSP

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 (ที่ดำเนินการ)

คำขอใน JSP

คำอธิบายของรหัส:

รหัสบรรทัด 10-13 : ในคำขอ implicit_jsp2.jsp(form) ถูกส่งไป ดังนั้นชื่อผู้ใช้ของตัวแปรจึงได้รับการประมวลผลและส่งไปที่ guru.jsp ซึ่งเป็นการกระทำของ JSP

Guru.jsp

รหัสบรรทัด 10-11: เป็นการดำเนินการ jsp ที่คำขอได้รับการประมวลผล และชื่อผู้ใช้ถูกนำมาจากแบบฟอร์ม jsp

เมื่อคุณรันโค้ดข้างต้น คุณจะได้รับผลลัพธ์ดังต่อไปนี้

Output:

คำขอใน JSP

เมื่อคุณเขียนการทดสอบและคลิกปุ่มส่ง คุณจะได้รับผลลัพธ์ต่อไปนี้ "ยินดีต้อนรับการทดสอบ"

คำขอใน JSP

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 (ระบุชื่อและการแม็พของเซิร์ฟเล็ต)

กำหนดค่าใน JSP

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 ซึ่งจะช่วยให้เรารับชื่อของเซิร์ฟเล็ต

เมื่อคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ดังต่อไปนี้:

การตอบสนองใน JSP

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: เราได้รับค่าแอตทริบิวต์ผู้ใช้จากวัตถุเซสชันและแสดงค่านั้น

เมื่อคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ต่อไปนี้:

เซสชันใน JSP

เมื่อคลิกลิงก์สำหรับชื่อผู้ใช้ คุณจะได้ผลลัพธ์ดังต่อไปนี้

เซสชันใน JSP

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

เมื่อคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ต่อไปนี้:

บริบทเพจใน JSP

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

เมื่อคุณรันโค้ด คุณจะได้ผลลัพธ์ดังต่อไปนี้:

หน้าใน 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:

ข้อยกเว้นใน JSP

เราได้รับ ArrayIndexOfBoundsException ในอาร์เรย์ที่เราได้รับอาร์เรย์ num1 ขององค์ประกอบที่ห้า

สรุปโพสต์นี้ด้วย: