生命周期通过Servlet方法来体现
创建:执行init方法,只执行一次。所以只会被创建一次
Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的。
Servlet什么时候被创建
- init方法是用来加载资源的
- 如果加载的资源比较多,有的Servlet执行前需要依赖其他的Servlet,这种的就要在服务器启动时就创建。
多用户同时访问,可能纯在多线程安全问题
解决:尽量不要在Servlet中定义成员变量,定义局部变量。即使定义了成员变量,也不要对其修改(不要有并发的操作)。
在一个对象里方法不被共享,成员变量可以共享
提供服务:执行service方法,访问Servlet一次,执行一次。
被销毁:Servlet被销毁时,执行destro方法,执行一次。在Servlet销毁前执行,用于释放资源(可以理解为交代临终遗言)
服务器正常关闭才执行
不正常关闭不会被执行(服务器突然断电,程序被直接关闭,不会被执行)
ServletConfig:代表当前Servlet在web.xml中的配置信息(用的不多)
String getServletName() -- 获取当前Servlet在web.xml中配置的名字
String getInitParameter(String name) -- 获取当前Servlet指定名称的初始化参数的值
Enumeration getInitParameterNames() -- 获取当前Servlet所有初始化参数的名字组成的枚举
ServletContext getServletContext() -- 获取代表当前web应用的ServletContext对象
getServletInfo它提供有关servlet 的信息,如作者、版本、版权。
package cn.itcast.web.servlet; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import java.io.IOException; /** * @author 旗木五五开 * @create 2020-02-16 13:26 * 如何只定义1个service方法,其它的方法按需求设置 */ @WebServlet("/demo1") public class ServletDemo1 implements Servlet{ @Override public void init(ServletConfig servletConfig) throws ServletException { } @Override public ServletConfig getServletConfig() { return null; } // 大多数就用这一个方法 @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("demo1..."); } @Override public String getServletInfo() { return null; } @Override public void destroy() { } }