JSP 1.2 的新功能
JSP
if (counter == null) {
counter = new int[1];
context.setAttribute("com.foo.counter", counter);
}
return counter;
}
}
会话任务数目增加时,小服务程序的环境属性作为计数器,其值增大;会话结束后,半数器值减小。标签可用于简单显示活动会话任务的数目。当活动的或者预定的会话任务达到一定数目,可用标签拒绝建立新会话。
检验器
标签库检验器是JSP 1.2新增重要功能。它的实现,基于类javax.servlet.jsp.tagext.TagLibraryValidator。Web容器
用检验器确定标签库中TLD的信息(强制属性值和空体)是否合法,然后将相应的JSP页转换成小服务程序。应将检验器说明为TagLibraryValidator的子类,并且重设其方法validate():
public ValidationMessage[] validate(String prefix,
String uri, PageData pageData)
检验器的validate()方法,由PageData的实例调用。检验器由此获得相应JSP页的XML表达式,即JSP页格式表的 XML视图或者JSP文档(即符合JSP页XML语法的标注)。读完JSP页的XML表达式后,检验器核查TLD信息是否可用,或者核查用户定义的操作元素的信息是否符合类TagExtraInfo的要求。例如,用户定义的A操作必须用作B操作的子元素,检验器可以核查是否使用了B,或者A、B是否以适当的顺序使用。
与检验器相关联的是标签库TLD的新增元素:
com.foo.MyValidator
元素指定检验器名称;选择性元素为指定的标签库检验器作配置。
检验器的执行
举例说明。在同一标签库中有操作元素,其中只能用一个作为子元素。下面开始通过各段代码看检验器是是如何工作的:
package com.foo;
import java.util.*;
import javax.servlet.jsp.tagext.*;
import org.jdom.*;
import org.jdom.input.*;
public class MyValidator extends TagLibraryValidator {
private SAXBuilder builder = new SAXBuilder();
private Namespace jspNamespace = Namespace.getNamespace("jsp",
"http://java.sun.com/JSP/Page");
您已看到,检验器继承了JSP API的TagLibraryValidator。我用JDOM建立这个检验器,处理JSP页的XML表达式。 JDOM包中定义了解析JDOM树的类。当然,您也可以选用其他XML解析器和检验工具,就象标签库项目Jakarta的专家那样,用许多不同的XML工具构建检验器。
没有评论:
发表评论