Servlet API已經被大多數基於Java的Web伺服器支援,這意味著當使用ServletAPI時,可以繼承Java的許多優點:不但代碼不存在記憶體漏洞和難以發現的指標Bug,而且還可以運行在許多不同的伺服器提供的平台上。
1.Javax.Servlet的主要功能
servlet採用常見的接受請求和產生響應的編程模型,該模型使用了一系列的分布式系統編程工具箱,這包括從遠端程序呼叫到向Web伺服器發出HTTP請求等。
Servlet編程其實非常簡單,主要就是實現一個Servlet介面,例如:
import javax.servlet.*;
public class MyServlet extends GenericServlet{
public void service(
ServletRequest request;
ServletRespose response;
) throws ServletException,IOEXception
{
......
}
}
service方法內可以操作request和response參數,這裡封裝了客戶機發送的資料,提供了對參數的訪問,並允許Servlet報告各種狀態(包括錯誤資訊),通常,Servlet通過輸入資料流得到大多數參數,並使用輸出資料流發送它們的響應。
ServletInputStream in=request.getInputStream();
ServletOutputStream out=response.getOutputStream();
這些輸入/輸出流可以使用多種不同格式的資料,例如:Applet和Servlet可以使用對象序列化(object serialization)交換資料,或者HTML、圖象格式等。
2.Servlet及其環境
由於Servlet是一種Java對象,它們由特定的執行個體資料群組成,這意味著正在執行的Servlet是運行在伺服器內部的獨立的應用程式。
在初始化期間,Servlet訪問一些特定的Servlet配置資料,這允許相同Servlet類的不同執行個體可以用不同的資料來初始化,併當作不同名字的Servlet來管理。在初始化期間提供的資料中,包括了每個執行個體在哪裡儲存它們自己的狀態。
Servlet還可以利用ServletContext對象與它們自己的環境進行互動。
3.使用模式
Servlet可以使用下面幾種模式,然而,不同是所有的伺服器環境支援所有這些模式:
(1)基本的模式是以請求/響應協議為核心。
(2)伺服器可以用過濾鏈(filter chains)連結多個Servlet.
(3)Servlet可以支援特定的協議,例如HTTP.
(4)在基於HTTP的應用程式中,Servlet是一個基於CGI擴充的完全的(且更高效)替代品。
(5)在基於HTTP的應用程式中,Servlet還可以作為HTML的伺服器端來包含動態地產生的Web文檔。
4.主要的Servlet方法
Servlet總是動態地被裝載,儘管在伺服器啟動時,伺服器通常提供一個管理選項來強制裝載和初始化特定的Servlet。Servlet使用普通Java類裝載工具裝載,這意味著它們可以從遠程目錄裝載(例如,信任的http://user/Servlet目錄),與使用本地檔案系統一樣容易,這種方式提高了系統結構的靈活性,網路中服務的發布變得更加容易和快捷。
Servlet被裝載之後,其生命週期涉及三個主要方法:
(1)Servlet通過調用init方法被伺服器啟用,如果Servlet的開發人員需要,可以執行一些內在的設定,這樣無需每個請求都設定一次,例如初始化其他網路服務的session或者訪問它們擁有的資料(儲存在資料庫或檔案中)。
(2)當初始化後,Servlet處理許多請求,為每一個客戶請求產生一個service調用,這些請求可能是並行的,這允許Servlet調整多個客戶的行為,類的靜態狀態可以用於在請求中共用資料。
(3)Servlet對象將一直處理請求,除非伺服器調用destroy方法顯式地關閉Servlet,Servlet類還是一個有效垃圾收集器。
5.安全性
Servlet必須訪問發出請求的客戶的有關資訊,當使用安全性通訊協定時,例如SSL,可以相當可靠地認證對方的身份。
Servlet擁有Java的大多數優點,例如不允許違規訪問記憶體及類型,這樣,有缺陷的Servlet不會導致服務崩潰,而這在大多數C語言的伺服器環境中經常發生。
與當前任何其他的伺服器擴充API不同,Java Servlet提供了強大的安全性原則支援,這是因為所有的Java環境都提供了一個安全管理器,可以用於控制是否允許執行某項操作,例如網路檔案的訪問。預設的,通過網路裝載的所有Servlet都是不可信的,它不許執行諸如訪問網路服務或本地檔案的操作。僅僅在Java Web Server中建立的,或者在本地由伺服器管理控制的,../Servlet目錄的Servlet,才是完全可信的,並賦予所有的許可權。