Thẻ hành động JSP

⚡ Tóm tắt thông minh

Các thẻ hành động JSP sử dụng cú pháp XML để điều khiển hành vi của công cụ servlet, cho phép các nhà phát triển bao gồm các tệp, chuyển tiếp yêu cầu và làm việc với... JavaCác hạt đậu (beans) và nhúng nội dung động trong quá trình xử lý yêu cầu.

  • 🏷️ Bộ tiêu chuẩn: Mười một thẻ hành động tiêu chuẩn xử lý các thao tác bao gồm, chuyển tiếp, bean, plugin và đầu ra XML.
  • 📜 Cú pháp XML: Các thẻ hành động tuân theo định dạng XML nghiêm ngặt và được đánh giá lại trên mỗi yêu cầu.
  • 🔗 Tích hợp Bean: jsp:useBean, jsp:setProperty, và jsp:getProperty quản lý JavaVòng đời và các thuộc tính của Bean.
  • Luồng trang: jsp:include hợp nhất các tài nguyên; jsp:forward chuyển việc xử lý yêu cầu sang một trang khác.
  • 🧪 XML động: jsp:body, jsp:attribute, jsp:text và jsp:output tạo ra các cấu trúc XML một cách động.
  • 🤖 Hiện đại hóa trí tuệ nhân tạo: Trợ lý AI giúp tái cấu trúc mã hành động JSP cũ thành các framework hiện đại.

Thẻ hành động JSP

Thẻ hành động JSP là gì?

Các thẻ hành động JSP sử dụng cấu trúc cú pháp XML để điều khiển hành vi của công cụ servlet. Các nhà phát triển có thể chèn tệp một cách động và tái sử dụng chúng. JavaCác thành phần Bean chuyển hướng người dùng đến một trang khác và thực hiện các thao tác tương tự trong thời gian chạy thông qua các thẻ hành động JSP như include và forward. Không giống như các chỉ thị, thẻ hành động được đánh giá lại mỗi khi trang được truy cập, điều này làm cho chúng lý tưởng cho hành vi động trong quá trình xử lý yêu cầu.

Cú pháp:

<jsp:action_name attribute="value" />

Trong hướng dẫn này về các thẻ hành động tiêu chuẩn của JSP, bạn sẽ tìm hiểu cách thức hoạt động của từng thẻ hành động, chức năng của chúng và cách áp dụng chúng trong một tệp JSP thực tế.

Danh sách các thẻ hành động thường dùng trong JSP

Có 11 loại Thẻ hành động chuẩn trong JSP và sau đây là danh sách đầy đủ các loại thẻ đó.

Tên thẻ hành động cú pháp Mô tả Chi tiết
jsp:useBean Được sử dụng để gọi và sử dụng bean trong trang JSP.
jsp:bao gồm <jsp:include page=”page URL” flush=”true/false” /> Bao gồm một tệp JSP khác vào tệp hiện tại trong quá trình xử lý yêu cầu.
jsp:setProperty Thiết lập thuộc tính của bean.
jsp:getProperty Truy xuất thuộc tính của một bean và chuyển đổi nó thành chuỗi để xuất ra.
jsp: chuyển tiếp Chuyển tiếp yêu cầu tới trang JSP hoặc trang tĩnh khác.
jsp:plugin Giới thiệu Java các thành phần như applet hoặc bean vào JSP và tự động tạo thẻ.
jsp: cơ thể Xác định các phần tử XML được tạo ra một cách động trong quá trình xử lý yêu cầu.
jsp: văn bản mẫu văn bản Được sử dụng để chèn văn bản mẫu vào các trang JSP, chỉ chứa văn bản và biểu thức EL.
jsp:thông số Truyền tham số trong hành động jsp:plugin để thêm dữ liệu bổ sung.
jsp:thuộc tính Xác định các thuộc tính XML được tạo động.
jsp:đầu ra Chỉ định khai báo XML hoặc DOCTYPE sẽ được sử dụng trong đầu ra.

Giờ bạn đã có danh sách đầy đủ, chúng ta sẽ cùng tìm hiểu từng thẻ hành động JSP một, bao gồm cú pháp và ví dụ minh họa.

