不对,一个Servlet肯定不止一个实例,不同应用服务器实现不同,但肯定是一个请求来调用一个Servlet实例,而SerletContext则是整个Web Container中只有一个,在Servlet初始化时传给他的。所以你可以通过ServletContext来保存一些公用的对象。session则在同一个客户的所有请求中都是一个,但你开两个窗口来访问,则是两个session。不知道你问的Servlet中的变量是什么意思?

解决方案 »

  1.   

    to: gfzhx(小小) 
    --------------------------------------------
    非常感谢!servlet中的变量就像以下程序的变量B,它的作用域和ServletContext和session有什么不同?:public class A extends HttpServlet {
      int B;
      public void doGet(...)...
        .
        .
        .
    }
    ------------------------------------------------
    thanks again!
      

  2.   

    Servlet中的变量一般都是用于Servlet类本身的,虽然你可以用public是其他类可以使用,在运行时,由于你不能得到对象的引用,所以无法使用该变量,但static另当别论。这个变量和ServletContex和Session中的区别很大,应该很容易理解。
      

  3.   

    那为什么我在doGet()方法里对B进行累加,开不同的窗口显示的值是累加后的呢?这让我感觉很纳闷!
      

  4.   

    这个问题就是我原来说的不同的应用服务器实现不同,为了提高性能,很多应用服务器都采用了对象缓冲技术,也就是1000各请求,应该产生1000个Servlet的实例,但考虑性能问题,对Servlet的对象重用了,所以就会造成累加了。建议你在init方法中将b做出视化就可以了。