天天看点

利用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:简单标签处理器