Thẻ hành động jsp:useBean

  • Tên hành động này được sử dụng khi bạn muốn sử dụng JavaCác hạt đậu trong trang JSP.
  • Với thẻ này, bạn có thể dễ dàng gọi một bean và tái sử dụng các thành phần phía máy chủ.

Cú pháp của jsp:useBean:

<jsp:useBean id="" class="" />

Ở đây, id chỉ định mã định danh cho bean này và class là đường dẫn đầy đủ đến lớp của bean.

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>Action JSP1</title>
</head>
<body>
<jsp:useBean id="name" class="demotest.DemoClass">
</body>
</html>

Giải thích mã:

Code Dòng 10: Trong đoạn mã trên, bạn sử dụng "bean id" và "class path" của bean.

Thẻ hành động jsp:include

  • jsp:include được sử dụng để chèn một tệp JSP vào một tệp khác trong quá trình xử lý yêu cầu, tương tự như việc bao gồm tệp thông thường. Chỉ thị.
  • Nó được thêm vào trong giai đoạn xử lý yêu cầu, có nghĩa là nội dung được bao gồm sẽ được đánh giá mỗi khi trang được yêu cầu.

Cú pháp của jsp:include:

<jsp:include page="page URL" flush="true/false">

Ví dụ:

Trong Action_jsp2 (Code Dòng 10), chúng ta đang bao gồm một tệp date.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>Date Guru JSP</title>
</head>
<body>
<jsp:include page="date.jsp" flush="true" />
</body>
</html>

Date.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>Insert title here</title>
</head>
<body>
<p>
Today's date: <%= new java.util.Date().toLocaleString()%>
</p>
</body>
</html>

Giải thích mã:

Action_jsp2.jsp

Code Dòng 10: Trong tập tin đầu tiên, chúng ta đang bao gồm tập tin date.jsp trong tập tin action_jsp2.jsp.

Date.jsp:

Code Dòng 11: Chúng tôi đang in ngày hôm nay ở dòng mã thứ 11 trong tệp date.jsp.

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

jsp:bao gồm

Đầu ra:

  • Nó hiển thị ngày tháng hiện tại kèm theo giờ vì tệp ngày tháng được bao gồm trong trang JSP chính.

Thẻ hành động jsp:setProperty

  • Thao tác tiêu chuẩn này trong JSP được sử dụng để thiết lập thuộc tính của bean.
  • Bạn cần định nghĩa một bean trước khi thiết lập thuộc tính.

Cú pháp:

<jsp:setProperty name="" property="" >

Ở đây, `name` xác định đối tượng bean có thuộc tính được thiết lập, và `property` là thuộc tính bạn muốn thiết lập. Bạn cũng có thể thiết lập các thuộc tính `value` và `param`. Ở đây, `value` không bắt buộc, và nó xác định giá trị được gán cho thuộc tính. `param` là tên của tham số yêu cầu mà qua đó giá trị có thể được lấy. Ví dụ về `setProperty` sẽ được minh họa bên dưới với `getProperty`.

Thẻ hành động jsp:getProperty

  • Thao tác này được sử dụng để lấy thuộc tính của hạt đậu.
  • Nó chuyển đổi thuộc tính thành chuỗi và cuối cùng chèn chuỗi đó vào kết quả đầu ra.

Cú pháp:

<jsp:getProperty name="" property="" >

Ở đây, `name` là tên của bean mà từ đó thuộc tính cần được truy xuất, và bean đó phải được định nghĩa. `property attribute` là tên của thuộc tính bean cần được truy xuất.

Ví dụ về setProperty và getProperty:

TestBean.java:

package demotest;

import java.io.Serializable;

public class TestBean implements Serializable{
	
	private String msg = "null";
	
	public String getMsg() {
		return msg;
	}
	
	public void setMsg(String msg) {
		this.msg = msg;
	}
}

Action_jsp3.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>Guru Action 3</title>
</head>
<body>
<jsp:useBean id="GuruTest" class="demotest.TestBean" />
<jsp:setProperty name="GuruTest" property="msg" value="GuruTutorial" />
<jsp:getProperty name="GuruTest" property="msg" />
</body>
</html>

Giải thích mã:

TestBean.java:

