全国咨询热线:400-618-4000

Java培训之Servlet实例化时机

创建时间:2016年04月26日11时20分 来源:传智播客Java培训学院

1.Servlet实例化时机

通过Servlet的学习,我们知道当浏览器第一次访问Servlet的时候,服务器为该Servlet创建实例,该实例会永驻内存,当服务器关闭或当前应用被移出服务器时,Servlet实例才会被销毁。现在我们可以通过配置来设置Servlet在服务器启动的时候就被创建,即在web.xml文件中添加<load-on-startup>元素。具体配置如下所示:
在web.xml中有如下配置,如例1-1所示:
例1-1 web.xml
<servlet>
    <servlet-name>hello1</servlet-name>
    <servlet-class>cn.itcast.servlet.Hello1Servlet</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>hello1</servlet-name>
    <url-pattern>/hello1</url-pattern>
</servlet-mapping>
<servlet>
    <servlet-name>hello2</servlet-name>
    <servlet-class>cn.itcast.servlet.Hello2Servlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>
<servlet-mapping>
    <servlet-name>hello2</servlet-name>
    <url-pattern>/hello2</url-pattern>
</servlet-mapping>
在例1-4中,有两个Servlet,它们的<load-on-startup>元素内容分别是0和1。<load-on-startup>元素是<servlet>元素的子元素,用于指定Servlet被加载的时机和顺序。它的值必须是一个整数,如果这个值是一个负数即表示在第一次访问的时候被创建实例。<load-on-startup>的值越小越先被加载。
为了让大家更加理解,我们现在来看一个案例,案例详细步骤请参考Servlet初始化时机案例详解,下载案例源代码。具体如下:
(1)在Example13中新建一个Servlet类LoadServlet,如例1-2所示:
例1-2 LoadServlet.java
public class LoadServlet extends HttpServlet {
    /*
     * 重写GenericServlet类的init()方法
     * */
    @Override
    public void init() throws ServletException {
       System.out.println("LoadServlet was created.............");
    }
    public void doGet(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
    doPost(request,response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
    }
}
(2)在web.xml中配置LoadServlet随着服务器的启动而创建,具体代码如1-3所示:
例1-3 web.xml
<servlet>
    <servlet-name>LoadServlet</servlet-name>
    <servlet-class>cn.itcast.servlet.LoadServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
 </servlet>
<servlet-mapping>
    <servlet-name>LoadServlet</servlet-name>
    <url-pattern>/LoadServlet</url-pattern>
  </servlet-mapping>
(3)将Example13发布到Tomcat服务器中,启动服务器,控制台打印结果如图1-1所示:
init()方法执行,即Servlet实例被创建。

图1-1 运行结果
由图1-1可知,服务器启动后,LoadServlet的初始化信息被打印出来,即init()方法被调用了,由此说明,LoadServlet在Tomcat启动时就被自动加载并初始化了


本文版权归传智播客Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客Java培训学院
首发:http://www.itcast.cn/javaee