【原創】Struts1.x系列教程(4):標籤庫概述與安裝

銀河使者發表於2009-01-16

本文為原創,如需轉載,請註明作者和出處,謝謝!


    Struts的整個檢視層(就是MVC模式中的View層)是由Struts的定製標籤(或者稱為定製動作)和客戶端程式碼(JavascriptHTML)實現的。這些Struts標籤被寫在JSP頁面中,用於生成客戶端程式碼、進行邏輯判斷等工作,使用Struts標籤可以儘量避免直接在JSP頁面中直接使用Java程式碼,以使得JSP頁面更容易編寫和維護。

一、Struts1.x標籤庫概述


Struts
的標籤庫分為如下五類:

1. HTML標籤庫

HTML標籤庫中的定製標籤一般和HTML中的tag是一一對應。如HTML中的

、各種型別的HTML標籤庫中都有定製標籤和其對應。HTML標籤庫的目的是將檢視層的元件和控制層連線起來(事實上,不使用HTML標籤庫中的定製標籤也可以完成同樣的工作,只是需要寫更多的程式碼)。

2. Bean標籤庫

Bean標籤庫中的定製標籤主要用來向客戶端輸出文字資訊。那麼Struts為什麼要單獨提供一個標籤庫來向客戶端輸出文字資訊呢?原因有兩個:

1. Struts提供國際化支援(也就是說可以從屬性檔案中讀取文字資訊,並將其輸出到客戶端)。

2. 為了避免直接使用Java程式碼獲得儲存在requestsession物件中的內容。

3. Logic標籤庫

為了避免在JSP頁面中直接使用Java程式碼進行邏輯判斷和迴圈操作。Logic標籤庫提供了一組標籤用於在不使用Java程式碼的情況下也可以完成同樣的工作。而且使用標籤進行邏輯判斷和迴圈操作要比使用Java程式碼更容易理解和維護。

4. Nested標籤庫

這個標籤庫中的標籤有來顯示form或物件中的“nested”屬性。

5. Tiles標籤庫

    這個標籤庫的標籤允許我們為檢視層建立佈局(layout)。

   
Struts的標籤庫中有一些標籤和JSTL有一定的重合,如Logic標籤庫的邏輯判斷標籤。但是JSTL要求Servlet容器要符合JSP 2.0規範,否則JSTL無法正常工作。這對於那麼執行在較低版本的Servleet容器中的程式就無法享受JSTL給我們帶來的強大的功能。但Struts標籤卻沒這個要求。因此,如果我們的Web程式中使用了Struts,建議儘量使用Struts標籤庫中的標籤,除非能保證Web應用程式的執行環境都支援JSP 2.0規範。

二、安裝和宣告Struts標籤


   
由於在MyEclipse中已經帶了Struts相應的jar包,因此,使用MyEclipse來開發基於StrutsWeb應用程式就無需再安裝Struts了。如果讀者想使用其他的Struts版本,可以到http://struts.apache.org/去下載。

    Struts標籤庫的宣告和JSTL類似,它們都需要使用taglib指令。其實在MyEclipse中我們根本不需要記憶如何來宣告Struts標籤,因此,如果使用MyEclipse的高階JSP模板建立JSP頁面,MyEclipse就會自動將宣告Struts標籤的語句加到了JSP頁面中。在開啟高階JSP模板後,在“Template to use”下拉選單框中選擇“Standard JSP using Struts 1.2/1.3,然後點選“Finish”按鈕建立一個JSP頁面。開啟這個剛建立的JSP頁面,我們會在page指令的下面看到四條tablib指令,其中Nested標籤庫並未自動加入,如果JSP頁面中使用了Nested標籤庫中的標籤,就需要我們手工加入Nested標籤庫的定義,Struts標籤庫的宣告程式碼如下:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt  <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
  
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
  
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
  
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
  <%-- JSP高階模板並未加入Nested標籤庫宣告,需要手工加入--%>
  <%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %>

    在上面的Struts標籤庫的宣告中,taglib標籤的prefix屬性值可以是任何字串(但不同的標籤庫的prefix的值不同相同),但建議按著上面程式碼的宣告語句中的prefix屬性值來宣告相應的Struts標籤庫。

    還有一點需要注意,taglib指令的uri屬性除了使用在.tld檔案中定義的uri值來定位標籤庫外,還可以直接使用.tld檔案的相對路徑來定位。在使用MyEclipse將一個Web工程加入Struts特性後,會自動在WEB-INF目錄中加入如下五個檔案:

1.       struts-bean.tld:用於宣告Bean標籤庫中標籤的tld檔案。

2.       struts-html.tld:用於宣告HTML標籤庫中標籤的tld檔案。

3.       struts-logic.tld:用於宣告Logic標籤庫中標籤的tld檔案。

4.       struts-tiles.tld:用於宣告Tiles標籤庫中標籤的tld檔案。

5.       struts-nested.tld:用於宣告Nested標籤庫中標籤的tld檔案。

因此,也可以使用如下的程式碼來宣告Struts標籤。

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt  <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
  
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
  
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
  
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%>
  
<%-- JSP高階模板並未加入Nested標籤庫宣告,需要手工加入--%>
  
<%@ taglib uri="/WEB-INF/struts-nested.tld" prefix="nested"%>

其中WEB-INF前面的“/”表示Web根目錄。感興趣的讀者也可以開啟這些.tld檔案,檢視其中的內容。也可以將這些.tld檔案中的標籤的內容改為其他的內容,如將struts-bean.tld檔案中的標籤的內容改為struts-bean,那麼就可以使用如下的語句來宣告Bean標籤庫了:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt<%@ taglib uri="struts-bean" prefix="bean"%>

    但要注意,要想使修改生效,需要重啟Tomcat或是重新發布當前的Web應用程式。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12921506/viewspace-539785/,如需轉載,請註明出處,否則將追究法律責任。

相關文章