Hướng dẫn sử dụng JSTL (Thư viện thẻ chuẩn JSP): Core & Ví dụ về thẻ tùy chỉnh

Mục lục:

Anonim

JSTL là một thư viện thẻ tiêu chuẩn của JSP. Ở đây chúng ta sẽ xem việc sử dụng các thẻ JSTL khác nhau sẽ giúp mã hóa JSP dễ dàng hơn như thế nào.

Trong hướng dẫn này, bạn sẽ học-

  • JSTL là gì
  • JSTL Core
  • Thẻ tùy chỉnh JSP

JSTL là gì?

JSTL là viết tắt của thư viện thẻ tiêu chuẩn của các trang máy chủ Java và nó là một tập hợp các thư viện thẻ JSP tùy chỉnh cung cấp chức năng phát triển web phổ biến.

Ưu điểm của JSTL

  1. Thẻ tiêu chuẩn : Nó cung cấp một lớp phong phú về chức năng di động của các trang JSP. Thật dễ dàng để một nhà phát triển hiểu được mã.
  2. Mã gọn gàng và sạch sẽ : Khi các tập lệnh gây nhầm lẫn cho nhà phát triển, việc sử dụng JSTL làm cho mã gọn gàng và sạch sẽ.
  3. Hỗ trợ JavabeansInterospection tự động : Nó có một lợi thế của JSTL so với JSP scriptlets. JSTL Ngôn ngữ biểu thức xử lý mã JavaBean rất dễ dàng. Chúng ta không cần phải downcast các đối tượng, đối tượng đã được truy xuất dưới dạng các thuộc tính trong phạm vi. Sử dụng mã script JSP sẽ phức tạp và JSTL đã đơn giản hóa mục đích đó.
  4. Con người dễ đọc hơn : JSTL dựa trên XML, rất giống với HTML. Do đó, rất dễ hiểu đối với các nhà phát triển.
  5. Máy tính dễ hiểu hơn : Các công cụ như Dreamweaver và front page đang tạo ra ngày càng nhiều mã HTML. Các công cụ HTML thực hiện rất tốt việc định dạng mã HTML. Mã HTML được trộn với mã scriplet. Vì JSTL được thể hiện dưới dạng các thẻ tuân thủ XML, nên việc tạo HTML rất dễ dàng để phân tích cú pháp mã JSTL trong tài liệu.

JSTL Core

Các thẻ cốt lõi là các thẻ được sử dụng thường xuyên nhất trong JSP. Họ cung cấp hỗ trợ cho

  • Sự lặp lại
  • Logic có điều kiện
  • Bắt ngoại lệ
  • chuyển tiếp url
  • Chuyển hướng, v.v.

Để sử dụng các thẻ lõi, trước tiên chúng ta cần xác định thư viện thẻ và dưới đây là cú pháp để bao gồm một thư viện thẻ.

Cú pháp:

<%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core%>

Đây,

  • tiền tố có thể được sử dụng để xác định tất cả các thẻ cốt lõi và
  • uri là thư viện của taglib mà từ đó nó được nhập vào

Hãy xem chi tiết một số thẻ cốt lõi,

1. Hết:

  • Kết quả của biểu thức được hiển thị trong thẻ out
  • Nó có thể trực tiếp thoát khỏi các thẻ XML. Do đó, chúng không được đánh giá là thẻ thực tế

Cú pháp:

  • Ở đây giá trị đại diện cho thông tin đến đầu ra và nó là bắt buộc
  • Mặc định là không xuất được thông tin và không bắt buộc
  • EscapeXML - Đúng nếu nó thoát khỏi các ký tự XML.

Thí dụ:

Coretag_jsp1.jsp

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%> Thẻ lõi JSP1 

Giải thích mã:

Dòng mã 3: Tiền tố taglib này là bắt buộc cho tất cả các thẻ và tiền tố được thêm vào là 'c'. Do đó, nó có thể được sử dụng làm tiền tố cho tất cả các thẻ nhớ.

Dòng mã 12: Ở đây chúng tôi đang sử dụng coretag out với tiền tố "c" và điều này sẽ in ra giá trị trong thẻ biểu thức. Do đó, đầu ra sẽ là tên

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

