servlet Init() destroy() service()函数分别在什么时候会调用?
请在如下三个函数内添加log,并实验证明。
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/life")
public class LifeTest extends GenericServlet {
@Override
public void destroy() {
System.out.println("destroy method");
}
@Override
public void init() throws ServletException {
System.out.println("init method");
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service method");
}
}
<servlet>
<servlet-name>life</servlet-name>
<servlet-class>com.servlet.LifeTest</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

- 初次访问servlet时调用init,只会调用一次,如果声明了loadOnStartup则可以随着程序的启动而执行
- service在每次访问servlet时都会调用
- destroy在关闭或者卸载时会被调用
有什么样的的意义呢?**
首先,生命周期函数本身的意义,对于init、destroy,如果你希望再servlet创建以及servlet被销毁的时候去做一些额外的事情,那么可以再init、destoy方法里面写对应的逻辑。
设置init load-on-startup非负数有什么样的意义呢?
- 比如说,当前servlet需要预先做一些运算,如果在第一次访问之前去执行,那么可能时间有点来不及,这个时候我就可以设置init方法随着应用的启动而执行,那么就有了更多的时间来运算。
- 比如对于一个商城来说,如果需要在页面加载当前商城里面商品的分类,并且将这个分类和其他的servlet所共享
- init—load-on-startup非负数
init方法里面写入获取商品分类的逻辑,紧接着将这些数据和其他servlet共享。即便当前servlet没有被访问到,如果用户直接去访问另外一个servlet,是不是也可以取出里面的数据啊

2万+

被折叠的 条评论
为什么被折叠?



