定義和使用函數
表達式語言允許你定義可在表達式中調用的函數。函數必須作為public類中的public static方法編寫。函數一經定義,它的簽名(signature)就映射到标簽庫描述符(TLD)中。
為了說明函數的使用,我們舉一個簡單的例子,把兩個數相加。首先要編寫求兩數之和的Java方法代碼,如代碼示例3所示,這裡定義了一個靜态方法,它接收兩個字元串參數,把它們解析成整數并傳回它們的和。
代碼示例3: Compute.java
package jsp2.examples.el; import java.util.*; public class Compute { public static int add(String x, String y) { int a = 0; int b = 0; try { a = Integer.parseInt(x); b = Integer.parseInt(y); }catch(Exception e) { } return a + b; } } |
用javac把這段代碼編譯成功後,下一步就要把函數的簽名映射到标簽庫。代碼示例4說明了如何把add函數映射到包含函數實作和函數簽名的類。後面将說明把這段代碼添加到哪兒。
代碼示例4: 函數描述符
<function> <description>add x and y</description> <name>add</name> <function-class>jsp2.examples.el.Compute </function-class> <function-signature>int add(java.lang.String,java.lang.String) </function-signature> </function> |
現在我們就可以編寫一個JSP頁面來使用這個函數。代碼示例5是包含兩個字段的一個表單,使用者輸入兩個數字并按下“求和”按鈕,就會調用上面的函數并把兩個數相加,結果在同一個頁面中顯示出來。
代碼示例5: math.jsp
<%@ taglib prefix="my" uri="http://jakarta.apache.org/tomcat/jsp2-example-taglib %> <HEAD><TITLE>Functions</TITLE></HEAD> <BODY> <H3>Add Numbers</H3> <P> <FORM action="math.jsp" method="GET"> X = <input type="text" name="x" value="${ param["x"]}"> <BR> Y = <input type="text" name="y" value="${param["y"]}"> <input type="submit" value="Add Numbers"> </FORM> <P>The sum is: ${my:add(param["x"],param["y"])} </BODY> </HTML> |
要運作這個例子:
複制Compute.java并儲存到C:/Tomcat5.0/webapps/jsp-examples/WEB-INF/classes/jsp2/examples/el下;使用javac編譯Compute.java;編輯檔案C:/Tomcat5.0/webapps/jsp-examples/WEB-INF/jsp2/jsp2-example-taglib.tld,把代碼示例4中的代碼段添加到檔案中最後一個</function>标簽之後,</taglib>标簽之前;複制math.jsp并儲存到c:/Tomcat5.0/webapps/jsp-examples/jsp2-tutorial下;用浏覽器打開該檔案。
如果一切正常,應該會看到類似如圖3所示的視窗。
![]() |
标簽處理器
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; 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所示的畫面。
|