为什么说Servlet是单实例的


 单实例让我联想到去年《设计模式》课上的“单例模式”,但现在要说的内容却和它无关,为什么说“Servlet是单实例的呢?”,我们来看一个示例程序:

package cn.edu.ynu.test;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class SingleInstance extends HttpServlet {
private int a = 0;
 
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int b = 0;
a ++;
b++ ;
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><head><title>Single Instance Test</title></head>");
out.println("<body>");
out.println("a = " a "<br>");
out.println("b = " b);
out.println("</body></html>");
}
 
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
 
}
在该Servlet中,a是一个实例变量,而b则是一个方法里面的局部变量,第一次运行这个Servlet得到的结果为:


 
 
这个是可以理解呢,因为a和b在初始化后都执行了加1的操作,但是第二次执行这个Servlet会出现什么结果呢?
答案是a = 2 b= 1,看下列截图:
 

 
 
解释:当我第一次调用这个Servlet的时候,服务器就会创建一个该Servlet(示例中为SingleInstance)的一个实例(也就是一个对象),此时a和b初始化为0,并且a和b分别执行了加1的操作;而当我们第二次调用该Servlet时,因为Servlet是单实例的,这说明,此时已经有一个SingleServlet的实例,所以实例变量a不在执行初始化,而b因为是一个方法里的局部变量,所以会再次初始化为0,故而在a、b分别执行加1之后,a和b的值分别为2和1。
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值