当我们在web.xml中提到任何servlet为loadOnStartup
时,肯定会调用它的init
方法。只是想确认service
和destroy
方法是否也被调用?如果没有他们被召唤?
另一个问题是,每次调用init
方法时都会提到一次。这是否意味着当servlet第一次收到请求时,将调用init
方法,然后调用service
。
但不会召唤毁灭。当第二个请求它将再次调用服务方法而不是init方法。这种理解是否正确?但是当容器决定调用destroy方法时?
答案 0 :(得分:2)
loadOnStartup
表示将加载servlet(及其在容器启动期间调用的init(..)
方法。否则,正如您所怀疑的那样,它将在第一个请求到来时加载init(..)
。取消部署上下文时(例如 - 容器已停止),将调用destroy()
答案 1 :(得分:1)
loadOnStartup
优先考虑哪些线程在其他线程之前加载。 Servlet容器将加载servlet并调用init
方法。如果loadOnStartup
中未提及web.xml
,则在需要servlet的请求调用时将实例化serlvet。
servlet的初始化只发生一次。一旦初始化,servlet容器就会保留它。
对于请求处理,servlet容器调用serlvet的service()
方法,当servlet容器关闭时,它将调用所有servlet的destroy()
方法并从容器中删除servlet。
答案 2 :(得分:0)
当我们在load-on-start-up enable
中启用web.xml
时,我们的servlet程序将在服务器启动期间实例化。意味着每个请求都需要相同的时间来响应。