14/08/2018, 10:45

Action trong JSP

JSP action sử dụng các chỉ lệnh trong cú pháp XML để điều khiển hành vi của Servlet engine. Bạn có thể chèn động một file, tái sử dụng các thành phần JavaBeans, chuyển người dùng tới trang khác, hoặc tạo HTML cho Java plugin. Chỉ có một cú pháp cho phần tử Action trong JSP, khi nó tuân theo ...

JSP action sử dụng các chỉ lệnh trong cú pháp XML để điều khiển hành vi của Servlet engine. Bạn có thể chèn động một file, tái sử dụng các thành phần JavaBeans, chuyển người dùng tới trang khác, hoặc tạo HTML cho Java plugin.

Chỉ có một cú pháp cho phần tử Action trong JSP, khi nó tuân theo chuẩn XML.

<jsp:action_name attribute="value" />

Về cơ bản, các phần tử Action là các hàm tiền định nghĩa và có các action trong JSP có sẵn sau:

Cú pháp Mục đích
jsp:includeInclude một file tại thời điểm trang đó được yêu cầu
jsp:useBeanTìm kiếm hoặc thuyết minh một JavaBean
jsp:setPropertyThiết lập thuộc tính của một JavaBean
jsp:getPropertyChèn thuộc tính của một JavaBean vào trong output
jsp:forwardChuyển người yêu cầu tới trang mới
jsp:pluginTạo code cho trình duyệt riêng mà tạo một thẻ OBJECT hoặc EMBED cho Java plugin
jsp:elementĐịnh nghĩa động các phần tử XML
jsp:attributeĐịnh nghĩa động thuộc tính của phần tử XML đã được định nghĩa
jsp:bodyĐịnh nghĩa động phần thân của phần tử XML đã được định nghĩa
jsp:textSử dụng để viết template text trong các JSP page và tài liệu JSP

Các thuộc tính phổ biển của action trong JSP

Có hai thuộc tính phổ biến cho các phần tử Action: thuộc tính id và thuộc tính scope:

<jsp:include> Action trong JSP

Action này cho phép bạn chèn các file vào trong các trang đang được tạo. Cú pháp như sau:

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

Không giống include directive, mà chèn file tại thời điểm JSP page được phiên dịch thành một Servlet, include action này chèn file tại thời điểm page được yêu cầu.

Bảng sau liệt kê các thuộc tính liên quan với include action trong JSP:

Thuộc tính Miêu tả
pageURL quan hệ của trang để được include
flushThuộc tính Boolean quyết định có hay không nguồn được bao có bộ đệm của nó được flush trước khi nó được bao

Ví dụ

Chúng tôi định nghĩa hai file: date.jspmain.jsp như sau:

Nội dung của date.jsp file:

<p>
   Today's date: <%= (new java.util.Date()).toLocaleString()%>
</p>

Nội dung của main.jsp file:

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

Giữ tất cả các file này trong thư mục gốc và thử truy cập main.jsp. Nó sẽ hiển thị kết quả như sau:

The include action Example

Today's date: 12-Sep-2010 14:54:22

<jsp:useBean> Action trong JSP

useBean action trong JSP là khá linh hoạt. Đầu tiên nó tìm kiếm một đối tượng đang tồn tại đang sử dụng thuộc tính id và scope. Nếu một đối tượng không được tìm thấy, thì nó cố gắng tạo đối tượng đã xác định đó.

Cách đơn giản nhất để tải một Bean như sau:

<jsp:useBean id="name" class="package.class" />

Khi lớp Bean đã được tải, bạn có thể sử dụng các jsp:setProperty action và jsp:getProperty action để sửa đổi và thu nhận các đặc tính của Bean.

Bảng dưới liệt kê các thuộc tính liên kết với useBean action trong JSP:

Thuộc tính Miêu tả
classChỉ định tên package đầy đủ của Bean
typeXác định kiểu biến mà sẽ tham chiếu tới đối tượng
beanNameCung cấp tên của Bean như được xác định bởi phương thức instantiate() của lớp java.beans.Beans

Sau đây chúng ta sẽ bàn luận về các jsp:setProperty action và jsp:getProperty action trước khi tham khảo một ví dụ liên quan tới các action này.

<jsp:setProperty> Action trong JSP

setProperty action trong JSP thiết lập các đặc tính của một Bean. Bean phải được tiền định nghĩa trước action này. Có hai cách cơ bản để sử dụng setProperty Action:

Bạn có thể sử dụng jsp:setProperty action sau khi, nhưng bên ngoài của một phần tử jsp:useBean như sau:

<jsp:useBean id="myName" ... />
...
<jsp:setProperty name="myName" property="someProperty" .../>

Trong trường hợp này, jsp:setProperty được thực thi, dù cho có hay không một Bean mới đã được thuyết minh hoặc một Bean đang tồn tại được tìm thấy.

Ngữ cảnh thứ hai mà jsp: setProperty có thể xuất hiện là bên trong phần thân của một phần tử jsp:useBean như sau:

<jsp:useBean id="myName" ... >
...
   <jsp:setProperty name="myName" property="someProperty" .../>
</jsp:useBean>

Ở đây, jsp:setProperty được thực thi chỉ khi một đối tượng mới được tạo, không phải khi một đối tượng đang tồn tại được tìm thấy.

Bảng dưới liệt kê các thuộc tính liên kết với setProperty action trong JSP:

