Tomcat4.1.12在处理自定义tag时的一个缺陷

王朝system·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

Tomcat4.1.12在处理自定义tag时的一个缺陷

1. 前言

刚才在练习写一个tag时,在Tomcat4.1.12环境下运行时发现了一些奇怪的现象,经过分析和测试,发现Tomcat4.1.12在处理自定义tag时有些问题。

2. 现象

问题一

我在tag中有一个属性设定成不可以接受请求时变量,也就是说只能接受静态值,可是我在JSP中使用时发现Tomcat4.1.12处理这种情况时跟JSP规范(我参考的是JSP1.2)的规定不符,它没有在编译时扔出错误,运行时也没有扔异常,反而是忽略掉这个不合法的参数,并且在执行tag实现类时对于该属性以空串视之。

问题二

这个问题是在实验问题一时偶然发现的,当你修改tld文件后,即使重启了tomcat,如果你的JSP没有修改过,那么在请求该JSP时,你对tld文件的修改不会起作用。(我分析是JSP没有被修改,就不会被重新编译,就不会重新参考tld文件,也就不会重新分析tld文件,那么对tld文件的修改就不会起作用。)但我认为这种处理对JSP程序员修改tld文件极为不利,这种处理方式是不合理的。

3. Tomcat5.0的对比

通过在Tomcat5.0的环境下做实验,Tomcat5.0下没有上述的两个问题。如果对不接受请求时变量的属性赋请求时变量,将会在请求该JSP时扔出异常。Tomcat5.0也能对tld文件的修改即时反应,甚至连tomcat都不必重启。

4. 我的测试程序源码

index.jsp

<%@ taglib uri="/WEB-INF/tlds/mylib.tld" prefix="test0" %>

<%@ page language="java" %>

<%@ page import="java.util.*" %>

<%

String theValue = "maojb";

%>

<html>

<body bgcolor="white">

<test0:hello name="<%=("111"+theValue)%>"/>

<p> <%=new Date()%>

</body>

</html>

HelloTag.java

package com.mycompany;

import java.io.*;

import javax.servlet.jsp.*;

import javax.servlet.jsp.tagext.*;

public class HelloTag extends TagSupport {

private String name = "World";

public void setName(String name) {

this.name = name;

}

public int doEndTag() {

try {

pageContext.getOut().println("Hello xiaocx " + name);

} catch(IOException e) {

}

return EVAL_PAGE;

}

}

mylib.tld

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE taglib

PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"

"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

<taglib>

<tlibversion>1.0</tlibversion>

<jspversion>1.1</jspversion>

<shortname>test</shortname>

<tag>

<name>hello</name>

<tagclass>com.mycompany.HelloTag</tagclass>

<bodycontent>empty</bodycontent>

<attribute>

<name>nam</name>

<required>yes</required>

<rtexprvalue>no</rtexprvalue>

</attribute>

</tag>

</taglib>

目录机构如下

index.jsp

WEB-INF

casses

com

mycompany

HelloTag.class

tds

mylib.tld

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航