一个Servlet的生命周期由实例化,初始化,提供服务,销毁,被回收几个步骤组成。
实例化
-
当用户通过浏览器输入一个路径,这个路径对应的servlet被调用的时候,该Servlet就会被实例化
image.png
-
无论访问了多少次LoginServlet,构造方法只会执行一次,所以Servlet是单例的
初始化
- LoginServlet继承了HttpServlet,同时也继承了init(ServletConfig)方法
- init初始化也只会执行一次
- 代码如下
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
public LoginServlet() {
System.out.println( "LoginServlet 构造方法 被调用");
}
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init(ServletConfig)");
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
String password = req.getParameter("password");
String html = null;
if ("admin".equals(name) && "123".equals(password)) {
html = "<div style='color:green'>登录成功</div>";
} else {
html = "<div style='color:red'>登录失败</div>";
}
resp.setContentType("text/html; charset=UTF-8");
resp.getWriter().println(html);
}
}
-
效果如下
image.png
提供服务
- 执行service方法,然后决定doGet,还是doPost
- 处理具体的业务
销毁
- web应用重启的时候回调用destroy
- 关闭tomcat的时候,destroy会被调用
被回收
- 当该Servlet被销毁后,就满足垃圾回收的条件了
- 当下一次垃圾回收GC来临的时候,就有可能被回收
网友评论