关于JSP自定义标签的几点说明

14 篇文章 0 订阅
10 篇文章 0 订阅

参考地址: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\目录。


JSP标签处理器的生命周期:

  1,初始化实例:创建标签实例,调用所有的设置方法(setPageContext,setParent方法和所有属性的设置方法)来初始化实例。
  2,调用doStartTag()方法将实例变量设为仅在当前调用的有效值。如果该方法正在处理元素的标签体,就会调用doEndTag方法。
  3,标签实例被重用,如果属性有不同的值则调用对应的设置方法,重复2的操作。只有在具有相同属性集合时,标签处理器才将实例重用。
  4,使用release方法让标签处理器释放内部占有资源。

  注意:
 

 * 为"属性"提供默认值。

  *由于容器缓存标签处理器类实例,重复使用缓存的标签处理类实例。
   所以在改变类变量后,后面使用该类变量也会受影响,要注意并发访问的问题
  所以,要每次重设调用的状态。最佳地点是doStartTag方法中。

  * 标签在调用期间绝不会调用release();

  *不要在setBodyContent方法和doInitBody方法中使用BodyContent对象,只用于获取该对象和做准备工作。

  *对于实现BodyTag接口的自定义标签,同时使用空标签和不为空的标签,那就会抛出异常。因为空标签不会调用一些方法。


标签的静态引用与动态引用:

静态引用:通过web.xml声明一个静态引用。

动态引用:通过在JSP页面中直接加入<%@ taglib uri="/WEB-INF/lib/DateTagLib.tld" prefix="abc"%>指令:


静态引用和动态引用的比较:

静态引用:如果标签库的描述文件路径改变,或者在web.xml添加更多的标签库描述文件,则需要停止服务器。

动态引用:在JSP页面直接声明标签库文件的实际位置,在JSP运行的时候进行解析。无需修改web.xml。

如果为了防止标签库的位置变动导致需要修改大量的页面taglib指令的 uri,可以将引用这些标签库的JSP单独放到一个页面,其他的JSP页面包含此JSP即可。









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值