Servlet是Java語言在WEB伺服器端的一種應用技術,未來Servlet將可能徹底取代CGI。本講座將具體介紹Servlet的概念、開發、調試以及相應的應用執行個體。
一、什麼是Servlet?
·Servlet是一種獨立於平台和協議的伺服器端的Java應用程式,可以產生動態Web頁面。
·Servlet是位於Web 伺服器內部的伺服器端的Java應用程式,與傳統的從命令列啟動的Java應用程式不同,Servlet由Web伺服器進行載入,該Web伺服器必須包含支援Servlet的Java虛擬機器。
·Servlet與Web伺服器的關係類似於Applet與Web瀏覽器的關係(這也是為什麼Servlet技術被稱為Servlet的原因),我們可以將Servlet想象成沒有前端介面(faceless)的Applet。與Applet不同的是,由於Servlet運行在Web伺服器端,因此它是一個可信賴的程式,不受到Java安全性的限制,擁有和普通Java應用程式一樣的許可權。
·Servlet是CGI Script的一種替代技術,由於Servlet在效能、可移植性、代碼重用等方面比CGI具有顯著的優勢,因此在未來的技術發展過程中,Servlet有可能徹底取代CGI。
二、編寫Servlet所需要的開發環境
進行Servlet開發所需要的基本環境是JSDK以及一個支援Servlet的Web伺服器。
1.JSDK(Java Servlet Development Kit)
JSDK包含了編譯Servlet應用程式所需要的Java類庫以及相關的文檔。對於利用Java 1.1進行開發的使用者,必須安裝JSDK。JSDK已經被整合進Java 1.2 Beta版中,因此如果利用Java 1.2進行開發,則不必安裝JSDK。
JSDK可以在Javasoft公司的網站免費下載,其地址是
http://jserv.javasoft.com/products/java-server/downloads/index.html
2.支援Servlet的Web伺服器
Servlet需要運行在支援Servlet的Web伺服器上。目前支援Servlet的Web伺服器首推SUN公司的 Java Web Server。如果現有的Web伺服器不支援Servlet,則可以利用一些第三方廠商的伺服器增加件(add-ons)來使Web伺服器支援Servlet,這其中Live Software公司(http://www.livesoftware.com)提供了一種稱為JRun的產品,通過安裝JRun的相應版本,可以使Microsoft IIS和Netscape Web Server支援Servlet。
三、開發Servlet的過程
本文將以編寫一個簡單的Servlet(我們稱之為HelloServlet)為例說明開發Servlet的過程。
1.編寫Servlet代碼
Java Servlet API是一個標準的Java擴充程式包,包含兩個Package∶javax.servlet和 javax.servlet.http。對於想開發基於客戶自訂協議的開發人員,應該使用javax.servlet包中的類與介面;對於僅利用HTTP 協議與用戶端進行互動的開發人員,則只需要使用javax.servlet.http包中的類與介面進行開發即可。
下面是一個典型的servlet的程式碼∶
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class HelloServlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
public void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
String clientIPAddress = req.getRemoteAddr();
res.setContentType(″text/html″);
ServletOutputStream out = res.getOutputStream();
out.println(″〈html〉″);
out.println(″〈head〉〈title〉Hello World〈/title〉〈/head〉″);
out.println(″〈body〉″);
out.println(″〈h1〉Hello,You come from ″+clientIPAddress+″〈/h1〉″);
out.println(″〈/body〉〈/html〉″);
}
}
該servlet實現如下功能∶當使用者通過瀏覽器訪問該servlet時,該servlet向用戶端瀏覽器返回一個HTML頁面∶
Hello, You come from 192.168.0.11
其中192.168.0.11是用戶端IP地址。程式碼的要點如下∶
·基於HTTP協議的servlet必須引入javax.servlet和javax.servlet.http包;
·HelloServlet從類HttpServlet派生,HttpServlet是GenericServlet的一個衍生類別,通過 GenericServlet實現了Servlet介面。HttpServlet為基於HTTP協議的servlet提供了基本的支援;
·service()方法是servlet程式的進入點,當使用者從瀏覽器調用servlet時,servlet將進入該方法。service()包含兩個參數,HttpServletRequest對象包含了用戶端請求的資訊,可以通過該參數取得用戶端的一些資訊(例如IP地址、瀏覽器類型等)以及 HTTP請求類型(例如GET、HEAD、POST、PUT等);HttpServletResponse對象用於完成Servlet與用戶端的互動,通過調用HttpServletResponse.getOutputStream()客戶取得向用戶端進行輸出的輸出資料流,向用戶端發送HTML頁面。
2.編譯Servlet代碼
利用JDK 1.1對Servlet代碼進行編譯(假設Web伺服器採用Java Web Server),其命令列為:
c:/> javac -d c:/JavaWebServer/servlets HelloServlet.java
進行編譯時間必須保證JSDK的Java Servlet類已經包含在CLASSPTH中,上述命令將編譯後的.class代碼放置在 Java Web Server的Servlets目錄下(如果你使用其他的Web Server,需要將.class代碼放置在該Web Server 指定的目錄下)。
3.將Servlet添加進Web Server
由於Servlet是通過Web Server進行調用的,因此必須將其在Web Server中進行註冊,以便Web Server能夠正確的找到Servlet代碼。對於 Java Web Server來說,它提供了一個系統管理Applet,通過該Applet對我們的HelloServlet進行註冊(在這裡,我們將 HelloServlet命名為firstServelt)。
3.測試Servlet
現在可以對HelloServlet進行測試了,開啟瀏覽器,鍵入
http://192.168.0.9/servlet/firstServlet ;
其中192.168.0.9是安裝有Java Web Server的機器IP地址。
如果一切正常,在瀏覽器中將返回一個頁面,輸出“Hello,You come from 192.168.0.11”。其中192.168.0.11是運行瀏覽器的機器IP地址。