js|web|程式
標籤處理器
JSP 1.2中傳統的標籤處理API由於允許標籤體中包含scriptlet而變得複雜,但是現在利用運算式語言可以編寫不含scriptlet的JSP網頁。最終,JSP 2.0引入了一種新的標籤擴充機制,稱為“簡單標籤擴充”,這種機制有兩種使用方式:
- Java開發人員可以定義實現介面javax.servlet.jsp.tagext.SimpleTag的類;
- 不懂Java的網頁編寫人員則可以使用標籤檔案。
首先來看第一種方式,程式碼範例6給出了一個簡單的標籤處理器,它的作用僅僅是列印“This is my first tag! ”。
程式碼範例6: HelloTag.java
package jsp2.examples.simpletag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;import java.io.IOException;
/**
* SimpleTag handler that prints "This is my first tag!"
*/
public class HelloTag extends SimpleTagSupport {
public void doTag() throws JspException, IOException {
getJspContext().getOut().write("This is my first tag!");
}
}
編譯成功後,下一步就要在TLD中定義一個標籤描述符,下面是標籤描述符的例子。
程式碼範例7: 標籤描述符
<tag>
<description>Prints this is my first tag</description>
<name>hello</name>
<tag-class>jsp2.examples.simpletag.HelloTag</tag-class>
<body-content>empty</body-content>
</tag>
最後再編寫一個使用上述標籤的JSP分頁檔,見程式碼範例8。
程式碼範例8: helloworld.jsp
<%@ taglib prefix="mytag" uri="/WEB-INF/jsp2/jsp2-example-taglib.tld" %>
<HTML>
<HEAD>
<TITLE>Simple Tag Handler</TITLE>
</HEAD>
<BODY>
<H2>Simple Tag Handler</H2>
<P>
<B>My first tag prints</B>: <mytag:hello/>
</BODY>
</HTML>
要運行這個例子:
- 複製HelloTg.java並儲存到C:\Tomcat5.0\webapps\jsp-examples\WEB-INF\classes\jsp2\examples\simpletag下;
- 使用javac編譯HelloTag.java;
- 把程式碼範例7中的標籤描述符添加到檔案C:\Tomcat5.0\webapps\jsp-examples\WEB-INF\jsp2\jsp2-example-taglib.tld中的</taglib>之前;
- 複製helloworld.jsp並儲存到c:\Tomcat5.0\webapps\jsp-examples\jsp2-tutorial目錄中;
- 用瀏覽器開啟helloworld.jsp。
如果一切正常,應該會看到類似如圖4所示的畫面。
圖4:簡單標籤處理器
標籤檔案
使用簡單標籤擴充機制的另一種方法是通過標籤檔案。標籤檔案是一種資源檔,網頁作者可以利用它抽取一段JSP代碼,通過定製功能來實現代碼的複用。換句話說,標籤檔案允許JSP網頁作者使用JSP文法建立可複用的標籤庫。標籤檔案的副檔名必須是“.tag”。
為說明使用標籤檔案是多麼容易,考慮一下程式碼範例9。沒錯,這就是一個標籤檔案!
程式碼範例9: greetings.tag
Hello there. How are you doing?
一旦定義了標籤檔案,就可以在JSP網頁的編寫中使用這種定製的功能。比如程式碼範例10中的JSP網頁。
程式碼範例10: chat.jsp
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
<HTML>
<HEAD>
<TITLE>JSP 2.0 Examples - Hello World Using a Tag File</TITLE>
</HEAD>
<BODY>
<H2>Tag File Example</H2>
<P>
<B>The output of my first tag file is</B>: <tags:greetings/>
</BODY>
</HTML>
要運行這個例子:
- 複製標籤檔案greetings.tags並儲存在c:\Tomcat5.0\webapps\jsp-examples\WEB-INF\tags 目錄下;
- 複製JSP網頁檔案char.jsp並儲存在c:\Tomcat5.0\webapps\jsp-examples\jsp2-tutorial 目錄下;
- 用瀏覽器開啟chat.jsp檔案。
如果一切正常,應該會看到類似如圖5所示的視窗。
圖5:簡單的標籤檔案
注意: 重要的是要注意到這裡沒有為問候標籤編寫TLD,而是建立了一個標籤檔案並放在特殊的目錄中,然後用taglib指令匯入並直接使用它。
另一個標籤檔案的例子
標籤檔案可以作為模板使用。考慮程式碼範例11中的標籤檔案display.tag,這個例子是根據Tomcat 5.0中的面板的例子改寫的。指令attribute類似於TLD中的<attribute>元素,允許聲明自訂的動作屬性。
程式碼範例11: display.tag
<%@ attribute name="color" %>
<%@ attribute name="bgcolor" %>
<%@ attribute name="title" %>
<TABLE border="0" bgcolor="${color}"> <TR>
<TD><B>${title}</B></TD>
</TR>
<TR>
<TD bgcolor="${bgcolor}">
<jsp:doBody/>
</TD>
</TR>
</TABLE>
程式碼範例12給出了使用上述標籤的一個簡單的JSP頁面。
程式碼範例12: newsportal.jsp
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
<HTML>
<HEAD>
<TITLE>Another Tag File Example</TITLE>
</HEAD>
<BODY>
<H2>News Portal: Another Tag File Example</H2>
<TABLE border="0"> <TR valign="top">
<TD>
<tags:display color="#ff0000" bgcolor="#ffc0c0"
title="Travel">
Last French Concorde Arrives in NY<br/>
Another Travel Headline<br/>
Yet Another Travel Headline<br/>
</tags:display>
</TD>
<TD>
<tags:display color="#00fc00" bgcolor="#c0ffc0"
title="Technology">
Java for in-flight entertainment<BR>
Another Technology Headline<BR>
Another Technology Headline<BR>
</tags:display>
</TD>
<TD>
<tags:display color="#ffcc11" bgcolor="#ffffcc"
title="Sports">
American Football<BR/>
NBA<BR/>
Soccer<BR/>
</tags:display>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>
要運行這個例子:
- 複製檔案display.tag並儲存在c:\Tomcat5.0\webapps\jsp-examples\WEB-INF\tag 下;
- 複製檔案newsportal.jsp並儲存到c:\Tomcat5.0\webapps\jsp-examples\jsp2-tutorial下;
- 用瀏覽器開啟newsportal檔案。
結果應該會得到與圖6類似的畫面。
圖6:把標籤檔案用作模板
結論
JSP 2.0使得快速開發和維護動態網頁比以前更加容易,儘管“Java”一詞出現在JSP中,但使用JSP2.0,網頁作者無須學習Java程式語言本身,就能開發出全新的動態網頁。本文中的例子說明了使用JSP2.0的新特性開發動態網頁是多麼容易。