java servlet是单例吗_关于java:为什么apache servlet是单例?
本问题已经有最佳答案,请猛点这里访问。
HttpServletRequest request;
HttpServletResponse response;
public void doGet(HttpServletRequest request , HttpServlet response){
this.request = request;
this.response = response;
}
如果此servlet一次收到多个请求会发生什么?
我们遇到了响应不匹配的问题。 这是一个问题吗?
不要这样做。 真。 别。
这使得世界陷入了黑洞
了解servlet的工作原理:stackoverflow.com/questions/3106452/
您的Web应用程序容器仅加载一个servlet实例。
要编写线程安全的servlet,你几乎不应该使用实例变量。将请求和响应设置为实例变量是完全错误的。 servlet的实例不属于单个请求。
如果您需要将请求或响应的元素提供给其他方法,请将它们传递给这些方法。您不需要它们作为实例变量。
尝试编写一个没有实例变量的非平凡servlet; servlet必须在某些时候(即服务)将控制权委托给某事物。你的意思是不使用非线程安全的实例变量。
当然这是一个问题。 servlet是一个单例。相同的servlet实例用于处理对此servlet的所有请求。并且请求当然是同时处理的。这意味着如果你这样做,thread1将使用通常由thread2处理的请求和响应。
根据定义,Servlet不是单身人士。 Servlet API不会将特定Servlet类的创建限制为单个实例。 Container通常会为部署描述符中的每个servlet声明创建一个servlet实例。单例是一种设计模式,它将其类的对象的创建限制为1且仅为1。
它们不是GoF模式意义上的单例,但它们是有效的,因为servlet规范要求容器只为每个servlet声明实例化一个实例。单例不仅仅是GoF设计模式。你曾经使用像Spring或Guice这样的依赖注入框架吗?在这种情况下从未见过单身人士?
是的,我有。我试图与GoFs对单身人士的定义联系起来。并加上1为您的详细说明:)
所以你选择了一个特定的singleton定义,并决定servlet没有遵循这个特定的定义,因此不是单身人士?这就像说免费啤酒不是免费的,因为它甚至没有开源许可证。
引用Servlet规范
"每个请求和响应对象仅在servlet的服务方法范围内有效,或者在过滤器的doFilter方法范围内有效。容器通常是回收的
请求对象以避免请求对象的性能开销
创建。开发人员必须意识到维护对请求对象的引用
不建议在上述范围之外,因为它可能具有不确定性
结果。"
这与OPs问题没有太大关系。如果他在doGet()末尾使实例变量无效,则请求和响应对象的范围不会扩展到服务方法之外,但他仍然会遇到很大问题。
似是而非。但仍然。如果规范保证保存对这些对象的引用的不确定结果,为什么要这样做呢?
它并不保证任何类型。您可以根据需要保存任意数量的引用,只要您不在服务方法范围之外使用这些引用即可。您只需要以线程安全的方式执行此操作。例如,许多框架在ThreadLocal变量中存储对请求的引用。
我学会了,谢谢。实际上,这变成了一个争论,我不想进入。我批评你和我的。感谢您的所有澄清。
我没那样接受它。我只想捍卫自己的观点,就是这样。
发生的事情是,您的servlet立即变为不可重入,并且在第一次由多个客户端同时调用时肯定会失败。你不能这样做。
这肯定会产生问题,任何实例变量都是共享的,因为servlet是单例,因此将覆盖并发请求和响应对象。
这是一个问题,永远不建议将HttpServletRequest request / HttpServletResponse响应声明为实例变量。实际上Servlet正在实现单线程模型,这意味着只创建了一个servlet实例。每个请求都有一个线程。因此,如果它们有很多请求,则thr必须是多个线程,并且每个线程共享相同的servlet实例,这将导致数据不匹配或数据不一致问题。线程将在相同的实例上工作。
单线程模型!= singleton servlet。单线程模型正是模型(没有人使用因为它效率低下),它保证只有一个线程使用给定的servlet。
不建议使用"单线程实现"。它被弃用了。
-1;这个答案没有提供任何价值。其他人已经说过它的部分错误。
java servlet是单例吗_关于java:为什么apache servlet是单例?相关推荐
- java web开源项目源码_适合Java新手的开源项目集合——在 GitHub 学编程
作者:HelloGitHub-老荀 当今互联网份额最大的编程语言是哪一个?是 Java!这两年一直有听说 Java 要不行了.在走下坡路了.没错,Java 的确在走下坡路,未来的事情的确不好说,但是瘦 ...
- java制作一个简单的画板_【Java】Thymeleaf一个简单示例
Thymeleaf简单介绍 Thymeleaf是用来开发Web和独立环境项目的服务器端的Java模版引擎 Spring官方支持的服务的渲染模板中,并不包含jsp.而是Thymeleaf和Freemar ...
- java下列语句正确的是_下列Java语句中,不正确的一项是( )。
[多选题]装卸搬运机械具有( )功能 [判断题]char[] str="abcdefgh"; ( ) [单选题]7.关于内部类,下列说法不正确的是( ). [单选题]下列关于Jav ...
- java语言中声明布尔型_【Java初探02】——Java语言基础
本篇博文就Java语言的一些基本元素进行一些记录和阐述,主要讲解一下Java语言的一些基本构成元素和Java的主类结构. Java语言基础的大致组成 java主类结构 基本的数据类型 变量与常量 运算 ...
- 蓝桥杯java能用编译器1吗_学java的你,这些英文单词都掌握了吗?
1.Abstract class 抽象类:抽象类是不允许实例化的类,因此一般它需要被进行扩展继承. 2.Abstract method 抽象方法:抽象方法即不包含任何功能代码的方法. 3.Anonym ...
- java jre 与jdk的区别_学习java却不知道JRE和JDK的区别?看完这篇文章,让你受益匪浅...
JRE和JDK的区别? 1.JRE是Java运行时环境 . 它是运行已编译的Java程序所需的所有程序的包,包括Java虚拟机(JVM),Java类库, java命令和其他基础结构. 但是,它不能用于 ...
- java应用程序如何编译运作_开发Java应用程序的基本步骤是: 1 编写源文件, 2.编译源文件, 3.运行程序。_学小易找答案...
[判断题]Java源文件中只能有一个类. [简答题]任务32:开关电源PCB 设计.docx [多选题]企业的收入具体表现为一定期间: [简答题]任务33:CPLD逻辑电路自制元件与封装.docx [ ...
- java写入文件中文乱码问题_解决Java写入UTF-8文件中文乱码问题
最近需要从Java中输出UTF-8编码的XML文件,遇到了两次中文乱码问题.一是奇数个汉字出现乱码,二是写入文件的实际编码与XML声明的编码不符.经过几番折腾,终于解决这两个问题,也对Java的字符编 ...
- 学java用什么写比较好_学习Java需要什么基础,初学Java如何写好代码
原标题:学习Java需要什么基础,初学Java如何写好代码 初学Java的同学时常会遇到这样的情况,跟着入门教程看过一遍,但需要自己写代码的时候却无从下手:写代码的时候时常会遇到不懂的地方,如果停下来 ...
- java 必须try catch的异常_【java基础之异常】死了都要try,不淋漓尽致地catch我不痛快!...
@ 1.异常 1.1 异常概念 异常 :简单说就是不正常运行,最终导致JVM的非正常停止. 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象.Java处 ...
最新文章
- SQL Server中如何识别、查找未使用的索引(unused indexes)
- AutoX无人车完成1亿美元A轮融资,东风汽车领投,阿里旗下基金入股
- android+java.lang.VerifyError
- 全局变量-基本代码演练
- C++ 自定义string类 重载相关运算符
- 企业邮件系统搭建-关于不能往yahoo,sina,hotmail地址发邮件的问题一
- PHP SOCKET SERVER 二
- poj 2231 Moo Volume 暴力一定超时啊
- 静态代码块与构造函数的作用
- oracle函数 length rpad lpad
- 用代码来模拟铁路售票系统,实现通过四个售票点发售某日某次列车的100张车票,一个售票点用一个线程表示
- android usb触摸驱动,Linux/Android——usb触摸屏驱动 - usbtouchscreen
- 怎样维修无图纸电路板?
- python计算目标文件夹中各文件的GC含量
- win10 如何修改 C:\Users\用户名文件夹
- js判断图片加载完成后再执行代码
- 读书笔记 《拆掉思维里的墙》
- R语言igraph软件包方法
- 创立达摩院,马云是想当武林盟主吗?
- 笨方法学习Python 习题19 函数和变量 ---学习记录
热门文章
- c程序预处理器的设计与实现_C预处理器-能力问题与解答
- oracle认证都需要考哪几个方面,Oracle OCP认证要通过哪些考试
- 文件上传java逻辑_Java 文件上传 实例
- tcp 发送 最大数据量_网络基础知识夯实总结(三):TCP协议
- python复数的实部和虚部都是整数嘛_Python学习笔记:从入门到放弃(2)基本语法...
- 数据字典简单例子_Python学习100天-Day14(数据分析篇-pandas02)
- 计算机C语言课交作业怎么交,第一份c语言作业
- java 生产者消费者代码_Java生产者和消费者代码
- 求求你,别再用wait和notify了!
- Oracle笔记:数据库启动的三个阶段