参考地址:http://blog.sina.com.cn/s/blog_7c60fac90100qq2r.html
1、在tomcat4.1之后的版本中默认开启了标签缓冲池(websphere和weblogic并不会这么做),所以执行完标签后并不会执行release()方法(_jspDestroy()时才释放),也就是说同一个jsp页面自定义标签不管使用多少次只会存在一个实例,但也并不是每一个标签都会为其创建一个缓冲池,要根据参数来判断,例如:
<cc:UserInfoTag user=”…” />
<cc:UserInfoTag />
上面例子中由于参数不同就会创建两个标签缓冲池。
这个问题可以通过设定tomcat的配置文件加以解决:
在%tomcat%\conf\web.xml加入enablePooling参数,并设置为false(不缓存自定义标签)。
<init-param>
<param-name>enablePooling</param-name>
<param-value>false</param-value>
</init-param>
然后清空%tomcat%\conf\目录。
注意:
标签的静态引用与动态引用:
静态引用:通过web.xml声明一个静态引用。
动态引用:通过在JSP页面中直接加入<%@ taglib uri="/WEB-INF/lib/DateTagLib.tld" prefix="abc"%>指令:
静态引用和动态引用的比较:
静态引用:如果标签库的描述文件路径改变,或者在web.xml添加更多的标签库描述文件,则需要停止服务器。
动态引用:在JSP页面直接声明标签库文件的实际位置,在JSP运行的时候进行解析。无需修改web.xml。
如果为了防止标签库的位置变动导致需要修改大量的页面taglib指令的 uri,可以将引用这些标签库的JSP单独放到一个页面,其他的JSP页面包含此JSP即可。