Servlet的生命周期

Servlet的生命周期有三个:
马克- to-win:马克 java社区:防盗版实名手机尾号: 73203。



1.初始化时期
在启动Tomcat后,客户机首次访问Servlet时,tomcat装入和实例化Servlet,仅执行一次init()方法。无论有多少客户机访问 Servlet,都不会重复执行init()。这里通常进行一些初始化的操作,如数据库的连接。init()方法不能反复调用,一旦调用就是重装载 servlet。直到服务器调用destroy方法卸载servlet后才能再调用。

2.Servlet的执行时期
在服务器装载初始化servlet后,servlet就能够无限循环往复的处理客户端的请求。在前面的例子中,我们用doXXX方法来处理每个客户的请求,且发回相应的响应。


3.Servlet结束时期
Servlets一直运行到他们被服务器卸载。比如,在eclipse的情况下,当我们点击服务器窗口的红色按钮时,就关停Tomcat,这时 Servlet的destroy方法就会被tomcat调用。通常,大家在destroy方法里收回在init()方法中初始化的资源,如关闭数据库的连接等。




例:4.1

package com;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletHello1 extends HttpServlet {
    public ServletHello1() {
        System.out.println("constructor");
    }
    public void init() throws ServletException {
        System.out.println("init");
    }
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws IOException {
        System.out.println("doGet");
    }
    public void destroy() {

        System.out.println("des");      

        FileWriter in;
        try {
            in = new FileWriter("c:\\initial.txt");
            in.write("destroy");
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

第一次访问servlet时,输出结果如下:






第五次访问servlet时,输出结果如下:

constructor
init
doGet
doGet
doGet
doGet
doGet


当点击图中标记的红色按钮时,会生成一个c://initial.txt文件。

另外一种执行destroy的方法:随便改动一个java文件,一保存,应用程序被重新加载,过去的应用被卸载,于是destroy被执行。




Servlet如何输出HTML

马克-to-win:有时我们需要Servlet输出HTML,而不象以上的所有例子一样只输出纯文本。注意文件当中如有“,请加\来转义,你如果不明白,就自己去了转义符试试,就明白了!response.setContentType("text/html; charset=GBK");是设置网页为中文编码。





例:5.1

package com;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletHello1 extends HttpServlet {
    protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=GBK");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>Servlet1</title></head>");
        out.println("<body bgcolor=\"#ff0000\">");
        out.println("<p><H1>我们The servlet </H1></p>");
        out.println("</body></html>");    }
}


运行结果是个红底黑字的网页,在eclipse测试浏览器窗口里面的任意位置,右击鼠标,“查看原文件”,我们看一下这个网页的源代码。


<html>
<head><title>Servlet1</title></head>
<body bgcolor="#ff0000">
<p><H1>我们The servlet </H1></p>
</body></html>