如何防止jsp标签在被加载后被重用

mko*_*yak 6 java tomcat jsp-tags

我有一个问题,标签文件中的某些属性会在下次使用标签时留下来.

我认为这是因为Tag类正在被加载,然后同一个实例被重用于每次调用.所以我在以后的调用中没有设置的属性不像我期望的那样是空的,并且包含陈旧的值!

我希望不再发生这种情况.有谁知道tomcat 6中的设置控制是什么?

Wal*_*lid 7

Tomcat 7.0使用标记池:

http://tomcat.apache.org/tomcat-7.0-doc/jasper-howto.html

JSP自定义标记池 - 现在可以池化和重用为JSP自定义标记实例化的java对象.这显着提高了使用自定义标记的JSP页面的性能.

该页面还说web.xml可以包含"enablePooling"选项,并且其默认值为true.

所以我想说禁用标签重用不是一个好主意,因为它会导致一些性能损失.

Tomcat 7.0保证标记类的状态在doStartTag()和doEndTag()之间保持不变:

http://tomcat.apache.org/tomcat-7.0-doc/jspapi/javax/servlet/jsp/tagext/Tag.html

可以在标记处理程序上调用doStartTag和doEndTag方法.在这些调用之间,假定标记处理程序保持必须保留的状态

但同样的段落也在括号内表示该对象应该在以下后保留其属性:

在doEndTag调用之后,标记处理程序可用于进一步调用(并且它应该保留其属性).

所以我所做的就是在doEndTag()返回之前将所有局部变量重置为默认值.我没有找到关于如何实现Tomcat标记池和重用的解释(我猜是TagHandlerPool.java)所以我认为这是最安全的选择.