java - JSP页面在web服务器生成的servlet是单例还是原型模式啊?
伊谢尔伦
伊谢尔伦 2017-04-18 10:29:42
[Java讨论组]

http://blog.csdn.net/elvis809...

这篇文章里说浏览器每刷新一次或者不同的浏览器浏览该页面,sum的值都会加1。

这就是线程不安全

我想到有状态和无状态的对象基本概念:
有状态对象(Stateful Bean),就是有实例变量的对象 ,可以保存数据,是非线程安全的。一般是prototype scope。
无状态对象(Stateless Bean),就是没有实例变量的对象,不能保存数据,是不变类,是线程安全的。一般是singleton scope。

那么问题来了,JSP生成的servlet是单例还是原型?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
大家讲道理

那个 sum 值是记录请求次数吗?JSP换个说法就是页面版的Servlet,JSP和Servlet根本就是一个东西,只是是不同的表现,看看生成JSP生成的Java代码就知道了。Servlet是无状态的,实例是应用容器创建

线程安全是指多个线程访问而不会冲突,单例是指对象实例只有一个,原型好像叫克隆更贴切,这都不适合servlet的使用场景

ringa_lee

servlet就我所知是单例多线程模式,就算是jsp也是一样,只在第一次请求时创建该servlet的对象,因此web应用第一次访问servlet的速度都会比之后访问慢

jsp的<%! %>写法相当于类里写成员变量写成员方法,而<% %>相当于在servlet的service方法里写东西

你说的什么单例、原形模式的,我有点不太理解,servlet因为是单例模式,你想用成员变量又不进行同步操作,还在方法里操作他,这本身就是线程不安全的,危险的一b

说实话我想半天还是不太明白你要问的是什么,你链接里那个例子在sum++前面加个sleep(5000),再同时开两个页面,看看最后出来的数两个页面是相等还是一个比另一个大1就知道线程安全不安全了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号