首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何防止jsp标记在类加载后被重用

如何防止jsp标记在类加载后被重用
EN

Stack Overflow用户
提问于 2010-03-20 07:28:14
回答 4查看 4.5K关注 0票数 6

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

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

我希望这种情况不会再发生。有人知道在tomcat6中是什么设置控制这一点吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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),所以我认为这是最安全的选择。

票数 7
EN

Stack Overflow用户

发布于 2010-04-17 19:10:11

您需要清除两次调用之间的标记状态。您应该在类的doEndTag()方法中执行此操作,就在返回之前。此时,您应该将所有状态变量设置为null

票数 2
EN

Stack Overflow用户

发布于 2010-03-20 07:31:58

实际上,每次只创建一个tag实例。也许您将属性声明为static

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2481159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档