我有一个问题,标记文件中的某些属性会在下次使用标记时保留。
我认为这是因为标记类正在被类加载,然后同一实例在每次调用中都被重用。因此,我没有在以后的调用中设置的属性并不像我期望的那样是空的,并且包含陈旧的值!
我希望这种情况不会再发生。有人知道在tomcat6中是什么设置控制这一点吗?
发布于 2012-02-26 07:43:45
Tomcat 7.0使用标签池:
http://tomcat.apache.org/tomcat-7.0-doc/jasper-howto.html
JSP自定义标签池-为
自定义标记实例化的java对象现在可以被池化和重用。这极大地提高了使用定制标记的JSP页面的性能。
该页面还说明web.xml可以包含一个"enablePooling“选项,并且它的默认值为true。
所以我想说禁用标签重用不是一个好主意,因为它会导致一些性能损失。
Tomcat7.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),所以我认为这是最安全的选择。
发布于 2010-04-17 19:10:11
您需要清除两次调用之间的标记状态。您应该在类的doEndTag()方法中执行此操作,就在返回之前。此时,您应该将所有状态变量设置为null。
发布于 2010-03-20 07:31:58
实际上,每次只创建一个tag实例。也许您将属性声明为static
https://stackoverflow.com/questions/2481159
复制相似问题