public class ServletDemo2 implements Servlet {
/**
* 隐匿的方法,初始化方法
* 特点:在servlet创建时执行,且只执行一次。
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init");
}
/**
* 获取servletconfig对象
* ServletConfig:Servlet的配置对象
* @return
*/
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
* 提供服务的方法
* 每一次servlet被访问时执行,执行多次。
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service");
}
/**
* 获取Servlet的一些信息,版本,作者等。。
* @return
*/
@Override
public String getServletInfo() {
return null;
}
/**
* 销毁方法
* 在服务器正常关闭servlet被销毁时执行,只执行一次。
*/
@Override
public void destroy() {
System.out.println("destroy");
}
}
Servlet中的生命周期方法:
1.被创建:执行init方法,只执行一次,一般用于加载资源。
*指定servlet的创建时机,在标签下配置
①.第一次被访问时创建
<load-on-startup>
的值是负数,默认-1
②.服务器启动时创建
<load-on-startup>
的值是0或正整数
*Servlet的init方法只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
多个用户同时访问,可能存在线程安全问题
解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量也不要对其修改,获取勉强可以。
2.提供服务:执行Service方法,每次访问都执行,执行多次。
3.被销毁:执行destroy方法,服务器正常关闭时执行一次,在Servlet被销毁之前执行,是遗言,一般用于释放资源。