您的位置:首页 > 其它

自定义标签学习,会不会出现线程不安全,答案是no。

2010-09-15 17:50 288 查看
eg:struts.jsp

-------------------- greet message--------------------------------//(1)
<ife:greet count="2" startTag="ceshi">
<br />
<font size="${size}">helloWorld</font>
</ife:greet>
<br />
-------------------- greet message--------------------------------//(2)
<ife:greet count="5">
<br />
<font size="${size}">helloWorld</font>
</ife:greet>

上面这段代码为同一页面使用了同一个自定义标签,在这里讨论一下针对在同一页面(jsp)中多次使用同一标签,jsp容器生成

对应标签处理类的实例情况。为学习自定义标签时,探索一下,具体开发中并不关注这样的细节,应为jsp容器,已经做得很完善,使用自定义标签不会出现多线程问题。

我们知道一个jsp页面在servlet容器中对应一个实例。

那么jsp页面中的标签的实例情况是怎么样的呢?

如上:

(1)和(2)均是同一页面中相同的自定义标签,所不同的是两个标签的属性不一样(标签体也不一样,但这并不影响他们如何被实例化)

我做了下试验:

当(1)和(2)的属性名和个数均一样时,那么他们使用同一实例(不同客户访问时同一实例)

当(1)和(2)的属性不一样时,会实例不同的实例,进行相应处理。

这样处理机制是:

如果你的属性名和个数一样,那么在jsp页面中即使多个地方用到这些标签,但多标签处理实例来说只是对应属性的重新赋值。所以使用同一实例

不会存在,丢失属性值的问题。

但不同属性就不一样了,如果不同属性你用同一实例,那么就会有些属性值会保留原有实例的,造成错误。

关键点在于:每次执行标签都会调用setXXXX()方法进行属性赋值。

学习自定义标签时,考虑会不会造成线程不安全,所以思考了一下。确定不会出现线程问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