关于Servlet的生命周期
以下我们写一个一个html,和一个简单的Servlet,然后在html页面上以dopost方式来提交表单来访问Servlet的dopost函数,然后分析Servlet的生命周期
这个工程的名字: TestLifeCyecleServlet
index.html:
<html> <body> This is my JSP page. <br> <form action="LifeCycleServlet" method="post"> <input type=submit value="mySubmit"> </form> </body> </html>
action="LifeCycleServlet"
所以这个表单提交的目标是: http://localhost:8080/TestLifeCyecleServlet/LifeCycleServlet
再看看我们的Servlet: LifeCycleServlet
LifeCycleServlet.java:
package myServlet; import java.io.IOException; 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 LifeCycleServlet extends HttpServlet { /** * */ privatestatic final long serialVersionUID = 1L; publicLifeCycleServlet() { //TODO Auto-generated constructor stub System.out.println("Constructor......"); } @Override protectedvoid doPost(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException { //TODO Auto-generated method stub System.out.println("doPost;"); } @Override publicvoid destroy() { //TODO Auto-generated method stub System.out.println("detroy"); } @Override publicvoid init() throws ServletException { //TODO Auto-generated method stub System.out.println("init()"); } @Override publicvoid init(ServletConfig config) throws ServletException { //TODO Auto-generated method stub System.out.println("init(config)"); super.init(config); } }
我们要用Servlet,一般都要在web.xml里配置的:
<servlet> <servlet-name>LifeCycleServlet</servlet-name> <servlet-class>myServlet.LifeCycleServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LifeCycleServlet</servlet-name> <url-pattern>/LifeCycleServlet</url-pattern> </servlet-mapping>表示这个LifeCycleServlet的访问地址为: http://localhost:8080/TestLifeCyecleServlet/LifeCycleServlet
主页面:index.html
第一次提交表单后:
然后再提交N次后:
然后我们在Tomcat下停止这个工程后:
Constructor......
init(config)
init()
doPost;
doPost;
doPost;
doPost;
2011-11-2 10:59:08org.apache.catalina.startup.HostConfig checkResources
信息: Reloading context [/TestLifeCyecleServlet]
Detroy
我们会发觉,这个项目由部署到Remove部署,由始至终这个Servel只到构造并初始化一次(第一次被访问的那个时候被构造,也就是第一次提交表单时被构造,不提交不构造)
Constructor
init(config)
init() //用户的自定义初始化
然后每将提交表单,这个Servlet就会响应一次dopost,无论以后有多少个用户提交表单,这个Servlet就只管响应就可以了…
最后,这个项目被Remove部署后, Detroy就会被调用….
所以这个Servlet的生命周期是这个Servlet被访问时构造,项目被Remove部署时才终止