一、Struts1.x標簽庫概述
Struts的標簽庫分為如下五類:
1.HTML標簽庫
在HTML標簽庫中的定制標簽一般和HTML中的tag是一一對應。如HTML中的<form>、各種類型的<input>在HTML標簽庫中都有定制標簽和其對應。HTML標簽庫的目的是將視圖層的組件和控制層連接起來(事實上,不使用HTML標簽庫中的定制標簽也可以完成同樣的工作,只是需要寫更多的代碼)。
2.Bean標簽庫
Bean標簽庫中的定制標簽主要用來向客戶端輸出文本信息。那麼Struts為什麼要單獨提供一個標簽庫來向客戶端輸出文本信息呢?原因有兩個:
1.為Struts提供國際化支持(也就是說可以從屬性文件中讀取文本信息,並將其輸出到客戶端)。
2.為了避免直接使用Java代碼獲得存儲在request和session對象中的內容。
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來開發基於Struts的Web應用程序就無需再安裝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標簽庫的聲明代碼如下:
<%@ 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標簽。
<%@ 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文件中的<uri>標簽的內容改為其他的內容,如將struts-bean.tld文件中的<uri>標簽的內容改為struts-bean,那麼就可以使用如下的語句來聲明Bean標簽庫了:
<%@ taglib uri="struts-bean" prefix="bean"%>
但要注意,要想使修改生效,需要重啟Tomcat或是重新發布當前的Web應用程序。