Chỉ thị JSP
Chỉ thị JSP là gì?
- Các chỉ thị JSP là các thông báo tới vùng chứa JSP. Họ cung cấp thông tin toàn cầu về toàn bộ trang JSP.
- Các chỉ thị JSP được sử dụng để đưa ra hướng dẫn đặc biệt cho vùng chứa để dịch JSP sang mã servlet.
- Trong giai đoạn vòng đời của JSP, JSP phải được chuyển đổi thành một servlet, đây là giai đoạn dịch thuật.
- Họ đưa ra hướng dẫn cho vùng chứa về cách xử lý các khía cạnh nhất định của quá trình xử lý JSP
- Chỉ thị có thể có nhiều thuộc tính được phân tách bằng dấu phẩy dưới dạng cặp khóa-giá trị.
- Trong JSP, chỉ thị được mô tả trong
<%@ %>
thẻ.
Cú pháp của Chỉ thị:
<%@ directive attribute="" %>
Các loại chỉ thị trong JSP
Có ba loại chỉ thị trong JSP:
- Chỉ thị trang
- Bao gồm chỉ thị
- Chỉ thị Taglib
Mỗi một trong số chúng được mô tả chi tiết dưới đây với các ví dụ:
1) Chỉ thị trang JSP
Cú pháp của chỉ thị Trang:
<%@ page…%>
- Nó cung cấp các thuộc tính được áp dụng cho toàn bộ trang JSP.
- Nó xác định các thuộc tính phụ thuộc vào trang, chẳng hạn như ngôn ngữ kịch bản, trang lỗi và yêu cầu đệm.
- Nó được sử dụng để cung cấp hướng dẫn cho vùng chứa liên quan đến trang JSP hiện tại.
Sau đây là danh sách các thuộc tính liên quan đến chỉ thị trang:
- Ngôn ngữ
- Mở rộng
- Nhập khẩu
- loại nội dung
- Thông tin
- Phiên
- isThreadSafe
- tự động tuôn ra
- đệm
- Trang lỗi
- trangMã hóa
- trang lỗi
- được ELIgonored
Chi tiết hơn về từng thuộc tính
1) ngôn ngữ: Nó xác định ngôn ngữ lập trình (ngôn ngữ cơ bản) đang được sử dụng trong trang.
Cú pháp của ngôn ngữ:
<%@ page language="value" %>
Giá trị ở đây là ngôn ngữ lập trình (ngôn ngữ cơ bản)
Ví dụ:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
Giải thích mã: Trong ví dụ trên, giá trị ngôn ngữ thuộc tính là Java đó là ngôn ngữ cơ bản trong trường hợp này. Do đó, mã trong thẻ biểu thức sẽ được biên dịch bằng trình biên dịch java.
2) Mở rộng: Thuộc tính này được sử dụng để mở rộng (kế thừa) lớp giống như JAVA
Cú pháp của phần mở rộng:
<%@ page extends="value" %>
Ở đây giá trị đại diện cho lớp mà nó phải được kế thừa.
Ví dụ:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page extends="demotest.DemoClass" %>
Giải thích mã: Trong đoạn mã trên, JSP đang mở rộng DemoClass nằm trong gói demotest và nó sẽ mở rộng tất cả các tính năng của lớp.
3) Nhập khẩu: Thuộc tính này là thuộc tính được sử dụng nhiều nhất trong các thuộc tính chỉ thị của trang. Nó được sử dụng để yêu cầu bộ chứa nhập các lớp java, giao diện, enum, v.v. khác trong khi tạo mã servlet. Nó tương tự như các câu lệnh nhập trong các lớp, giao diện java.
Cú pháp nhập khẩu:
<%@ page import="value" %>
Giá trị ở đây cho biết các lớp phải được nhập.
Ví dụ:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" import="java.util.Date" pageEncoding="ISO-8859-1"%>
Giải thích mã:
Trong đoạn mã trên, chúng ta đang nhập lớp Date từ gói java.util (tất cả các lớp tiện ích) và nó có thể sử dụng tất cả các phương thức của lớp sau.
4) loại nội dung:
- Nó xác định sơ đồ mã hóa ký tự, tức là nó được sử dụng để đặt loại nội dung và bộ ký tự của phản hồi
- Kiểu mặc định của contentType là
"text/html; charset=ISO-8859-1"
.
Cú pháp của contentType:
<%@ page contentType="value" %>
Ví dụ:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
Giải thích mã:
Trong đoạn mã trên, loại nội dung được đặt là văn bản/html, nó đặt mã hóa ký tự cho JSP và cho trang phản hồi được tạo.
5) thông tin
- Nó định nghĩa một chuỗi có thể được truy cập bằng phương thức getServletInfo().
- Thuộc tính này được sử dụng để đặt mô tả servlet.
Cú pháp của thông tin:
<%@ page info="value" %>
Ở đây, giá trị đại diện cho thông tin servlet.
Ví dụ:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" info="Guru Directive JSP" pageEncoding="ISO-8859-1"%>
Giải thích mã:
Trong đoạn mã trên, chuỗi “Guru Directive JSP” có thể được truy xuất bởi giao diện servlet bằng cách sử dụng getServletInfo()
6) Phiên
- Trang JSP tạo phiên theo mặc định.
- Đôi khi chúng ta không cần tạo phiên trong JSP, và do đó, chúng ta có thể đặt thuộc tính này thành false trong trường hợp đó. Giá trị mặc định của thuộc tính phiên là true và phiên được tạo. Khi nó được đặt thành false, thì chúng ta có thể chỉ định trình biên dịch không tạo phiên theo mặc định.
Cú pháp của phiên:
<%@ page session="true/false"%>
Ở đây trong trường hợp này thuộc tính phiên có thể được đặt thành đúng hoặc sai
Ví dụ:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" session="false"%>
Giải thích mã:
Trong ví dụ trên, thuộc tính phiên được đặt thành “false” do đó chúng tôi cho biết rằng chúng tôi không muốn tạo bất kỳ phiên nào trong JSP này
7) isThreadSafe:
- Nó định nghĩa mô hình luồng cho servlet được tạo ra.
- Nó cho biết mức độ an toàn của luồng được triển khai trong trang.
- Giá trị mặc định của nó là đúng nên đồng thời
- Chúng ta có thể sử dụng thuộc tính này để triển khai giao diện SingleThreadModel trong servlet được tạo.
- Nếu chúng ta đặt thành sai thì nó sẽ triển khai SingleThreadModel và có thể truy cập bất kỳ đối tượng được chia sẻ nào và có thể dẫn đến sự không nhất quán.
Cú pháp của isThreadSafe:
<% @ page isThreadSafe="true/false" %>
Ở đây, true hoặc false biểu thị xem có đồng bộ hóa hay không thì đặt thành true và đặt thành false.
Ví dụ:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" isThreadSafe="true"%>
Giải thích mã:
Trong đoạn mã trên, isThreadSafe được đặt thành “true” do đó quá trình đồng bộ hóa sẽ được thực hiện và có thể sử dụng nhiều luồng.
8) Tự động xóa:
Thuộc tính này chỉ định rằng đầu ra được đệm có nên được tự động xả hay không và giá trị mặc định của thuộc tính đó là true. Nếu giá trị được đặt thành false thì bộ đệm sẽ không được xả tự động và nếu đầy, chúng ta sẽ nhận được ngoại lệ. Khi bộ đệm là none thì false là không hợp lệ và không có bộ đệm, do đó nó sẽ được xả tự động.
Cú pháp của autoFlush:
<% @ page autoFlush="true/false" %>
Ở đây true/false biểu thị việc đệm có cần phải được thực hiện hay không
Ví dụ:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" autoFlush="false"%>
Giải thích mã:
Trong đoạn mã trên, autoflush được đặt thành false và do đó việc đệm sẽ không được thực hiện và nó sẽ tự động xả đầu ra.
9) Buffer:
- Sử dụng thuộc tính này, đối tượng phản hồi đầu ra có thể được lưu vào bộ đệm.
- Chúng ta có thể xác định kích thước của bộ đệm được thực hiện bằng thuộc tính này và kích thước mặc định là 8KB.
- Nó chỉ đạo servlet ghi vào bộ đệm trước khi ghi vào đối tượng phản hồi.
Cú pháp của bộ đệm:
<%@ page buffer="value" %>
Ở đây giá trị biểu thị kích thước của bộ đệm cần được xác định. Nếu không có bộ đệm, thì chúng ta có thể viết là none, và nếu chúng ta không đề cập đến bất kỳ giá trị nào thì mặc định là 8KB
Ví dụ:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" buffer="16KB"%>
Giải thích mã:
Trong đoạn mã trên, kích thước bộ đệm được đề cập là 16KB trong đó bộ đệm sẽ có kích thước đó
10) isErrorPage:
- Nó chỉ ra rằng Trang JSP có trang lỗi sẽ được kiểm tra trong một trang JSP khác
- Sau đó, bất kỳ tệp JSP nào được khai báo bằng thuộc tính “isErrorPage” đều có khả năng nhận ngoại lệ từ các trang JSP khác có trang lỗi.
- Ngoại lệ chỉ có sẵn cho các trang này.
- Giá trị mặc định là sai.
Cú pháp của isErrorPage:
<%@ page isErrorPage="true/false"%>
Ví dụ:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" isErrorPage="true"%>
Giải thích mã:
Trong đoạn mã trên, isErrorPage được đặt là true. Do đó, nó sẽ kiểm tra bất kỳ JSP nào khác có tập thuộc tính errorPage (được mô tả trong thuộc tính tiếp theo) và nó có thể xử lý các ngoại lệ.
11) Mã hóa trang:
Thuộc tính “pageEncoding” định nghĩa mã hóa ký tự cho trang JSP. Mặc định được chỉ định là “ISO-8859-1” nếu không chỉ định bất kỳ mã hóa nào khác.
Cú pháp của mã hóa trang:
<%@ page pageEncoding="vaue" %>
Giá trị ở đây chỉ định giá trị bộ ký tự cho JSP
Ví dụ:
<%@ page language="java" contentType="text/html;" pageEncoding="ISO-8859-1" isErrorPage="true"%>
Giải thích mã:
Trong đoạn mã trên, “pageEncoding” đã được đặt thành bộ ký tự mặc định ISO-8859-1
12) Trang lỗi:
Thuộc tính này được sử dụng để thiết lập trang lỗi cho trang JSP nếu JSP ném ra một ngoại lệ và sau đó nó chuyển hướng đến trang ngoại lệ.
Cú pháp của errorPage:
<%@ page errorPage="value" %>
Giá trị ở đây biểu thị giá trị trang JSP lỗi
Ví dụ:
<%@ page language="java" contentType="text/html;" pageEncoding="ISO-8859-1" errorPage="errorHandler.jsp"%>
Giải thích mã:
Trong đoạn mã trên, để xử lý các ngoại lệ, chúng ta có errroHandler.jsp
13) bị bỏ qua:
- IsELIgnored là thuộc tính cờ nơi chúng ta phải quyết định có bỏ qua thẻ EL hay không.
- Kiểu dữ liệu của nó là java enum và giá trị mặc định là sai do đó EL được bật theo mặc định.
Cú pháp của isELIgnored:
<%@ page isELIgnored="true/false" %>
Ở đây, true/false thể hiện giá trị của EL cho dù có nên bỏ qua hay không.
Ví dụ:
<%@ page language="java" contentType="text/html;" pageEncoding="ISO-8859-1" isELIgnored="true"%>
Giải thích mã:
Trong đoạn mã trên, isELIgnored là đúng và do đó Ngôn ngữ biểu thức (EL) bị bỏ qua ở đây. Trong ví dụ dưới đây, chúng tôi sử dụng bốn thuộc tính (dòng mã 1-2)
Ví dụ với bốn thuộc tính
<%@ page language="java" contentType="text/html;" pageEncoding="ISO-8859-1" isELIgnored="false"%> <%@page import="java.util.Date" %> <!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>Directive Guru JSP1</title> </head> <body> <a>Date is:</a> <%= new java.util.Date() %> </body> </html>
Giải thích mã:
Dòng mã 1-2: Ở đây chúng tôi đã xác định bốn thuộc tính tức là
- Ngôn ngữ: Nó được đặt là Java như ngôn ngữ lập trình
- contentType: đặt làm văn bản/html để báo cho trình biên dịch biết rằng html phải có định dạng
- pageEncoding: bộ ký tự mặc định được đặt trong thuộc tính này
- isELIgnored: Thẻ biểu thức sai nên không bị bỏ qua
Dòng mã 3: Ở đây chúng tôi đã sử dụng thuộc tính nhập và nó đang nhập “Lớp ngày” từ Java util và chúng tôi đang cố gắng hiển thị ngày hiện tại trong mã.
Khi bạn thực thi đoạn mã trên, bạn sẽ nhận được kết quả sau
Đầu ra:
- Date is: Ngày hiện tại sử dụng phương thức date của lớp date
2) Chỉ thị JSP Include
- JSP “include direct”( codeline 8 ) được sử dụng để gộp một tệp này vào tệp khác
- Tệp được bao gồm này có thể là HTML, JSP, tệp văn bản, v.v.
- Nó cũng hữu ích trong việc tạo các mẫu với chế độ xem của người dùng và chia các trang thành các hành động đầu trang&chân trang và thanh bên.
- Nó bao gồm tập tin trong giai đoạn dịch
Cú pháp của lệnh include:
<%@ include….%>
Ví dụ:
Directive_jsp2.jsp (Tệp chính)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ include file="directive_header_jsp3.jsp" %> <!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 Directive JSP2</title> </head> <body> <a>This is the main file</a> </body> </html>
Directive_header_jsp3.jsp (được bao gồm trong tệp chính)
<%@ 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"> </head> <body> <a>Header file : </a> <%int count =1; count++; out.println(count);%> : </body> </html>
Giải thích mã:
Chỉ thị_jsp2.jsp:
Dòng mã 3: Trong mã này, chúng tôi sử dụng các thẻ bao gồm trong đó chúng tôi đưa tệp direct_header_jsp3.jsp vào tệp chính (_jsp2.jsp) và nhận đầu ra của cả tệp chính và tệp được bao gồm.
Chỉ thị_header_jsp3.jsp:
Dòng mã 11-12: Chúng tôi đã lấy số lượng biến được khởi tạo thành 1 và sau đó tăng nó lên. Điều này sẽ cung cấp đầu ra trong tệp chính như hiển thị bên dưới.
Khi bạn thực thi đoạn mã trên, bạn sẽ nhận được kết quả sau:
Đầu ra:
- Đầu ra là Header file: 2 : Đây là file chính
- Đầu ra được thực thi từ tệp direct_jsp2.jsp trong khi tệp đi kèm direct_header_jsp3.jsp sẽ được biên dịch trước.
- Sau khi thực hiện xong file đưa vào, file chính sẽ được thực thi và đầu ra sẽ là từ file chính “This is the main file”. Vì vậy, bạn sẽ nhận được kết quả là “Tệp tiêu đề: 2” từ _jsp3.jsp và “Đây là tệp chính” từ _jsp2.jsp.
3) Chỉ thị JSP Taglib
- Lệnh taglib của JSP được sử dụng để định nghĩa thư viện thẻ với tiền tố “taglib” mà chúng ta có thể sử dụng trong JSP.
- Chi tiết hơn sẽ được đề cập trong phần Thẻ tùy chỉnh JSP
- Lệnh taglib của JSP được sử dụng trong các trang JSP sử dụng các thư viện thẻ chuẩn JSP
- Nó sử dụng một tập hợp các thẻ tùy chỉnh, xác định vị trí của thư viện và cung cấp phương tiện xác định các thẻ tùy chỉnh trong trang JSP.
Cú pháp của chỉ thị taglib:
<%@ taglib uri="uri" prefix="value"%>
Ở đây thuộc tính “uri” là mã định danh duy nhất trong bộ mô tả thư viện thẻ và thuộc tính “tiền tố” là tên thẻ.
Ví dụ:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="gurutag" uri="http://java.sun.com/jsp/jstl/core" %> <!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 Directive JSP</title> <gurutag:hello/> </head> <body> </body> </html>
Giải thích mã:
Dòng mã 3: Ở đây “taglib” được định nghĩa bằng các thuộc tính uri và tiền tố.
Dòng mã 9: “gurutag” là thẻ tùy chỉnh được xác định và có thể được sử dụng ở mọi nơi