Code Dòng 5: TestBean đang triển khai lớp Serializable. Nó là một lớp bean có các phương thức getter và setter trong mã.

Code Dòng 7Ở đây, chúng ta coi biến chuỗi riêng tư msg là "null".

Code Dòng 9-14Ở đây, chúng ta đang sử dụng các phương thức getter và setter cho biến “msg”.

Action_jsp3.jsp

Code Dòng 10: Ở đây, chúng ta sử dụng thẻ “useBean”, dùng để chỉ định bean (TestBean) cần được sử dụng trong lớp JSP này.

Code Dòng 11: Ở đây, chúng ta đang thiết lập giá trị cho thuộc tính msg của bean TestBean là “GuruHướng dẫn”.

Code Dòng 12: Ở đây, bằng cách sử dụng getProperty, chúng ta đang lấy giá trị của thuộc tính msg cho bean TestBean (Guru(Hướng dẫn), được hiển thị trong kết quả đầu ra.

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

jsp:getProperty

Đầu ra:

Trong ví dụ này, sử dụng TestBean, chúng ta thiết lập thuộc tính “msg” bằng phương thức setProperty và lấy giá trị của thuộc tính bằng phương thức getProperty là “GuruHướng dẫn”.

Thẻ hành động jsp:forward

Thẻ hành động jsp:forward được sử dụng để chuyển tiếp yêu cầu đến một trang JSP khác hoặc bất kỳ trang tĩnh nào.

Ở đây yêu cầu có thể được chuyển tiếp mà không có tham số hoặc có tham số.

Cú pháp:

<jsp:forward page="value">

Giá trị ở đây thể hiện nơi yêu cầu phải được chuyển tiếp.

Ví dụ:

Action_jsp41.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>Guru Action JSP1</title>
</head>
<body>
<jsp:forward page="jsp_action_42.jsp" />
</body>
</html>

Jsp_action_42.jsp

Guru Action JSP2</title>
</head>
<body>
<a>This is after forward page</a>
</body>
</html>

Giải thích mã:

Action_jsp41.jsp

Code Dòng 10: Ở đây, chúng ta sử dụng hành động JSP chuyển tiếp để chuyển tiếp yêu cầu đến trang được chỉ định trong thuộc tính, tức là jsp_action_42.jsp.

Jsp_action_42.jsp

Code Dòng 10: Khi chúng ta gọi action_jsp41.jsp, yêu cầu sẽ được chuyển tiếp đến trang này và chúng ta nhận được kết quả là “Đây là trang sau khi chuyển tiếp”.

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

jsp: chuyển tiếp

Đầu ra:

Chúng ta gọi action_jsp41.jsp, nhưng yêu cầu được chuyển tiếp đến jsp_action_42.jsp, và chúng ta nhận được đầu ra từ trang đó là “Đây là trang sau khi chuyển tiếp”.

Thẻ hành động jsp:plugin

  • Nó được dùng để giới thiệu Java các thành phần vào JSP, trong đó Java Các thành phần có thể là applet hoặc bean.
  • Nó phát hiện trình duyệt và thêm vào. hoặc thêm thẻ vào tệp.

Cú pháp:

<jsp:plugin type="applet/bean" code="objectcode" codebase="objectcodebase">
  • Ở đây, kiểu dữ liệu chỉ định đó là một đối tượng hoặc một bean.
  • Code Chỉ định tên lớp của applet hoặc bean.
  • Codecơ sở chứa cơ sở URL Chứa các tệp tin về các lớp học.

jsp:param Thẻ hành động

  • Đây là một đối tượng con của đối tượng plugin được mô tả ở trên.
  • Nó phải chứa một hoặc nhiều hành động để cung cấp các tham số bổ sung.

Cú pháp:

<jsp:params>
<jsp:param name="val" value="val"/ >
</jsp:params>

Ví dụ về plugin và tham số:

Action_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>Action guru jsp5</title>
</head>
<body>
<jsp:plugin type="bean" code="Student.class" codebase="demotest.Student">
  <jsp:params>
     <jsp:param name="id" value="5" />
     <jsp:param name="name" value="guru" />
  </jsp:params>
</jsp:plugin>
</body>
</html>

Sinh viên.java

package demotest; 

import java.io.Serializable;

public class Student implements Serializable {
	
	public String getName () { 
		return name; 
	}
	public void setName (String name) {
		this.name = name;
	}
	public int getId() { 
		return id; 
	} 
	public void setId (int id) { 
		this.id = id; 
	} 
	private String name = "null"; 
	private int id = 0;
	
}

Giải thích mã:

Action_jsp5.jsp

Code Dòng 10: Ở đây chúng ta đang sử dụng đối tượng jsp:plugin, trong đó chúng ta lấy ba thuộc tính.

  • Loại – trong trường hợp này là đậu.
  • Code – Tên của tập tin.
  • Codebase – đường dẫn chứa tên gói.

Code Dòng 11-14: Ở đây, chúng ta lấy đối tượng jsp:params, bên trong đó có một đối tượng con param với các thuộc tính name và value, và chúng ta đang thiết lập giá trị cho id và name trong các thuộc tính này.

Sinh viên.java

Code 7-17: Chúng tôi đang sử dụng các phương thức getter và setter cho các biến id và name.

Code 19-20: Chúng ta đang khởi tạo các biến id và name.

Ở đây, chúng ta sẽ nhận được kết quả đầu ra trong trường hợp các giá trị đã thiết lập của tham số được sử dụng trong bean Student. Trong trường hợp này, chúng ta sẽ không có bất kỳ kết quả đầu ra nào vì chúng ta chỉ thiết lập và lấy giá trị của tham số mà không in chúng ra bất cứ đâu.

Thẻ hành động jsp:body

  • Thẻ này được sử dụng để định nghĩa XML một cách động, trong đó Các yếu tố có thể được tạo ra trong quá trình yêu cầu chứ không phải trong quá trình biên dịch.
  • Nó định nghĩa XML, được tạo động dưới dạng phần thân của một phần tử.

Cú pháp:

<jsp:body></jsp:body>

Tại đây, chúng ta viết thẻ body XML bên trong các thẻ này.

Thẻ hành động jsp:attribute

  • Thẻ này được sử dụng để định nghĩa XML một cách động, trong đó các phần tử có thể được tạo ra trong quá trình yêu cầu chứ không phải trong quá trình biên dịch.
  • Nó định nghĩa thuộc tính của XML sẽ được tạo ra một cách động.

Cú pháp:

<jsp:attribute></jsp:attribute>

Ở đây chúng ta viết thẻ thuộc tính của XML.

Ví dụ về phần thân và thuộc tính:

Action_jsp6.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>Action Guru JSP6</title>
</head>
<body>
<jsp:element name="GuruXMLElement">
<jsp:attribute name="GuruXMLattribute">
Value
</jsp:attribute>
<jsp:body>Guru XML</jsp:body>
</jsp:element>
</body>
</html>

Giải thích mã:

Code Dòng 10: Ở đây, chúng ta đang định nghĩa một phần tử được tạo ra một cách động như sau: XMLvà tên của nó sẽ là GuruPhần tử XML.

Code Dòng 11-13: Ở đây, chúng ta đang định nghĩa một thuộc tính, thuộc tính này sẽ là một thuộc tính XML của XML được tạo động.

Code Dòng 14: Đây là phần thân của tệp XML, nơi chúng ta viết nội dung XML, nội dung này sẽ được tạo ra một cách động.

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

jsp:thuộc tính

Đầu ra:

Ở đây, chúng ta nhận được kết quả từ thẻ <body> của XML được tạo ra.

Thẻ hành động jsp:text

  • Nó được sử dụng để chèn văn bản mẫu vào các trang JSP.
  • Phần thân của nó không chứa bất kỳ phần tử nào khác và chỉ chứa văn bản và biểu thức EL.

Cú pháp:

<jsp:text>template text</jsp:text>

Ở đây, văn bản mẫu chỉ đề cập đến văn bản mẫu (có thể là bất kỳ văn bản chung nào cần được in trên JSP) hoặc bất kỳ văn bản nào khác. biểu thức EL.

Ví dụ:

Action_jsp7.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>Guru Action JSP7</title>
</head>
<body>
<jsp:text>Guru Template Text</jsp:text>
</body>
</html>

Giải thích mã:

Code Dòng 10: Ở đây, chúng ta sử dụng đối tượng văn bản để in văn bản mẫu.

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

jsp: văn bản

Đầu ra:

Chúng tôi đang nhận được Guru Văn bản mẫu, được đặt bên trong đối tượng hành động văn bản.

Thẻ hành động jsp:output

  • Nó chỉ định phần khai báo XML hoặc phần khai báo DOCTYPE của JSP.
  • Phần khai báo XML và DOCTYPE được khai báo bởi phần đầu ra.

Cú pháp:

<jsp:output doctype-root-element="" doctype-system="">

Ở đây, doctype-root-element chỉ định phần tử gốc của tài liệu XML trong DOCTYPE. Doctype-system chỉ định loại tài liệu được tạo ra trong đầu ra và cung cấp một hằng số hệ thố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>Action Guru JSP8</title>
</head>
<body>
<jsp:output doctype-root-element="html PUBLIC" doctype-system="http://www.w3.org/TR/html4/loose.dtd"/>
</body>
</html>

Giải thích mã:

Code Dòng 10: Ở đây, chúng ta sử dụng đối tượng hành động đầu ra để tạo DOCTYPE, và bên trong nó sẽ được tạo ra theo định dạng này:

Sẽ không có bất kỳ đầu ra nào hiển thị cho việc này vì nó sẽ được tạo ra nội bộ.

Câu Hỏi Thường Gặp

Các thẻ hành động JSP là các phần tử kiểu XML kiểm soát hành vi của công cụ servlet trong quá trình xử lý yêu cầu. Chúng cho phép các nhà phát triển bao gồm các tệp, chuyển tiếp yêu cầu, sử dụng... JavaBeans, applet nhúng và tạo đầu ra XML động bên trong trang JSP.

Các chỉ thị được xử lý một lần tại thời điểm dịch trang và ảnh hưởng đến cấu trúc tổng thể của trang. Các thẻ hành động được đánh giá lại trên mỗi yêu cầu, điều này làm cho chúng phù hợp với các hành vi động như bao gồm nội dung, chuyển tiếp yêu cầu và làm việc với... JavaCác Bean trong quá trình thực thi.

Sử dụng jsp:include khi bạn cần hợp nhất nội dung từ một trang khác vào phản hồi hiện tại, chẳng hạn như tiêu đề hoặc chân trang. Sử dụng jsp:forward khi quyền điều khiển cần được chuyển giao hoàn toàn cho một tài nguyên khác và trang hiện tại không nên tạo ra thêm bất kỳ đầu ra nào nữa.

jsp:useBean khởi tạo hoặc định vị một đối tượng JavaĐối tượng Bean trong một phạm vi nhất định. Phương thức `jsp:setProperty` gán giá trị cho thuộc tính của Bean, và phương thức `jsp:getProperty` đọc giá trị thuộc tính đó và ghi nó dưới dạng chuỗi vào phản hồi, cho phép tách biệt rõ ràng giữa phần trình bày và logic của Bean.

jsp:body và jsp:attribute định nghĩa các phần thân và thuộc tính động của các phần tử XML. jsp:text ghi văn bản mẫu và các biểu thức EL theo nghĩa đen, còn jsp:output kiểm soát khai báo XML hoặc DOCTYPE được tạo ra khi JSP hiển thị phản hồi của nó.

Trí tuệ nhân tạo (AI) được tích hợp vào các ứng dụng JSP và JEE thông qua các lệnh gọi REST đến API của mô hình, trợ lý trò chuyện nhúng và các tiện ích đề xuất được hiển thị trên các trang JSP. AI cũng giúp tạo mã JSP mẫu, đề xuất cách sử dụng thẻ hành động và xác thực việc kết nối bean trong quá trình phát triển.

Đúng vậy. Các công cụ hỗ trợ bởi AI phân tích mã JSP cũ, xác định các mẫu thẻ hành động và đề xuất các phương án tái cấu trúc sang các framework hiện đại như Spring MVC, Thymeleaf hoặc REST cộng với ứng dụng trang đơn. Chúng cũng tạo ra các bài kiểm tra di chuyển, báo cáo phụ thuộc và kế hoạch tái cấu trúc từng bước.

Tóm tắt bài viết này với: