JSP - Hành động
Trong chương này, chúng ta sẽ thảo luận về các Hành động trong JSP. Các hành động này sử dụng các cấu trúc trong cú pháp XML để kiểm soát hành vi của động cơ servlet. Bạn có thể tự động chèn tệp, sử dụng lại các thành phần JavaBeans, chuyển tiếp người dùng đến một trang khác hoặc tạo HTML cho plugin Java.
Chỉ có một cú pháp cho phần tử Hành động, vì nó tuân theo tiêu chuẩn XML -
<jsp:action_name attribute = "value" />
Yếu tố hành động về cơ bản là các chức năng được xác định trước. Bảng sau liệt kê các hành động JSP có sẵn:
Không. | Cú pháp & Mục đích |
---|---|
1 | jsp:include Bao gồm một tệp tại thời điểm trang được yêu cầu. |
2 | jsp:useBean Tìm hoặc khởi tạo một JavaBean. |
3 | jsp:setProperty Đặt thuộc tính của JavaBean. |
4 | jsp:getProperty Chèn thuộc tính của JavaBean vào đầu ra. |
5 | jsp:forward Chuyển tiếp người yêu cầu đến một trang mới. |
6 | jsp:plugin Tạo mã dành riêng cho trình duyệt tạo thẻ OBJECT hoặc EMBED cho plugin Java. |
7 | jsp:element Định nghĩa động các phần tử XML. |
số 8 | jsp:attribute Xác định thuộc tính của phần tử XML được xác định động. |
9 | jsp:body Xác định nội dung của phần tử XML được xác định động. |
10 | jsp:text Được sử dụng để viết văn bản mẫu trong các trang và tài liệu JSP. |
Thuộc tính chung
Có hai thuộc tính chung cho tất cả các phần tử Hành động: id thuộc tính và scope thuộc tính.
Thuộc tính Id
Thuộc tính id xác định duy nhất phần tử Hành động và cho phép hành động được tham chiếu bên trong trang JSP. Nếu Hành động tạo ra một thể hiện của một đối tượng, giá trị id có thể được sử dụng để tham chiếu nó thông qua đối tượng ngầm định TrangContext.
Thuộc tính phạm vi
Thuộc tính này xác định vòng đời của phần tử Hành động. Thuộc tính id và thuộc tính phạm vi có liên quan trực tiếp, vì thuộc tính phạm vi xác định tuổi thọ của đối tượng được liên kết với id. Thuộc tính phạm vi có bốn giá trị có thể có:(a) page, (b)request, (c)sessionvà (d) application.
Hành động <jsp: include>
Hành động này cho phép bạn chèn tệp vào trang đang được tạo. Cú pháp trông như thế này -
<jsp:include page = "relative URL" flush = "true" />
Không giống như include Chỉ thị chèn tệp tại thời điểm trang JSP được dịch thành một servlet, hành động này sẽ chèn tệp vào thời điểm trang được yêu cầu.
Bảng sau liệt kê các thuộc tính được liên kết với hành động bao gồm:
Không. | Thuộc tính & Mô tả |
---|---|
1 | page URL tương đối của trang được đưa vào. |
2 | flush Thuộc tính boolean xác định xem tài nguyên được bao gồm có bị xóa bộ đệm trước khi nó được đưa vào hay không. |
Thí dụ
Hãy để chúng tôi xác định hai tệp sau (a)date.jsp và (b) main.jsp như sau -
Sau đây là nội dung của date.jsp tập tin -
<p>Today's date: <%= (new java.util.Date()).toLocaleString()%></p>
Sau đây là nội dung của main.jsp tập tin -
<html>
<head>
<title>The include Action Example</title>
</head>
<body>
<center>
<h2>The include action Example</h2>
<jsp:include page = "date.jsp" flush = "true" />
</center>
</body>
</html>
Bây giờ chúng ta hãy giữ tất cả các tệp này trong thư mục gốc và cố gắng truy cập main.jsp. Bạn sẽ nhận được kết quả sau:
The include action Example
Today's date: 12-Sep-2010 14:54:22
Hành động <jsp: useBean>
Các useBeanhành động khá linh hoạt. Đầu tiên, nó tìm kiếm một đối tượng hiện có bằng cách sử dụng các biến id và phạm vi. Nếu một đối tượng không được tìm thấy, nó sẽ cố gắng tạo đối tượng được chỉ định.
Cách đơn giản nhất để tải một bean như sau:
<jsp:useBean id = "name" class = "package.class" />
Sau khi một lớp bean được tải, bạn có thể sử dụng jsp:setProperty và jsp:getProperty các hành động để sửa đổi và truy xuất các thuộc tính bean.
Bảng sau liệt kê các thuộc tính được liên kết với hành động useBean:
Không. | Thuộc tính & Mô tả |
---|---|
1 | class Chỉ định tên gói đầy đủ của đậu. |
2 | type Chỉ định kiểu của biến sẽ tham chiếu đến đối tượng. |
3 | beanName Cung cấp tên của bean như được chỉ định bởi phương thức Instantiate () của lớp java.beans.Beans. |
Bây giờ chúng ta hãy thảo luận về jsp:setProperty và jsp:getProperty trước khi đưa ra một ví dụ hợp lệ liên quan đến các hành động này.
Hành động <jsp: setProperty>
Các setPropertyhành động đặt các thuộc tính của Bean. Bean phải được xác định trước đó trước hành động này. Có hai cách cơ bản để sử dụng hành động setProperty -
Bạn có thể dùng jsp:setProperty sau, nhưng bên ngoài một jsp:useBean phần tử, như được đưa ra bên dưới -
<jsp:useBean id = "myName" ... />
...
<jsp:setProperty name = "myName" property = "someProperty" .../>
Trong trường hợp này, jsp:setProperty được thực thi bất kể một bean mới đã được khởi tạo hay một bean hiện có đã được tìm thấy.
Bối cảnh thứ hai trong đó jsp: setProperty có thể xuất hiện bên trong phần thân của jsp:useBean phần tử, như được đưa ra bên dưới -
<jsp:useBean id = "myName" ... >
...
<jsp:setProperty name = "myName" property = "someProperty" .../>
</jsp:useBean>
Ở đây, jsp: setProperty chỉ được thực thi khi một đối tượng mới được khởi tạo, chứ không phải nếu một đối tượng hiện có được tìm thấy.
Bảng sau liệt kê các thuộc tính được liên kết với setProperty hành động -
Không. | Thuộc tính & Mô tả |
---|---|
1 | name Chỉ định bean thuộc tính sẽ được thiết lập. Bean phải được xác định trước đó. |
2 | property Cho biết thuộc tính bạn muốn đặt. Giá trị "*" có nghĩa là tất cả các tham số yêu cầu có tên khớp với tên thuộc tính bean sẽ được chuyển đến các phương thức setter thích hợp. |
3 | value Giá trị được gán cho thuộc tính đã cho. Giá trị của tham số là null hoặc tham số không tồn tại, hành động setProperty bị bỏ qua. |
4 | param Thuộc tính param là tên của tham số yêu cầu có giá trị mà thuộc tính sẽ nhận. Bạn không thể sử dụng cả giá trị và tham số, nhưng cũng được phép sử dụng cả hai. |
Hành động <jsp: getProperty>
Các getProperty action được sử dụng để truy xuất giá trị của một thuộc tính nhất định và chuyển nó thành một chuỗi, và cuối cùng chèn nó vào đầu ra.
Hành động getProperty chỉ có hai thuộc tính, cả hai đều là bắt buộc. Cú pháp của hành động getProperty như sau:
<jsp:useBean id = "myName" ... />
...
<jsp:getProperty name = "myName" property = "someProperty" .../>
Bảng sau liệt kê các thuộc tính bắt buộc được liên kết với getProperty hành động -
Không. | Thuộc tính & Mô tả |
---|---|
1 | name Tên của Bean có thuộc tính cần truy xuất. Bean phải được xác định trước đó. |
2 | property Thuộc tính property là tên của thuộc tính Bean sẽ được truy xuất. |
Thí dụ
Hãy để chúng tôi xác định một bean thử nghiệm sẽ được sử dụng thêm trong ví dụ của chúng tôi -
/* File: TestBean.java */
package action;
public class TestBean {
private String message = "No message specified";
public String getMessage() {
return(message);
}
public void setMessage(String message) {
this.message = message;
}
}
Biên dịch mã trên thành mã được tạo TestBean.class và đảm bảo rằng bạn đã sao chép TestBean.class trong C:\apache-tomcat-7.0.2\webapps\WEB-INF\classes\action thư mục và CLASSPATH biến cũng nên được đặt thành thư mục này -
Bây giờ sử dụng mã sau trong main.jsptập tin. Thao tác này tải bean và đặt / nhận một tham số Chuỗi đơn giản -
<html>
<head>
<title>Using JavaBeans in JSP</title>
</head>
<body>
<center>
<h2>Using JavaBeans in JSP</h2>
<jsp:useBean id = "test" class = "action.TestBean" />
<jsp:setProperty name = "test" property = "message"
value = "Hello JSP..." />
<p>Got message....</p>
<jsp:getProperty name = "test" property = "message" />
</center>
</body>
</html>
Bây giờ chúng ta hãy thử truy cập main.jsp, nó sẽ hiển thị kết quả sau:
Using JavaBeans in JSP
Got message.... Hello JSP...
Hành động <jsp: forward>
Các forward hành động chấm dứt hoạt động của trang hiện tại và chuyển tiếp yêu cầu đến một tài nguyên khác như trang tĩnh, trang JSP khác hoặc Java Servlet.
Sau đây là cú pháp của forward hành động -
<jsp:forward page = "Relative URL" />
Bảng sau liệt kê các thuộc tính bắt buộc được liên kết với hành động chuyển tiếp:
Không. | Thuộc tính & Mô tả |
---|---|
1 | page Nên bao gồm một URL tương đối của một tài nguyên khác, chẳng hạn như một trang tĩnh, một trang JSP khác hoặc một Java Servlet. |
Thí dụ
Hãy để chúng tôi sử dụng lại hai tệp sau (a) date.jsp và (b) main.jsp như sau -
Sau đây là nội dung của date.jsp tập tin -
<p>Today's date: <%= (new java.util.Date()).toLocaleString()%></p>
Sau đây là nội dung của main.jsp tập tin -
<html>
<head>
<title>The include Action Example</title>
</head>
<body>
<center>
<h2>The include action Example</h2>
<jsp:forward page = "date.jsp" />
</center>
</body>
</html>
Bây giờ chúng ta hãy giữ tất cả các tệp này trong thư mục gốc và cố gắng truy cập main.jsp. Điều này sẽ hiển thị kết quả giống như dưới đây.
Ở đây, nó loại bỏ nội dung khỏi trang chính và chỉ hiển thị nội dung từ trang được chuyển tiếp.
Today's date: 12-Sep-2010 14:54:22
Hành động <jsp: plugin>
Các pluginhành động được sử dụng để chèn các thành phần Java vào một trang JSP. Nó xác định loại trình duyệt và chèn<object> hoặc là <embed> nếu cần.
Nếu không có plugin cần thiết, nó sẽ tải xuống plugin và sau đó thực thi thành phần Java. Thành phần Java có thể là một Applet hoặc một JavaBean.
Hành động plugin có một số thuộc tính tương ứng với các thẻ HTML phổ biến được sử dụng để định dạng các thành phần Java. Các<param> cũng có thể được sử dụng để gửi các tham số đến Applet hoặc Bean.
Sau đây là cú pháp điển hình của việc sử dụng hành động plugin:
<jsp:plugin type = "applet" codebase = "dirname" code = "MyApplet.class"
width = "60" height = "80">
<jsp:param name = "fontcolor" value = "red" />
<jsp:param name = "background" value = "black" />
<jsp:fallback>
Unable to initialize Java Plugin
</jsp:fallback>
</jsp:plugin>
Bạn có thể thử hành động này bằng một số applet nếu bạn quan tâm. Một yếu tố mới,<fallback> , có thể được sử dụng để chỉ định một chuỗi lỗi sẽ được gửi đến người dùng trong trường hợp thành phần bị lỗi.
The <jsp:element> Action
The <jsp:attribute> Action
The <jsp:body> Action
Các <jsp:element>, <jsp:attribute> và <jsp:body>các hành động được sử dụng để xác định động các phần tử XML. Từ động rất quan trọng, bởi vì nó có nghĩa là các phần tử XML có thể được tạo ra tại thời điểm yêu cầu thay vì tĩnh tại thời điểm biên dịch.
Sau đây là một ví dụ đơn giản để xác định động các phần tử XML:
<%@page language = "java" contentType = "text/html"%>
<html xmlns = "http://www.w3c.org/1999/xhtml"
xmlns:jsp = "http://java.sun.com/JSP/Page">
<head><title>Generate XML Element</title></head>
<body>
<jsp:element name = "xmlElement">
<jsp:attribute name = "xmlElementAttr">
Value for the attribute
</jsp:attribute>
<jsp:body>
Body for XML element
</jsp:body>
</jsp:element>
</body>
</html>
Điều này sẽ tạo ra mã HTML sau tại thời điểm chạy:
<html xmlns = "http://www.w3c.org/1999/xhtml" xmlns:jsp = "http://java.sun.com/JSP/Page">
<head><title>Generate XML Element</title></head>
<body>
<xmlElement xmlElementAttr = "Value for the attribute">
Body for XML element
</xmlElement>
</body>
</html>
Hành động <jsp: text>
Các <jsp:text>hành động có thể được sử dụng để viết văn bản mẫu trong các trang và tài liệu JSP. Sau đây là cú pháp đơn giản cho hành động này:
<jsp:text>Template data</jsp:text>
Phần thân của mẫu không được chứa các phần tử khác; nó chỉ có thể chứa văn bản và biểu thức EL (Lưu ý - Biểu thức EL được giải thích trong chương tiếp theo). Lưu ý rằng trong các tệp XML, bạn không thể sử dụng các biểu thức như${whatever > 0}, bởi vì dấu hiệu lớn hơn là bất hợp pháp. Thay vào đó, hãy sử dụnggt hình thức, chẳng hạn như ${whatever gt 0} hoặc một giải pháp thay thế là nhúng giá trị vào CDATA phần.
<jsp:text><![CDATA[<br>]]></jsp:text>
Nếu bạn cần bao gồm một DOCTYPE tuyên bố, ví dụ XHTML, bạn cũng phải sử dụng <jsp:text> phần tử như sau -
<jsp:text><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">]]></jsp:text>
<head><title>jsp:text action</title></head>
<body>
<books><book><jsp:text>
Welcome to JSP Programming
</jsp:text></book></books>
</body>
</html>
Hãy thử ví dụ trên có và không <jsp:text> hoạt động.