init方法的执行时间上遇到的问题的解决
请求一个servlet前的控制台输出
2004-12-2 16:46:46 org.apache.catalina.startup.Catalina start
信息: Server startup in 3922 ms
第一次请求后的输出
2004-12-2 16:46:46 org.apache.catalina.startup.Catalina start
信息: Server startup in 3922 ms
HINT in SampleHttpServlet's init method!!!!!! !@#$%^&*()_+|
HINT in SampleHttpServlet's service method invoke
再次请求后的输出
2004-12-2 16:46:46 org.apache.catalina.startup.Catalina start
信息: Server startup in 3922 ms
HINT in SampleHttpServlet's init method!!!!!! !@#$%^&*()_+|
HINT in SampleHttpServlet's service method invoke
HINT in SampleHttpServlet's service method invoke
所以,我感觉 init 方法不是在服务器 启动的时候就调用的 ,tomcat服务器只是加载servlet类 ,创建实例.而在请求之前并没有调用
init()方法.
这个测验得到的结论:1)sevice方法确实是在每次请求的时候都会调用的.
2)书上说服务器先调用的init然后才有请求我感觉是不对的
3)init方法是只调用一次的,调用的时间我还不清楚
以下资料:有所帮助
(1) init() 方法
在 Servlet 的生命期中,仅执行一次 init() 方法。它是在服务器装入 Servlet 时执行的。 可以配置服务器,以在启动服务器或客户机首次访问 Servlet 时装入 Servlet。 无论有多少客户机访问 Servlet,都不会重复执行 init() 。
(3) destroy() 方法
destroy() 方法仅执行一次,即在服务器停止且卸装Servlet 时执行该方法。典型的,将 Servlet 作为服务器进程的一部分来关闭。缺省的 destroy() 方法通常是符合要求的,但也可以覆盖它,典型的是管理服务器端资源。例如,如果 Servlet 在运行时会累计统计数据,则可以编写一个 destroy() 方法,该方法用于在未装入 Servlet 时将统计数字保存在文件中。另一个示例是关闭数据库连接。
当服务器卸装 Servlet 时,将在所有 service() 方法调用完成后,或在指定的时间间隔过后调用 destroy() 方法。一个Servlet 在运行service() 方法时可能会产生其它的线程,因此请确认在调用 destroy() 方法时,这些线程已终止或完成。

浙公网安备 33010602011771号