不同的客户端去请求Servlet,该Servlet是同一个实例化对象还是不同的实例化对象?

问题:不同的客户端去请求Servlet,该Servlet是同一个实例化对象还是不同的实例化对象?(即,是每次请求Servlet都会实例化一个该Servlet对象,还是每次请求都使用的是同一个Servlet对象?)
难道Servlet是单例模式吗?请大家帮我解惑下!不吝赐教,谢谢!

6个回答

Servlet容器默认是采用单实例多线程的方式处理多个请求的:
1.当web服务器启动的时候(或客户端发送请求到服务器时),Servlet就被加载并实例化(只存在一个Servlet实例);
2.容器初始化化Servlet主要就是读取配置文件(例如tomcat,可以通过servlet.xml的设置线程池中线程数目,初始化线程池通过web.xml,初始化每个参数值等等。
3.当请求到达时,Servlet容器通过调度线程(Dispatchaer Thread) 调度它管理下线程池中等待执行的线程(Worker Thread)给请求者;
4.线程执行Servlet的service方法;
5.请求结束,放回线程池,等待被调用;
(注意:避免使用实例变量(成员变量),因为如果存在成员变量,可能发生多线程同时访问该资源时,都来操作它,照成数据的不一致,因此产生线程安全问题)

从上面可以看出:
第一:Servlet单实例,减少了产生servlet的开销;
第二:通过线程池来响应多个请求,提高了请求的响应时间;
第三:Servlet容器并不关心到达的Servlet请求访问的是否是同一个Servlet还是另一个Servlet,直接分配给它一个新的线程;如果是同一个Servlet的多个请求,那么Servlet的service方法将在多线程中并发的执行;
第四:每一个请求由ServletRequest对象来接受请求,由ServletResponse对象来响应该请求;

写个类属性,每次请求都输出下值,再改变值。看看是不是同一个实例化对象。然后再考虑servlet周期,同时多个客户端请求、多次请求。

servlet:服务端的小组件,处理一些业务。
servlet都用到的是一个默认无参的构造方法。
在初始化的时候不需要什么要求。
其实是满足单例设计模式的。
再者说,servlet都实现了一个service的抽象方法来处理业务。
使用同一个方法就可以搞定,创建多少对象意义不大吧。。。
一个客户端启动一个线程。
谁调用它,就由谁给这个方法传自己实例化的请求和响应对象就好了。
如果您还嫌不够严谨,您还可以来个并发锁。
只要原理上不冲突,您想咋整就咋整。
一切规则自己定(JAVA思路)。
当然最大的优点,我感觉还是您不用实例化那么多没用的对象了

“Servlet”为单例对象,简单的说,如果是多例,上千万的请求服务器也承受不住!

每个servlet都是新的,你请教一次就是创建一个新的出来了。望采纳。

servlet中避免使用实例变量(成员变量),因为如果存在成员变量,可能发生多线程同时访问该资源时,都来操作它,照成数据的不一致,因此产生线程安全问题,写个类属性,每次请求都输出下值,再改变值。看看是不是同一个实例化对象。然后再考虑servlet周期,同时多个客户端请求、多次请求。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
不同的客户端去请求Servlet,该Servlet是同一个实例化对象还是不同的实例化对象?
问题:不同的客户端去请求Servlet,该Servlet是同一个实例化对象还是不同的实例化对象?(即,是每次请求Servlet都会实例化一个该Servlet对象,还是每次请求都使用的是同一个Servlet对象?)n难道Servlet是单例模式吗?请大家帮我解惑下!不吝赐教,谢谢!
Servlet的实例化对象究竟在哪?
本人新手,最近在学Servlet,Servlet的对象究竟在哪呢?它通过Tomcat实例化之后,在保存在内存之中呢,还是保存在tomcat服务器之中呢?如果是保存在了web容器(tomcat)之中,那么岂不是又和对象都保存在内存之中的理论相违背么?求高手答疑,越深刻越好。
tomcat是如何实例化servlet对象的
tomcat是如何实例化servlet对象的,具体代码在哪里?rn到处查资料,都找不到,所有书都说由servlet容器实例化一个servlet对象,就是不说怎么实例化的rn还有,我想了解一下tomcat的启动过程,我怎么才能在eclipse里调试tomcat的代码?
servlet的实例化
拿tomact容器来说,有两种方式: 1.在tomact下的conf下的web.xml里指定servlet,通过设置什么时候加载,0启动加载,0-5多个servlet时安指定顺序加载,0-(-5)启动时不加载servlet. 调用init()方法初始化. 2.通过客户端的请求的url加载,找到web.xml,调用init()初始化servlet. init和destory的生命周期只有...
jsp servlet下能否动态实例化对象?
我现在在做一个项目,想制作单一入口的程序,根据传递过来的标示符执行各个不同的对象。rn例如在PHP中我可以这样使用rnrn$标示符 = "A_".$_GET['page'];rn$obj= new $标示符();rnrn变量名可以作为对象名进行实例化。rn同样的方法在java对象中是否也可行呢?rnrnrn而且,在servlet的子类中实例化一个对象,在这个对象体内是否可以直接使用request.getParameter方法呢?rnrn大家在制作Jsp+servlet单一入口的时候是用的什么思路呢?rn我总是把PHP中的制作思路强加在JSP中,这无限增大了我的工作压力。。。rnrn请大家多赐教
servlet里实例化对象调用方法为空
public void doPost(HttpServletRequest request, HttpServletResponse response)rn throws ServletException, IOExceptionrn rn rn tryrn rn rn rn String sC_LMBH = request.getParameter("sC_LMBH");rn String sql = null;rn String sC_XWBH[] = request.getParameterValues("chkID");rn if(sC_XWBH != null)rn rn for(int i = 0; i < sC_XWBH.length; i++)rn rn rn sql = "update t_zjxw a set a.c_fbbz= decode(a.c_fbbz,0,1,1,0,0) where C_SJZQBJ='" + sC_LMBH + "'and a.c_xwbh='" + sC_XWBH[i] + "'";rn //System.out.println(sql);rn db.setSqlString1();rn rn //dba.executeUpdate();rn rn //dba.commit();rn rn rnrn response.sendRedirect("../ZjxwManageBrowse.jsp?sC_LMBH=" + sC_LMBH);rn rn //dba.close();rn rn catch(Exception exception) rn exception.printStackTrace();rn rn rnrnrndb.setSqlString1();rn调用方法tomcat总是报错为空java.lang.NullPointerException 请各位大虾求助
java根据传入的参数实例化不同的对象
自己的写的代码中存在多个方法,类似这样。rn```rnpublic String a10100Process(String code) throws Exception rn A10100Request a10100Request = SpringUtil.getBean( "A10100Request", A10100Request.class);rn ………………………………rn return a10100Request.toString();rn rn rn public String a10101Process(String code) throws Exception rn A10101Request a10101Request = SpringUtil.getBean( "A10101Request", A10101Request.class);rn ………………………………rn return a10101Request.toString();rn rn```rnrn我如何能够做到通过传入不同的code,实例化不同的对象。rnrn![图片说明](https://img-ask.csdn.net/upload/201907/08/1562570603_918492.png)rnrn换句话说红框中的内容是否是可以使用变量存储的,我自己试过使用Class.forName的方式获取到class是不能够作为类型来定义变量的。
实例化对象
先浅谈堆栈: 堆栈都是数据项按序排列的数据结构 栈是一种先进后出的数据结构,而堆则是先进先出,可以被看成是一棵树。堆和队列优先。 栈区(操作系统):系统自动分配,释放。 堆区(操作系统):由程序员分配,释放。 C++中堆的申请释放用  new 和delete 栈直接定义。 从栈中实例化对象不需要delete,从堆中实例化的对象需要delete。 对象成员的访问:栈是由.号访问而堆则...
对象的实例化
声明了一个类Test,有一个公有方法t,在使用时Test t1;和Test t1 = new Test();的差别在什么地方,具体怎么使用?rn
对象实例化
[code=C/C++]rn#includernusing namespace std;rnrnclass Arnrnpublic:rn A():i(10)rn rn cout<f();rnrn return 0;rnrnrn问题:rn1. 为什么 A ent2(),编译连接通过,但没有输出任何数字,而 A ent3;能正确运行?rn2. 为什么 A *ent4; 不能自动调用构造函数,而 A ent3 则可以?rn[/code]
Servlet第一次实例化是在什么时候?
Servlet第一次实例化  默认 是在 第一次客户端访问服务程序时,并不是启动如tomcat这种服务器时。
Servlet之请求对象及相应对象
请求对象和响应对象都是由服务器创建,管理,和销毁,我们只是来使用它 1.响应对象 HttpServletResponse(接口)-------继承------>ServletRespons(接口) HttpServletResquest(接口)-------继承------>ServletResponse(接口) response:设置响应的消息            response.
tomcat怎么实例化servlet
百度说tomcat 通过反射实例化servlet,不过那些servlet又不在tomcat项目中,怎么反射实现的呢?rn不会报类找不到错误吗? 能讲解一下吗,最好有代码实现
Servlet实例化时机
通过Servlet的学习,我们知道当浏览器第一次访问Servlet的时候,服务器为该Servlet创建实例,该实例会永驻内存,当服务器关闭或当前应用被移出服务器时,Servlet实例才会被销毁。现在我们可以通过配置来设置Servlet在服务器启动的时候就被创建,即在web.xml文件中添加&amp;lt;load-on-startup&amp;gt;元素。具体配置如下所示:在web.xml中有如下配置&amp;lt;se...
Servlet 什么时候实例化?
如果没有设置loadOnStartup,则[color=red]第一次请求[/color]的时候实例化 分三种情况: loadOnStartup &lt; 0 即负数的情况下,web容器启动的时候不做实例化处理,servlet首次被调用时做实例化 这种情况和没有设置loadOnStartup是一样的。 loadOnStartup &gt; 0 web容器启动的时候做实例化处理,顺序是由...
Servlet无法实例化问题
刚开始的错误:rn2010-6-27 9:15:16 org.apache.catalina.core.StandardWrapperValve invokern信息: Servlet Transfer is currently unavailablernrn之后运行的错误:rntype Exception reportrnrnmessage rnrndescription The server encountered an internal error () that prevented it from fulfilling this request.rnrnexception rnrnjavax.servlet.ServletException: Error instantiating servlet class Servlet.Transferrn org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)rn org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)rn org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)rn org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)rn org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)rn java.lang.Thread.run(Unknown Source)rnrnrnroot cause rnrnjava.lang.NoClassDefFoundError: Ljavax/resource/cci/ResultSet;rn java.lang.Class.getDeclaredFields0(Native Method)rn java.lang.Class.privateGetDeclaredFields(Unknown Source)rn java.lang.Class.getDeclaredFields(Unknown Source)rn org.apache.catalina.util.DefaultAnnotationProcessor.processAnnotations(DefaultAnnotationProcessor.java:131)rn org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)rn org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)rn org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)rn org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)rn org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)rn java.lang.Thread.run(Unknown Source)rnrnrnnote The full stack trace of the root cause is available in the Apache Tomcat/6.0.10 logsrn这事为什么啊?看都看不懂?!谁来教教我啊?!
servlet什么时候被实例化?
[url]http://blog.csdn.net/ji_ju/article/details/8603445[/url]
对象的实例化是如何进行的?
java 中 对象的方法是随着对象的实例化进行而进行的,还是当这个对象的引用调用这个方法时,这个对象才实例化吗?
不明白,什么是对象实例化
请高手指点一下rn最好有例子rn谢谢
不同Servlet共享配置信息-ServletContext对象
Servlet容器在启动的时候会为每个servlet创建一个ServletContext对象,代表了当前的web应用,是在web应用中全局唯一的,所以在任何一个servlet中访问的都是同一个ServletContext对象,所以我们需要通过配置文件来定义ServletContext对象的配置参数,这样,这些参数就可以在不同的Servlet中读取到。 如果不同Servlet之间的共享信息不是事先
两种实例化的不同?
Button button1rn和rnButton button1=new Button();rn这两种实例化有什么不同?rn它们分别用在什么场合?
实例化同一个对象,怎么分别控制
private void Formshow()rnrn WarningForm f1 = new WarningForm();rn f1.FormIsLoad(Convert.ToString(idList[0]));rn idList.RemoveAt(0);rnrn我用个事件去触发这个方法,每次都是实例化f1,当有多个窗口弹出后,怎么去控制具体的每个窗口啊。因为我关窗口会触发一个事件,但这个事件只执行了一次。之前弹出的窗口就不会执行这个事件了。请问为什么,如果我想关窗口均可触发事件,应该怎么么做?
将请求集中到一个servlet中处理好呢?还是不同的请求由不同的servlet处理?
比如我有这么多的操作,增加人员,修改人员,增加设备,修改设备......rn我的想法是在每个表单中增加一个隐藏字段(请求类型),在一个servlet中判断请求的的类型,根据不同的类型调用不同的Bean中的函数rnrn这样就会将所有的请求集中到一个servlet处理rn请问这样的设计有什么问题,回导致什么后果,如果不适合,应该怎么设计才好?
对象自动实例化和手动实例化的区别?
如题,在创建用户对象的时候属性有个autolnstantiate,打钩就是自动实例化,不打钩在创建的时候就需要写create,我想问下,自动创建和手动创建有什么区别?是不是有些特殊的情况下必须手动create?
类型对象实例化和不实例化得区别
[code=C#]StringBuilder f;rn StringBuilder d = new StringBuilder();[/code]rnrnrn一个定义了stringbuilder类型得变量,另一个是实例化得。但是都可以rnf.Append();rnd.Append(); rnrn不知道有何区别。
3. 延迟实例化对象
Spring延迟实例化对象
java实例化对象
摘要:分享牛,分享牛分享,java类加载机制,java实例化对象,java实例化对象机制,java基础。 java是如何实例化对象的呢?以及实例化对象的先后顺序是什么?下面我们以测试的方式说明. 1.1.声明父类 public class A { public A() { a1(); } public ...
Bean对象的实例化
bean对像的实例化分为3类,我先说说使用构造器来创建bean对象。 1.1)如果不使用构造注入,就使用bean对象的无参构造注入方法来创建bean实例,Spring对bean实例的所有属性默认初始化,基本类型数值默认0或false,引用类型默认为null。一般先实例化被依赖的bean,然后为bean注入依赖关系; 1.2)采用构造注入,为constructor-org传构造器参数,用于初始化
java实例化对象的过程
java实例化对象的过程
实例化对象内存分配问题?
初学C++ 基于VC++ 6.0开发。有两个问题请教没弄清楚:rnrn 一、自己写了一个类,实现200位大整数的加、减、乘、除等。类名为MyIntClass,然后在主函数中实例化该类为一个对象,进行运算(主函数中多次用到了 new 和 delete 操作)。当计算量较小时,会出现正确的结果,如计算50位、60位的整数都没问题。当计算超过100位的整数时,程序就会报错,然后退出。rnrn 但是当我在类中定义一个 long A[1000000]这样大数组后(不用初始化),计算超过100位的整数时,程序也很正常。我猜测是在实例化对象时给分配了足够的内存空间可供使用,因此不会出错。但是详细的实现原理不清楚,是不是如果不定义大数组,系统默认分配给对象的空间不够?定义了大数组之后,分配给大数组的空间被用来支撑其他函数的运算?还是系统对堆空间分配的内存空间增大了?rn 拜托高手给指点一下,谢谢!rnclass MyIntClassrnrn public:rnlong A[100000]; // 大数组rnrn /* rn 定义的其他变量和函数rn */rnrn;rnrn
关于对象实例化的一些问题
rn对象占用的内存空间只等于该对象的数据成员的长度之和,方法是不占用内存空间的,只有调用该方法的时候才会开辟空间。rn类的每个实例都要占用一段内存空间,用于保存非静态的成员变量;静态成员变量、方法,在内存里只有一份,所有类成员公用。rnrn问:rn一 关于静态成员rn1. 静态字段是不是在类的第一次实例化的时候分配内存的?rn2. 静态方法是在类的调用的时候分配内存?还是在类的第一次实例化的时候分配内存?rn3. 静态成员什么时候释放内存?rn二 关于非静态成员rn1. 实例化对象的时候,会给对象的非静态字段分配内存,那么,这个内存又是什么时候释放的?rn三 Java和c++的区别rn上面问的都是一些内存释放的问题,Java和c++的处理方式是不是不一样的?
利用字符串实例化对象......
在.NET中,可不可以通过一个字符串来实例化对象?rn如:dim strClassNm as String = "类名"rn然后通过这个strClassNm来将这个类实例化.rn我知道JAVA中可以通过Class.forName("类名");是可以做到的.但.NET中怎么做呢?不会做不到吧?
未将对象实例化?
protected MyTest.Page Pager1;//定义用户控件rnrn#region Web 窗体设计器生成的代码rnoverride protected void OnInit(EventArgs e)rnrn InitializeComponent();rn base.OnInit(e);rn this.Pager1.NavigationClick+=new EventHandler(Pager1_NavigationClick);//-----总是在这一行出错,说没实力化?rn
对象实例化的问题?
我才开始学写VC++,希望大家多多指教!rn 我写了一个简单的类,rn a.hrn class AArn rn public:rn AA();rn ~AA();rn void show();rn ;rnrn a.cpprn #include "StdAfx.h"rn #include "a.h"rnrn AA::AA()rn rnrn AA::~AA()rn rn rnrn void DealDataBase::show()rn rn AfxMessageBox ("show");rn rnrnrn 在另一个类的一个函数中声明并调用,没有问题。我想声明一个AA对象,在另外的类中是个全局对象,即在这个类里的任意函数都可以调用。请问如何做?
java实例化对象例子
public class Penguin { private String name; private int id; public Penguin(String myName, int myid) { name = myName; id = myid; } public void eat(){ ...
类加载和对象实例化
java 虚拟机中,分为类加载和对象实例化两部分。 类加载主要是做static部分 static的成员变量和static的代码块按照代码顺序执行。 先执行父类的这两个操作,再执行子类的两个操作。   实例化是先执行成员变量赋值语句,然后顺序执行代码块,最后执行构造函数。 先完成父类的这三个操作,再执行子类的三个操作。   java中的代码块: 静态代码块 类成员代码块 局部代...
12、类初始化与对象实例化
-
new 实例化对象的问题
new 实例化对象,见过两种写法:rnCDog *d=new CDog;rnCDog *d=new CDog();rn编译都能通过,有什么区别吗?
请问:对象实例化的问题??
编译通过的程序,在运行时,提示:为将对象引用设置到对象的实例!!rn这是什么问题!!怎么解决!!
动态实例化对象
程序里取得类名是"A",他的基类是baseA。rn我如何产生一个类"A"的实例?rnrn不要告诉我是 dim a as Arnrn我要的是rndim a as baseArna= CType(CreateObject("A"), BaseForm)rn这样的代码,这个方法我试过了,必须是ActiveX对象才可以用的说rnrn请高手指教
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法