Servlet加载和实例化的时间

servlet有良好的生存期的定义,包括如何加载、实例化、初始化、处理客户端请求以及如何被移除。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。那么Servlet是何时被加载和实例化的呢?很多人认为是在容器启动的时候。这个观点是在一定条件下才成立的。我们来看一个例子: 

//TestServlet.java 
import java.io.IOException; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class TestServlet extends javax.servlet.http.HttpServlet { 
   static final long serialVersionUID = 1L; 
   
    public TestServlet() { 
   super(); 
   System.out.println("实例化Servlet."); 

  
public void destroy() { 
   // TODO Auto-generated method stub 
   super.destroy(); 
   System.out.println("销毁Servlet."); 
}    

   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
   // TODO Auto-generated method stub 
   System.out.println("正在处理请求."); 
}   
  
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
   // TODO Auto-generated method stub 
   doGet(request, response); 
}         
  
public void init() throws ServletException { 
   // TODO Auto-generated method stub 
   super.init(); 
   System.out.println("初始化Servlet."); 
}   


<!--web.xml--> 
<servlet> 
    <display-name>TestServlet</display-name> 
    <servlet-name>TestServlet</servlet-name> 
    <servlet-class>TestServlet</servlet-class> 
    </servlet> 
<servlet-mapping> 
    <servlet-name>TestServlet</servlet-name> 
    <url-pattern>/TestServlet</url-pattern> 
</servlet-mapping> 


我们启动Tomcat服务器,在控制台中我们并没有看到“实例化Servlet.初始化Servlet.”的打印信息;我们在浏览器中输入此Servlet的URL来请求此Servlet,控制台中打印出“实例化Servlet.初始化Servlet.正在处理请求.”的信息。这说明,Servlet的加载和实例化是发生在第一次请求Servlet之前发生的。接下来我们在web.xml文件中的Servlet下面加上“1”这一句配置,重复上面的过程。发现在启动Tomcat服务器时就看到了“实例化Servlet.初始化Servlet.”的打印信息;请求的时候只打印了“正在处理请求”信息。这说明,Servlet的加载和实例化是发生在容器启动的时候发生的。当我们把配置改为“-1”,结果和第一种相同。 

如此说来,什么时候加载和实例化Servlet是由“1”配置来决定的。同意初始化发生在实例化Servlet之后。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值