上次面试时,问了个如果多用户并发访问servlet时,该如何解决.当时想的是好像是由Web容器解决的吧. 
后来他再问句如果多个用户访问servlet,容器中会有几个实例,这个就一点也清楚了,随便猜了说1个(有点主观) 
后来到网上查了下,结果如下: 
------------------------- 
一般来说servlet是线程安全的,所以每个用户每一次的调用都是独立的 当一个SERVLET被创建并且被装载到内存,它在内存中仅有一个实例,采用多线程去访问这个SERVLET实例---------------------------- 
再后来自己做了个实验, http://laorer.javaeye.com/admin/show/132771 
实验的思路如下: 
--- 
在servlet中定义了一个整型的类变量(没有进行同步操作,可以粗略的存储被请求的次数)还有整型的实例变量(也没有进行同步操作,用这个来判定是否与类变量相等,相等则只有一个实例,不等应该有多个实例) 
----- 
实验结果证明上面那个说法的正确性,本来也就没事了,但今天无意看到一个servlet2.3规范,便看了下, 
说法是这样的. 
------------ 
For a servlet not hosted in a distributed environment (the default), the servlet container must use only one instance per servlet declaration. However, for a servlet implementing the SingleThreadModel interface, the servlet container may instantiate multiple instances to handle a heavy request load and serialize requests 
to a particular instance.In the case where a servlet was deployed as part of an application ed in 
the deployment descriptor as distributable, a container may have only one instance 
per servlet declaration per virtual machine (VM). However, if the servlet in a dis- 
tributable application implements the SingleThreadModel interface, the container may instantiate multiple instances of that servlet in each VM of the container.------------------- 
也找了一份中文规范,不过感觉翻得不太好就不帖出来了说是如果实现了SingleThreadModel 接口,则可能会有多个实例.便实验了一下,出现的结果不知道怎么解释,实验的方法和前面一样,不过servlet实现了SingleThreadModel 接口. 
结果是每刷一次 类变量增加一次,这个没问题,但是每刷五次,实例变量才增加一次,而且多个浏览器访问的时候,当一个实例变量增加了,其他浏览器的实例变量也增加, 这点就不清楚为什么了,开始以为是容器中有五个实例,但后来想想不对,每个浏览器的实例应该不一样的,所以为什么一个浏览器请求的值变化了,其他浏览器请求的值也会变了呢实验环境是 eclipse3.2(估计和这没关系) + Weblogic 8.1 + jdk 1.4