Đầu ra:

  • Chúng tôi đang nhận giá trị dưới dạng tên từ thẻ lõi "out" sẽ in trong luồng đầu ra.

2. Bắt

  • Nó bắt bất kỳ ngoại lệ có thể ném nào xảy ra trong phần thân và hiển thị dưới dạng đầu ra.
  • Nó được sử dụng để xử lý các lỗi và bắt chúng.

Cú pháp:

Ở đây var đại diện cho tên của biến, sẽ chứa ngoại lệ có thể ném.

Thí dụ:

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%><% @ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%> Thẻ lõi JSP2 <% int num = 10/0; %>Ngoại lệ là: $ {guruException}

Giải thích mã:

Dòng mã 3: Tiền tố taglib này là bắt buộc cho tất cả các thẻ và tiền tố được thêm vào là 'c' do đó nó có thể được sử dụng làm tiền tố cho tất cả các thẻ nhớ

Dòng mã 11-13: Bắt thẻ Coretag được sử dụng để bắt ngoại lệ và in ngoại lệ. Ở đây ngoại lệ được nêu ra khi 10/0 và ngoại lệ đó có tên "guruException".

Dòng mã 14: Chúng tôi đang in "guruException".

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

Đầu ra:

  • Chúng tôi nhận được Arithmetic Exception dưới dạng / bằng 0 và nó được in trong đầu ra bằng cách sử dụng biến "guruException"

3. Nhập khẩu

  • Chúng ta có thể nhập nội dung tệp khác vào một trang JSP giống như chúng ta đã làm trong JSP bao gồm hành động.
  • Ở đây chúng tôi cũng có thể bao gồm URL và nội dung sẽ được hiển thị trên trang đó.

Cú pháp:

Ở đây var là một tên biến là một định danh, sẽ giữ tên tệp / uri.

uri là tên tệp tương đối hoặc tên tiểu.

coretag_jsp31.jsp

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%><% @ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%> Thẻ lõi JSP 31 

Coretag_jsp32.jsp

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%> Chèn tiêu đề tại đây  Tệp được phát sau khi nhập 

Giải thích mã:

Coretag_jsp31.jsp

Dòng mã 3: Tiền tố taglib này là bắt buộc cho tất cả các thẻ và tiền tố được thêm vào là 'c' do đó nó có thể được sử dụng làm tiền tố cho tất cả các thẻ nhớ

Dòng mã 11-12: Ở đây chúng tôi đang nhập tệp coretag_jsp32.jsp vào tệp này bằng cách sử dụng thẻ nhập

Dòng mã 13: Ở đây chúng tôi đang in tệp coretag_jsp32.jsp bằng thẻ out.

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

Đầu ra:

  • Coretag_jsp32 được in ở đầu ra vì tệp này được nhập vào coretag_jsp31.jsp.

4. forEach

  • Nó được sử dụng để lặp lại số phần tử trong chuỗi các câu lệnh.
  • Nó giống như một forloop của Java.

Cú pháp:

  • Ở đây var đại diện cho tên biến sẽ giữ tên bộ đếm
  • Begin đại diện cho giá trị bắt đầu của bộ đếm
  • Kết thúc sẽ đại diện cho giá trị cuối cùng của nó

Thí dụ:

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%><% @ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%> Thẻ lõi JSP4 

Giải thích mã:

Dòng mã 3: Tiền tố taglib này là bắt buộc cho tất cả các thẻ và tiền tố được thêm vào là 'c' do đó nó có thể được sử dụng làm tiền tố cho tất cả các thẻ nhớ

Dòng mã 11-13: Ở đây chúng tôi sử dụng vòng lặp "forEach" trong đó tên biến là "gurucount", số bắt đầu là 5 và số kết thúc là 10. Chúng tôi đang in biến gurucount có các số bắt đầu từ 5 đến 10.

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

Đầu ra:

  • Đầu ra mà chúng tôi nhận được bắt đầu từ 5 đến 10.

5. Nếu

  • Nó được sử dụng cho các điều kiện Thử nghiệm.
  • Nếu thẻ được sử dụng để kiểm tra một điều kiện xem nó có đúng hay không dựa trên điều này, thì khối mã sẽ được thực thi.

