`

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之后。
分享到:
评论

相关推荐

    servlet +API+实例

    Servlet有良好的生存期的定义,包括如何加载、实例化、初始化、处理客户端请求以及如何被移除。这个生存期由javax.Servlet.Servlet接口的init,service和destroy方法表达。

    说一说servlet的生命周期

    Servlet生命周期就是servlet从创建到销毁的过程,包括加载和实例化,初始化,服务,和销毁4步。  当客户第一次请求时,首先判断是否存在servlet对象,第一次请求时不存在,则由tomcat创建对象,调用init()方法对...

    JSP/Servlet Java面试逻辑题

    servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。 这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。 2、servlet的生命周期 答: web容器加载servlet,...

    JavaWeb程序Tomcat及Servlet配置:实例与组件包-zip压缩包

    Servlet的生命周期由Web容器(如Tomcat)管理,包括加载、初始化、服务、销毁等阶段。 二、组件包 Java EE SDK: Java EE SDK提供了JavaWeb应用程序开发所需的所有API和库。 Tomcat: Tomcat二进制包,包含了Tomcat...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    Web服务启动时自动加载Servlet,并读取数据库内容

    我操作数据库用的是spring的HibernateTemplate和JdbcTemplate,访问数据库是以bean注入的方式,在action里注入service的实现,读取数据库数据,其实现在的关键就是得到这个service的实例化对象,

    JSP和Servlet面试题

    (Synchronized)可以保证在同一时间只有一个线程访问,(使用同步块会导致性能变差,最好不去使用实例变量) 7.Jsp的重定向和转发的流程有什么区别 重定向是客户端行为,转发是服务器端行为 重定向时服务器...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    Servlet的生命周期

    1.创建:当用户第一次请求servlet映射的路径时,服务器会加载servlet并实例化,后续用户请求同一个servlet时,服务器都会用同一个servlet实例来响应用户的请求。如果希望服务器启动后立即实例化servlet,需要在配置...

    Java™ Servlet 规范.

    2.3.1 加载和实例化 ................................................................................................................................16 2.3.2 初始化 ........................................

    Servlet生命周期

    Servlet 加载—&gt;实例化—&gt;服务—&gt;销毁。   1.Servlet 通过调用 init () 方法进行初始化。 2.Servlet 调用 service() 方法来处理客户端的请求。 3.Servlet 通过调用 destroy() 方法终止(结束)。 4.最后,...

    Servlet3.1规范(最终版) PDF

    16 2.3.1 加载和实例化 ................................................................................................................................16 2.3.2 初始化 ....................................

    JavaWeb编程技术沈泽刚版教材课后习题答案

    2、Servlet是在容器中运行的组件,有一个从创建到销毁的过程,其中包括加载和实例化、初始化、提供服务以及销毁几个阶段。其中生命周期方法有init()、service()和destroy()等3个。 3. 答:发生下列事件,浏览器向...

    java范例开发大全

    实例154 使用静态成员变量计算内存中实例化的对象数目 239 实例155 实现加减乘除的方法 240 8.3 面向对象的设计模式 241 实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会(工厂...

    Javaweb面试题.docx

    Web 容器加载Servlet 并将其实例化后,Servlet 生命周期开始,容器运行其init 方法进行Servlet 的初始化,请求到达时运行其service 方法,service方法自动派遣运行与请求对应的doXXX 方法(doGet,doPost)等,当...

    Java范例开发大全(全书源程序)

    实例154 使用静态成员变量计算内存中实例化的对象数目 239 实例155 实现加减乘除的方法 240 8.3 面向对象的设计模式 241 实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会...

    Java范例开发大全 (源程序)

     实例154 使用静态成员变量计算内存中实例化的对象数目 239  实例155 实现加减乘除的方法 240  8.3 面向对象的设计模式 241  实例156 Singleton单例模式 242  实例157 招聘(简单工厂模式) 243  实例158...

    java范例开发大全(pdf&源码)

    实例154 使用静态成员变量计算内存中实例化的对象数目 239 实例155 实现加减乘除的方法 240 8.3 面向对象的设计模式 241 实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会(工厂...

Global site tag (gtag.js) - Google Analytics