Đối tượng tiềm ẩn của JSP

Đối tượng tiềm ẩn JSP là gì?

  • Các đối tượng ngầm định của JSP được tạo ra trong giai đoạn biên dịch JSP sang servlet.
  • Những đối tượng này có thể được sử dụng trực tiếp trong các tập lệnh đi kèm với phương thức dịch vụ.
  • Chúng được tạo tự động bởi vùng chứa và chúng có thể được truy cập bằng cách sử dụng các đối tượng.

Có bao nhiêu đối tượng tiềm ẩn trong JSP?

Có 9 loại đối tượng tiềm ẩn có sẵn trong vùng chứa:

  1. Out
  2. Yêu cầu
  3. Phản ứng
  4. Config
  5. Các Ứng Dụng
  6. Phiên
  7. TrangNgữ cảnh
  8. Trang
  9. Ngoại lệ

Hãy học từng cái một

1) Ra ngoài

  • Out là một trong những đối tượng ngầm định để ghi dữ liệu vào bộ đệm và gửi đầu ra cho máy khách để phản hồi
  • Đối tượng Out cho phép chúng ta truy cập luồng đầu ra của servlet
  • Out là đối tượng của lớp javax.servlet.jsp.jspWriter
  • Trong khi làm việc với Servlet, chúng ta cần đối tượng printwriter

Ví dụ:

<%@ 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>

Giải thích mã:

Dòng mã 11-12– out được sử dụng để in ra luồng đầu ra

Khi thực thi đoạn mã trên, chúng ta sẽ nhận được kết quả sau:

Ra trong JSP

Đầu ra:

  • Ở đầu ra, chúng ta nhận được các giá trị của num1 và num2

2) Yêu cầu

  • Đối tượng yêu cầu là một thể hiện của java.servlet.http.HttpServletRequest và nó là một trong những đối số của phương thức dịch vụ
  • Nó sẽ được tạo bởi container cho mọi yêu cầu.
  • Nó sẽ được sử dụng để yêu cầu các thông tin như tham số, thông tin tiêu đề, tên máy chủ, v.v.
  • Nó sử dụng getParameter() để truy cập tham số yêu cầu.

Ví dụ:

Implicit_jsp2.jsp(biểu mẫu từ đó yêu cầu được gửi đến 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 (nơi thực hiện hành động)

Yêu cầu trong JSP

Giải thích mã:

Dòng mã 10-13 : Trong Implicit_jsp2.jsp(form) yêu cầu được gửi đi, do đó tên người dùng biến được xử lý và gửi đến guru.jsp, đây là hành động của JSP.

Guru.jsp

Mã Dòng10-11: Đó là hành động jsp trong đó yêu cầu được xử lý và tên người dùng được lấy từ mẫu jsp.

Khi bạn thực thi đoạn mã trên, bạn sẽ nhận được kết quả sau

Đầu ra:

Yêu cầu trong JSP

Khi bạn viết bài kiểm tra và nhấp vào nút gửi, bạn sẽ nhận được kết quả đầu ra sau “Welcome Test”.

Yêu cầu trong JSP

3) Phản hồi

  • “Phản hồi” là một thể hiện của lớp triển khai giao diện HttpServletResponse
  • Vùng chứa tạo đối tượng này và chuyển tới phương thức _jspservice() làm tham số
  • “Đối tượng phản hồi” sẽ được vùng chứa tạo cho mỗi yêu cầu.
  • Nó đại diện cho phản hồi có thể được cung cấp cho khách hàng
  • Đối tượng ẩn phản hồi được sử dụng để loại nội dung, thêm cookie và chuyển hướng đến trang phản hồi

Ví dụ:

<%@ 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>

Giải thích mã:

Dòng mã 11: Trong đối tượng phản hồi, chúng ta có thể đặt loại nội dung

Ở đây chúng tôi chỉ đặt loại nội dung trong đối tượng phản hồi. Do đó, không có đầu ra cho việc này.

4) Cấu hình

  • “Cấu hình” thuộc loại java.servlet.servletConfig
  • Nó được tạo bởi vùng chứa cho mỗi trang jsp
  • Nó được sử dụng để lấy tham số khởi tạo trong web.xml

Ví dụ:

Web.xml (chỉ định tên và ánh xạ của servlet)

Cấu hình trong JSP

Implicit_jsp5.jsp (lấy giá trị của tên servlet)

<%@ 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>

Giải thích mã:

Trong web.xml

Dòng mã 14-17: Trong web.xml, chúng ta có ánh xạ các servlet tới các lớp.

Implicit_jsp5.jsp

Dòng mã 10-11: Để lấy tên của servlet trong JSP, chúng ta có thể sử dụng config.getServletName, điều này sẽ giúp chúng ta lấy được tên của servlet.

Khi bạn thực thi đoạn mã trên, bạn sẽ nhận được kết quả sau:

Phản hồi trong JSP

Đầu ra:

  • Tên Servlet là “GuruServlet” như tên có trong web.xml

