证明servlet只被初始化一次,因为servlet是使用反射,会直接使用无参构造函数,只要证明无参构造函数执行一次即可。
@WebServlet("/LifeServlet")
public class LifeServlet extends HttpServlet {
ServletOut out=new ServletOut();
public LifeServlet() {
System.out.println("LifeServlet构造函数执行");
}
@Override
public void init() throws ServletException {
System.out.println("LifeServlet的init()方法执行");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("LifeServlet的doGet()方法执行");
}
@Override
public void destroy() {
System.out.println("LifeServlet的destroy()方法执行");
}
}
因为Tomcat没办法直接在控制台输出 System.out.println()的信息,所以这里创建一个ServletOut的类,将相关信息写到文件中。
public class ServletOut {
public ServletOut (){
try {
PrintStream print=new PrintStream("E:\\test.txt"); //写好输出位置文件;
System.setOut(print);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
将servlet部署到tomcat中,使用
localhost:8080/LifeServlet 访问两次,查看
E:\test.txt文件。
LifeServlet构造函数执行
LifeServlet的init()方法执行
LifeServlet的doGet()方法执行
LifeServlet的doGet()方法执行
可见servlet的构造函数和初始化函数只执行了一次。