1 容器
如果Web服務(wù)器應(yīng)用得到一個指向servlet的請求,此時服務(wù)器不是把請求交給servlet本身屋谭,而是交給部署該servlet的容器肚逸。要由容器想servlet提供HTTP請求和相應(yīng)超燃,而且要由容器調(diào)用servlet的方法,如doPost()或doGet()晨仑。
1.1 容器提供什么
- 通信支持
無需自己建立ServerSocket、監(jiān)聽端口拆檬、創(chuàng)建流等洪己。 - 生命周期管理
- 多線程支持
容器會自動為它接受的每個servlet請求創(chuàng)建一個新的java線程。 - 聲明方式實(shí)現(xiàn)安全
利用容器竟贯,可以使用XML部署描述文件來配置和修改安全性答捕,而不必將其硬編碼寫到servlet或其他類代碼中。 - JSP支持
容器負(fù)責(zé)把jsp代碼翻譯成真正的Java
1.2 容器如何處理請求
- 用戶點(diǎn)擊一個鏈接屑那,其URL指向一個servlet拱镐。
- 容器創(chuàng)建請求和響應(yīng)對象:HttpServletResponse艘款、HttpServletRequest。
- 容器根據(jù)請求中的URL找到正確的servlet沃琅,為這個請求創(chuàng)建或分配一個線程哗咆,并把請求和響應(yīng)對象傳遞給這個servlet線程。
- 容器調(diào)用servlet的service()方法益眉。根據(jù)請求的類型岳枷,service()方法會調(diào)用doGet()或doPost()方法。
- 以Http GET請求為例: doGet()方法生成動態(tài)頁面呜叫,并把這個頁面填入響應(yīng)對象空繁。
- 線程結(jié)束,容器吧響應(yīng)對象轉(zhuǎn)換為一個HTTP響應(yīng)朱庆,把它發(fā)回給客戶盛泡,然后刪除請求和響應(yīng)對象。
/**
* 一個servlet例子
*/
public class ServletEXP extend HttpServlet {
public void doGet(HttpServletRequest reque, HttpServletResponse response) throws IOException{
// 在servlet從容器得到的響應(yīng)對象中娱颊,可以拿到一個PrintWriter傲诵。
// 使用這個PrintWriter能夠?qū)TML文本輸出到響應(yīng)對象。
PrintWriter out = response.getWriter();
Date today = new Data();
out.println("<html> " + "<body>"
+ "<h1>DanDan's ServletEXP</h1>"
+ today
+ "<body><html>")
}
}