5) Ứng dụng

  • Đối tượng ứng dụng (dòng mã 10) là một thể hiện của javax.servlet.ServletContext và nó được sử dụng để lấy thông tin ngữ cảnh và các thuộc tính trong JSP.
  • Đối tượng ứng dụng được tạo bởi một vùng chứa cho mỗi ứng dụng khi ứng dụng được triển khai.
  • Đối tượng Servletcontext chứa một tập hợp các phương thức được sử dụng để tương tác với thùng chứa servlet. Chúng ta có thể tìm thấy thông tin về thùng chứa servlet

Ví dụ:

<%@ 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>

Giải thích mã:

  • Trong đoạn mã trên, thuộc tính ứng dụng giúp lấy đường dẫn ngữ cảnh của trang JSP.

6) Phiên

  • Phiên đang giữ đối tượng “httpsession” (dòng mã 10).
  • Đối tượng phiên được sử dụng để lấy, đặt và xóa các thuộc tính cho phạm vi phiên và cũng được sử dụng để lấy thông tin phiên

Ví dụ:

Implicit_jsp7(thuộc tính được đặt)

<%@ 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 (getAttribution)

<%@ 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>

Giải thích mã:

Implicit_jsp7.jsp

Dòng mã 11: chúng tôi đang đặt thuộc tính user trong biến phiên và giá trị đó có thể được tìm nạp từ phiên trong bất kỳ jsp nào được gọi từ đó (_jsp8.jsp).

Dòng mã 12: Chúng tôi đang gọi một jsp khác trên href trong đó chúng tôi sẽ nhận giá trị cho thuộc tính user đã được đặt.

Implicit_jsp8.jsp

Dòng mã 11: Chúng tôi đang nhận giá trị của thuộc tính người dùng từ đối tượng phiên và hiển thị giá trị đó

Khi bạn thực thi đoạn mã trên, bạn sẽ nhận được kết quả sau:

Phiên trong JSP

Khi bạn nhấp vào liên kết cho tên người dùng. Bạn sẽ nhận được kết quả sau.

Phiên trong JSP

Đầu ra:

  • Khi chúng ta nhấp vào liên kết được cung cấp trong Implicit_jsp7.jsp thì chúng ta sẽ được chuyển hướng đến trang jsp thứ hai, tức là trang (_jsp8.jsp) và chúng ta nhận được giá trị từ đối tượng phiên của thuộc tính người dùng (_jsp7.jsp).

7) TrangBối cảnh

  • Đối tượng này thuộc loại pagecontext.
  • Nó được sử dụng để lấy, đặt và xóa các thuộc tính khỏi một phạm vi cụ thể

Phạm vi có 4 loại:

  • Trang
  • Yêu cầu
  • Phiên
  • Các Ứng Dụng

Ví dụ:

<%@ 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>

Giải thích mã:

Dòng mã 11: chúng tôi đang thiết lập thuộc tính bằng đối tượng pageContext và nó có ba tham số:

  • Key
  • Giá trị
  • Phạm vi

Trong đoạn mã trên, khóa là sinh viên và giá trị là “bậc thầy” trong khi phạm vi là phạm vi trang. Ở đây phạm vi là “trang” và nó chỉ có thể sử dụng phạm vi trang.

Dòng mã 12: Chúng tôi đang nhận được giá trị của thuộc tính bằng pageContext

Khi bạn thực thi đoạn mã trên, bạn sẽ nhận được kết quả sau:

Bối cảnh trang trong JSP

Đầu ra:

  • Kết quả sẽ in ra “tên sinh viên là grustudent”.

8) Trang

  • Biến ẩn của trang chứa đối tượng servlet hiện đang được thực thi cho jsp tương ứng.
  • Hoạt động như đối tượng này cho trang jsp hiện tại.

Ví dụ:

Trong ví dụ này, chúng tôi đang sử dụng đối tượng trang để lấy tên trang bằng phương thức 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>

Giải thích mã:

Dòng mã 10-11: Trong ví dụ này, chúng tôi đang cố gắng sử dụng phương thức toString() của đối tượng trang và cố gắng lấy tên chuỗi của Trang JSP.

Khi bạn thực thi mã, bạn sẽ nhận được kết quả đầu ra sau:

Trang trong JSP

Đầu ra:

  • Đầu ra là tên chuỗi của trang jsp trên

9) Ngoại lệ

  • Ngoại lệ là đối tượng tiềm ẩn của lớp có thể ném được.
  • Nó dùng để xử lý ngoại lệ trong JSP.
  • Đối tượng ngoại lệ chỉ có thể được sử dụng trong các trang lỗi.Ví dụ:
<%@ 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>

Giải thích mã:

Dòng mã 10-12 – Nó có một dãy số, tức là num1 có 1 phần tử. Ở đầu ra, chúng tôi đang cố gắng in phần tử thứ năm của mảng từ numXNUMX, phần tử này không được khai báo trong danh sách mảng. Vì vậy, nó được sử dụng để lấy đối tượng ngoại lệ của jsp.

Đầu ra:

Ngoại lệ trong JSP

Chúng tôi đang nhận được ArrayIndexOfBoundsException trong mảng nơi chúng tôi đang nhận được mảng num1 của phần tử thứ năm.