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

 本多天舞 发布于 2022-10-25 10:16

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

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

这就是线程不安全

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

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

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

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

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

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

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

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

    2022-10-26 23:06 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有