当服务器启动之后,servlet的实例个数

上次面试时,问到了当服务器启动之后,多个用户访问servlet时,如何解决并发问题,当时感觉并发问题好像是由web容器解决的吧,后来问到那会有多少个实例呢?这个没有印象,就说好像是一个吧,他又追问,多个用户请求servlet,容器中只有一个servlet实例吗?又改口了,多个.

后来查了下资料,说法如下

===========================

一般来说servlet是线程安全的,所以每个用户每一次的调用都是独立的
一般由容器解决,但对于类变量,则需要自己控制,数据库访问,就有同步控制
当一个SERVLET被创建并且被装载到内存,它在内存中仅有一个实例,采用多线程去访问这个SERVLET实例

=====================================

还是不是很肯定,所以写了个例子验证了一下,确实只有一个实例,思想是在这个servlet中加一个int 型成员变量,第次访问,成员变量加1,多次访问,如果每次访问的成员变量都是加一的,则说明容器中只有一个servlet实例,反之则有多个实例.代码如下,

java 代码
  1. private int i=0 ;   
  2. private int k ;    
  3. private static int j=0;    
  4.   
  5. ublic void doGet(HttpServletRequest request, HttpServletResponse response)   
  6.         throws ServletException, IOException {   
  7.   
  8.     response.setContentType("text/html");   
  9.     PrintWriter out = response.getWriter();   
  10.     out   
  11.             .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");   
  12.     out.println("<HTML>");   
  13.     out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");   
  14.     out.println("  <BODY>");   
  15.     out.print("    This is ");   
  16.     out.print(this.getClass());   
  17.     out.println(", using the GET method");   
  18.     out.println("------------------");  
  19.     out.println(" private i= " + i++);   
  20.     out.println(" private k= " + k++);       
  21.     out.println(" static j= " + j++);   
  22.     out.println("------------------");   
  23.     out.println("  </BODY>");   
  24.     out.println("</HTML>");   
  25.     out.flush();   
  26.     out.close();   
  27. }   

其余代码都是自动生成的.结果是每次访问,成员变量都加一 .

下面面试时好像都会问到,只初始化一次,记住,

sevlet 生命周期
(1)加载和实例化
(2)初始化(容器调用Servlet的init()方法初始化这个对象init()只能用一次)
(3)请求处理(容器调用Servlet的service()方法对请求进行处理)
(4)服务终止(容器调用Servlet的destroy()方法将servlet实例从容器中移除,释放所有资源)

感觉好多问题都是相关的,但平时没有仔细想想,面试时,又不会有太多的思考机会,哎,愿大家有所收获吧.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值