天天看點

利用JSP 2.0開發Web應用程式(3)

  

定義和使用函數

  表達式語言允許你定義可在表達式中調用的函數。函數必須作為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 2.0開發Web應用程式(3)
圖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所示的畫面。

利用JSP 2.0開發Web應用程式(3)
圖4:簡單标簽處理器