JSP页面在web服务器生成的servlet是单例还是原型模式啊?

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

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

这就是线程不安全

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

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

阅读 4.7k
2 个回答

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

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

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

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题