Servlet的生命周期

Servlet的生命周期有三個:
馬克- to-win:馬克 java社區(qū):防盜版實名手機尾號: 73203。



1.初始化時期
在啟動Tomcat后,客戶機首次訪問Servlet時,tomcat裝入和實例化Servlet,僅執(zhí)行一次init()方法。無論有多少客戶機訪問 Servlet,都不會重復執(zhí)行init()。這里通常進行一些初始化的操作,如數(shù)據庫的連接。init()方法不能反復調用,一旦調用就是重裝載 servlet。直到服務器調用destroy方法卸載servlet后才能再調用。

2.Servlet的執(zhí)行時期
在服務器裝載初始化servlet后,servlet就能夠無限循環(huán)往復的處理客戶端的請求。在前面的例子中,我們用doXXX方法來處理每個客戶的請求,且發(fā)回相應的響應。


3.Servlet結束時期
Servlets一直運行到他們被服務器卸載。比如,在eclipse的情況下,當我們點擊服務器窗口的紅色按鈕時,就關停Tomcat,這時 Servlet的destroy方法就會被tomcat調用。通常,大家在destroy方法里收回在init()方法中初始化的資源,如關閉數(shù)據庫的連接等。




例: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文件。

另外一種執(zhí)行destroy的方法:隨便改動一個java文件,一保存,應用程序被重新加載,過去的應用被卸載,于是destroy被執(zhí)行。




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>