Servlet的生命周期
Servlet的生命周期有三個(gè):
馬克- to-win:馬克 java社區(qū):防盜版實(shí)名手機(jī)尾號: 73203。
1.初始化時(shí)期
在啟動(dòng)Tomcat后,客戶機(jī)首次訪問Servlet時(shí),tomcat裝入和實(shí)例化Servlet,僅執(zhí)行一次init()方法。無論有多少客戶機(jī)訪問 Servlet,都不會(huì)重復(fù)執(zhí)行init()。這里通常進(jìn)行一些初始化的操作,如數(shù)據(jù)庫的連接。init()方法不能反復(fù)調(diào)用,一旦調(diào)用就是重裝載 servlet。直到服務(wù)器調(diào)用destroy方法卸載servlet后才能再調(diào)用。
2.Servlet的執(zhí)行時(shí)期
在服務(wù)器裝載初始化servlet后,servlet就能夠無限循環(huán)往復(fù)的處理客戶端的請求。在前面的例子中,我們用doXXX方法來處理每個(gè)客戶的請求,且發(fā)回相應(yīng)的響應(yīng)。
3.Servlet結(jié)束時(shí)期
Servlets一直運(yùn)行到他們被服務(wù)器卸載。比如,在eclipse的情況下,當(dāng)我們點(diǎn)擊服務(wù)器窗口的紅色按鈕時(shí),就關(guān)停Tomcat,這時(shí) Servlet的destroy方法就會(huì)被tomcat調(diào)用。通常,大家在destroy方法里收回在init()方法中初始化的資源,如關(guān)閉數(shù)據(jù)庫的連接等。
例: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時(shí),輸出結(jié)果如下:
第五次訪問servlet時(shí),輸出結(jié)果如下:
constructor
init
doGet
doGet
doGet
doGet
doGet
當(dāng)點(diǎn)擊圖中標(biāo)記的紅色按鈕時(shí),會(huì)生成一個(gè)c://initial.txt文件。
另外一種執(zhí)行destroy的方法:隨便改動(dòng)一個(gè)java文件,一保存,應(yīng)用程序被重新加載,過去的應(yīng)用被卸載,于是destroy被執(zhí)行。
Servlet如何輸出HTML
馬克-to-win:有時(shí)我們需要Servlet輸出HTML,而不象以上的所有例子一樣只輸出純文本。注意文件當(dāng)中如有“,請加\來轉(zhuǎn)義,你如果不明白,就自己去了轉(zhuǎn)義符試試,就明白了!response.setContentType("text/html; charset=GBK");是設(shè)置網(wǎng)頁為中文編碼。
例: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>"); }
}
運(yùn)行結(jié)果是個(gè)紅底黑字的網(wǎng)頁,在eclipse測試瀏覽器窗口里面的任意位置,右擊鼠標(biāo),“查看原文件”,我們看一下這個(gè)網(wǎng)頁的源代碼。
<html>
<head><title>Servlet1</title></head>
<body bgcolor="#ff0000">
<p><H1>我們The servlet </H1></p>
</body></html>