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工具构建检验器。

没有评论: