Tomcat下自定义标签重复渲染问题(转http://mycreature.blog.163.com/blog/static/55631720092922712424/)

Tomcat下自定义标签重复渲染问题

技术文章 2009-03-09 14:27:12 阅读189 评论0   字号: 订阅

前几天在测试平台组开发的组件标签库时,发现一个奇怪的问题,有一些组件在每次刷新后都会重复出现。另外这个问题似乎与应用服务器有关,因为只有部署在tomcat(5.0,5.5)下会出现这种情况,而部署在weblogic(8.1)和websphere下都没有相关问题。将情况报告给平台组,很快就得到了回复,原来是tomcat的enablePooling参数在捣乱,这个参数用于控制应用服务器是否缓存自定义标签(即每次对标签渲染后是否调用release()方法进行释放操作),而且默认值是对标签进行缓存的。

tomcat4.1的开发者认为,tag的release()方法不是Java规范中必须实现的方法,所以仅在GC前调用。而且tomcat4.1默认开启了标签缓冲池(tag-pooling),因此执行完一次<tagPref:tag>标签之后并不会执行release()方法,所以会出现有些自定义组件在每次刷新后都重复出现的情况。而weblogic和websphere会在对标签渲染后调用release()方法,所以不会有标签重复渲染的问题。

这个问题可以通过设定tomcat的配置文件加以解决:
1.在%tomcat%/conf/web.xml加入enablePooling参数,并设置为false(不缓存自定义标签)。
===========================================
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>

<!--begin加入(请加为第一个参数)-->
<init-param>
  <param-name>enablePooling</param-name>
  <param-value>false</param-value>
</init-param>
 <!--end加入-->
 
<init-param>
  <param-name>fork</param-name>
  <param-value>false</param-value>
</init-param>   
</servlet>
===========================================

2.清空%tomcat%/conf/目录。

其他讨论:
1.enablePooling参数是4.1版本的新特征,也是和4.0版本的重大区别之一。
2.enablePooling参数的关闭可能会影响tomcat处理jsp的性能,但影响的程度未得到相关数据的量化。
3.要注意写好tag的释放方法,如果tag中存在内存泄漏,在enablePooling参数关闭的情况下,可能会在运行一段时间后大量消耗分配给tomcat的内存并引起tomcat响应速度缓慢。
http://mail-archives.apache.org/mod_mbox/tomcat-users/200312.mbox/%3C000101c3b85d$d4664f90$fd01a8c0@dell5100%3E

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值