Cú pháp:

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%><% @ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%> Thẻ lõi JSP5 

Giải thích mã:

Dòng mã 3: Tiền tố taglib này là bắt buộc cho tất cả các thẻ và tiền tố được thêm vào là 'c' do đó nó có thể được sử dụng làm tiền tố cho tất cả các thẻ nhớ

Dòng mã 11: Ở đây chúng tôi đang đặt biến có tên là đếm thành 100

Dòng mã 12-14: Ở đây chúng ta đang sử dụng "điều kiện nếu" trong đó chúng ta đang kiểm tra xem số đếm có bằng 100 hay không. Nó bằng 100 thì chúng ta nhận được kết quả là "Số đếm là 100."

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

Đầu ra:

  • Vì điều kiện "nếu" là đúng, chúng ta nhận được kết quả là "Số đếm là 100".

6. chuyển hướng:

  • Nó được sử dụng để chuyển hướng trang hiện tại đến một URL khác bằng cách cung cấp URL tương đối của thẻ này.
  • Nó hỗ trợ các URL tương đối theo ngữ cảnh

Cú pháp:

Ở đây url là url tương đối mà nó phải được chuyển hướng và tên ngữ cảnh của ứng dụng web cục bộ.

Thí dụ:

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%><% @ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%> Thẻ lõi JSP6 

Giải thích mã:

Dòng mã 3: Tiền tố taglib này là bắt buộc cho tất cả các thẻ và tiền tố được thêm vào là 'c' do đó nó có thể được sử dụng làm tiền tố cho tất cả các thẻ nhớ

Dòng mã 11: Ở đây chúng tôi sử dụng "thẻ chuyển hướng", nơi chúng tôi chỉ định tên url và khi chúng tôi nhấp vào trang đó, nó sẽ chuyển hướng đến trang web đã được cung cấp để chuyển hướng.

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

Đầu ra:

  • Chúng tôi nhận được url đầu ra guru99.com được chuyển hướng bởi coretag_jsp6.jsp

Thẻ tùy chỉnh JSP

  • Nó là một phần tử ngôn ngữ JSP do người dùng định nghĩa.
  • Khi JSP được dịch thành một servlet, thẻ tùy chỉnh được chuyển đổi thành một lớp thực hiện hành động trên một đối tượng và được gọi là trình xử lý thẻ.
  • Những hành động đó khi servlet được thực thi được gọi bởi vùng chứa web.
  • Để tạo thẻ tùy chỉnh do người dùng xác định, chúng ta cần tạo trình xử lý thẻ sẽ mở rộng SimpleTagSupport và phải ghi đè phương thức doTag ().
  • Chúng ta cần tạo TLD nơi chúng ta cần ánh xạ tệp lớp trong TLD.

Ưu điểm của thẻ tùy chỉnh trong JSP:

  • Di động - Một hành động được mô tả trong thư viện thẻ phải có thể sử dụng được trong bất kỳ vùng chứa JSP nào.
  • Đơn giản - Người dùng không thông thạo phải có thể hiểu và sử dụng cơ chế này. Người phụ trách chức năng JSP phải dễ dàng cung cấp cho người dùng dưới dạng hành động.
  • Thể hiện - Cơ chế phải hỗ trợ một loạt các hành động, bao gồm các hành động được thiết lập, các phần tử kịch bản bên trong các phần tử hành động, tạo, sử dụng và cập nhật các biến kịch bản.
  • Có thể sử dụng từ các ngôn ngữ kịch bản khác nhau - Mặc dù đặc tả JSP hiện tại chỉ xác định ngữ nghĩa cho các tập lệnh trong ngôn ngữ lập trình Java, chúng tôi muốn để ngỏ khả năng của các ngôn ngữ kịch bản khác.
  • Được xây dựng dựa trên các khái niệm và máy móc hiện có - Chúng tôi không muốn phát minh lại whatexists ở nơi khác. Ngoài ra, chúng tôi muốn tránh xung đột trong tương lai bất cứ khi nào chúng tôi có thể dự đoán chúng

Cú pháp:

Hãy xem xét chúng ta đang tạo thẻ testGuru và chúng ta có thể sử dụng lớp họcaghandlertestTag, lớp này sẽ ghi đè phương thức doTag ().