Thuộc tính Miêu tả
nameChỉ định Bean mà toàn bộ thuộc tính của nó sẽ được thiết lập. Bean phải được định nghĩa trước
propertyChỉ dẫn giá trị bạn muốn thiết lập. Một giá trị "*" nghĩa là tất cả tham số yêu cầu mà tên của nó so khớp với các tên property của Bean sẽ được truyền tới phương thức setter thích hợp
valueGiá trị mà để được gán tới property đã cho. Giá trị của tham số là null, hoặc tham số không tồn tại, setProperty bị bỏ qua
paramThuộc tính param là tên của tham số yêu cầu mà có giá trị để được nhận. Bạn không thể sử dụng cả value và param

<jsp:getProperty> Action trong JSP

getProperty action trong JSP được sử dụng để thu nhận giá trị của một property đã cung cấp và biến đổi nó thành một chuỗi, và cuối cùng chèn nó vào trong output.

getProperty action chỉ có hai thuộc tính, cả hai thuộc tính này được yêu cầu như trong cú pháp đơn giản sau:

<jsp:useBean id="myName" ... />
...
<jsp:getProperty name="myName" property="someProperty" .../>

Sau đây là danh sách các thuộc tính liên kết với getProperty action trong JSP:

Thuộc tính Miêu tả
nameTên của Bean mà có một property để được thu nhận. Bean phải được định nghĩa trước
propertyThuộc tính property là tên của Bean property để được thu nhận

Ví dụ

Sau đây chúng tôi định nghĩa một test Bean để sử dụng trông ví dụ sau:

/* 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 code trên để tạo TestBean.class file và bảo đảm rằng bạn đã sao TestBean.class trong C:apache-tomcat-7.0.2webappsWEB-INFclassesaction và biến CLASSPATH cũng nên được thiết lập cho thư mục này.

Bây giờ sử dụng code trên trong main.jsp file mà tải Bean này và thiết lập/nhận một tham số String đơ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>

Thử truy cập main.jsp, nó sẽ cho kết quả sau:

Using JavaBeans in JSP

Got message....
Hello JSP...

<jsp:forward> Action trong JSP

forward action trong JSP kết thúc action của trang hiện tại và chuyển request tới nguồn khác chẳng hạn như một Static page, JSP page khác, hoặc một Java Servlet.

Cú pháp đơn giản của forward action trong JSP là:

<jsp:forward page="Relative URL" />

Dưới đây là các tham số liên kết với forward action trong JSP:

Thuộc tính Miêu tả
pageNên bao gồm một URL quan hệ của nguồn khác chẳng hạn như một Static page, JSP page khác, hoặc một Java Servlet

Ví dụ

Chúng tôi tái sử dụng hai file là date.jsp và main.jsp như sau:

Sau đây là nội dung của date.jsp file:

<p>
   Today's date: <%= (new java.util.Date()).toLocaleString()%>
</p>

Và nội dung của main.jsp file:

<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ờ, bạn giữ các file này trong thư mục gốc và thử truy cập main.jsp. Nó sẽ cho kết quả như dưới đây. Nó loại bỏ nội dung từ main page và chỉ hiển thị nội dung từ trang chuyển tiếp tới.

Today's date: 12-Sep-2010 14:54:22

<jsp:plugin> Action trong JSP

plugin action trong JSP được sử dụng để chèn các phần tử Java vào trong một JSP page. Nó chỉ định loại trình duyệt và chèn các thẻ <object> hoặc <embed> khi cần.

Nếu plugin cần đến là không có mặt, nó tải plugin và sau đó thực thi thành phần Java. Thành phần Java này có thể là một Applet hoặc một JavaBean.

Plugin action có một số thuộc tính mà tương ứng tới các thẻ HTML phổ biến được sử dụng để định dạng các thành phần Java. Phần tử <param> cũng có thể được sử dụng để gửi các tham số tới Applet hoặc Bean.

Cú pháp đặc trưng để sử dụng plugin action trong JSP như sau:

<jsp:plugin type="applet" codebase="dirname" code="MyApplet.class"
                           awidth="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ử action này bởi sử dụng một số Applet nếu bạn quan tâm. Một phần tử mới, phần tử <fallback>, có thể được sử dụng để xác định một Error string để được gửi tới người dùng trong trường hợp các thành phần đó lỗi.

<jsp:element> Action trong JSP

<jsp:attribute> Action trong JSP

<jsp:body> Action trong JSP

Các <jsp:element>, lt;jsp:attribute> và <jsp:body> action trong JSP được sử dụng để định nghĩa động các phần tử XML. Từ động là quan trọng, bởi vì nó nghĩa là các phần tử XML có thể được tạo tại thời điểm request thay vì được định nghĩa một cách tĩnh tại thời điểm biên dịch.

Sau đây là cú pháp đơn giản để định nghĩa động các phần tử XML trong JSP:

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

Nó sẽ tạo HTML code sau tại runtime:

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

<jsp:text> Action trong JSP

<jsp:text> action trong JSP có thể được sử dụng để viết Template text trong các JSP page và tài liệu JSP. Sau đây là cú pháp cho text action trong JSP:

<jsp:text>Template data</jsp:text>

Phần thân của Template không thể chứa bất kỳ phần tử nào; nó chỉ có thể chứa text và EL expression (EL expression được giải thích trong một chương sau đó). Bạn chú ý rằng, trong các XML file, bạn không thể sử dụng các Expression như ${whatever > 0}, bởi vì ký hiệu lớn hơn là không được phép. Thay vào đó, sử dụng mẫu gt, giống như ${whatever gt 0} hoặc một sự thay thế để được nhúng giá trị trong một CDATA section.

<jsp:text><![CDATA[<br>]]></jsp:text>

Nếu bạn cần bao một khai báo DOCTYPE, ví dụ cho XML, bạn cũng phải sử dụng phần tử <jsp:text> 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>

Bạn thử ví dụ sau khi sử dụng hoặc không sử dụng <jsp:text> action trong JSP.

0