Class testTag extends SimpleTagSupport{ public void doTag()}

Ngoài ra, chúng ta sẽ phải ánh xạ lớp testTag này trong TLD (Bộ mô tả thư viện thẻ) vì vùng chứa JSP sẽ tự động tạo ánh xạ giữa tệp lớp và uri đã được đề cập trong tệp TLD.

Giao diện thẻ JSP

  • Lớp này sẽ phải mở rộng lớp SimpleTagSupport.
  • Lớp này sẽ phải ghi đè phương thức doTag () là một phần của lớp SimpleTagSupport (ghi đè là một phương thức được kế thừa từ lớp cha).
  • Giao diện này là một giao diện con của giao diện JSPTag.
  • Nó cung cấp các phương thức để thực hiện ở đầu và cuối thẻ.
  • Ngoài ra, chúng ta cần ánh xạ lớp này trong TLD tức là bộ mô tả Thư viện thẻ

Chúng tôi đang xem xét trong ví dụ dưới đây

Phương pháp giao diện thẻ

  • doTag () là một phương thức mà chúng ta cần ghi đè sẽ có nội dung cho thẻ.
  • Nó sử dụng Ngữ cảnh JSP hiện tại bằng getJSPContext ()

Thí dụ:

Customtag_jsp1.jsp

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%><% @ taglib prefix = "ex" uri = "WEB-INF / custom.tld"%> Thẻ tùy chỉnh 

Custom.tld

 1.0  2.0  Kiểm tra TLD  guruTag  demotest.guruTag  trống 

guruTag.java (TagHandler)

gói demo;nhập javax.servlet.jsp.tagext. *;nhập javax.servlet.jsp. *;nhập java.io. *;public class guruTag mở rộng SimpleTagSupport {public void doTag () ném JspException, IOException{JspWriter out = getJspContext (). GetOut ();out.println ("Thẻ Guru");}}

Giải thích mã:

guruTag.java (TagHandler)

Dòng mã 6: lớp guruTag đang mở rộng lớp SimpleTagSupport có trong javax.servlet.JSP jar

Dòng mã 7: Ở đây chúng ta đang ghi đè phương thức doTag () ném JspException và IOException.

Dòng mã 9-10: Trong phương pháp này, mã sẽ được nhúng vào thẻ tùy chỉnh sẽ được gọi. Chúng tôi đang lấy một đối tượng của JspWriter và đối tượng đó sẽ in ra "Thẻ Guru."

Custom.tld

Dòng mã 6: Ở đây tên của thẻ tùy chỉnh là "guruTag."

Dòng mã 7: Lớp thẻ là taghandlerclass, tức là guruTag.java. Nó có đầy đủ đường dẫn của tệp trình xử lý bao gồm đường dẫn thư mục của vị trí của tệp.

Customtag_jsp1.jsp

Dòng mã 3 : Tiền tố taglib này là bắt buộc cho tất cả các thẻ và tiền tố được thêm vào là 'ex', do đó nó có thể được sử dụng làm tiền tố cho tất cả các thẻ coretags và uri là custom.tld ánh xạ trình xử lý thẻ.

Dòng mã 11: Ở đây chúng tôi đang xác định thẻ tùy chỉnh "guruTag", thẻ này sẽ gọi phương thức doTag () của lớp trình xử lý và mã bên trong nó sẽ được thực thi.

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

Đầu ra:

  • Chúng tôi nhận đầu ra là "GuruTag" từ guruTag.java tức là TagHandler, phương thức này ghi đè phương thức doTag () và in "Thẻ Guru" làm đầu ra.

Tóm lược:

  • Trong phần này, chúng ta đã tìm hiểu về thư viện thẻ chuẩn JSP, trong đó chúng ta đã tạo các thẻ cốt lõi và thẻ tùy chỉnh.
  • Các thẻ cốt lõi bao gồm các thẻ for, if, redirect, import, catch là những thẻ được sử dụng cho các mục đích cơ bản trong JSP.
  • Ngoài ra, chúng tôi đã thực hiện các thẻ tùy chỉnh trong đó chúng tôi có thể xác định các thẻ và sử dụng nó trong JSP