在Tomcat初次嘗試中,我們搭建了用於測試Servlet和JSP的基本環境。我們現在要轉向網路應用的具體開發。
廚師
Web伺服器的基本工作方式是請求-處理-回複。請求和回複是在網路上,以HTTP協議為基礎的通訊(參考HTTP協議)。請求是客戶點菜,回複像是服務員上菜,而處理則是在後廚中,廚師根據請求的菜單,準備菜品的過程。
廚師通常是伺服器上的一個應用程式。這個應用程式可以提取請求中的資訊,並根據這些資訊準備回複。這樣的應用程式可以是許多中語言寫成的,比如C, C++, Perl, Ruby, Python, Ruby, PHP等等。由於不同語言的設計理念和編譯器特徵的不同,這些語言寫成的應用程式也有不同的特點(各種各樣的廚師)。比如C和C++語言會有比較高的運行效率,PHP的Web應用廣泛,Ruby和Python開發方便等等。
(在語言之爭中,Web伺服器的“後廚”是一塊兵家必爭之地)
Servlet是Java語言提供的的“廚師”。在Java中,“一切皆對象”。Servlet是一類特殊的Java對象。Java語言利用Servlet對象,來實現對HTTP請求的處理。
範例
下面是一個簡單的Servlet例子,源檔案為TestPage.java:
package foo; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class TestPage extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { PrintWriter out = response.getWriter(); out.println("<html><body>" + "<p>Hello World!</p>" + "</body></html>"); } }
這個Servlet的功能是回複字串"<html><body><p>Hello World!</p></body></html>"。這一段字串實際上是一個HTML文本。它將作為HTTP回複的主體部分,發回給用戶端。
這裡定義了一個TestPage類,該類繼承HttpServlet抽象類別(參考HttpServlet)。我們覆蓋了doGet()方法。doGet()方法處理GET方法的HTTP請求。如果HTTP請求的方法為POST,則應該覆蓋doPost()方法。每個Servlet都應該覆蓋doGet()和doPost()之一。doGet()和doPost()方法接收兩個參數request和response,分別為HttpServletRequest類型和HttpServletResponse類型。這兩個參數分別代表該次HTTP通訊的請求和回複。
HttpServletRequest和HttpServletResponse為兩個介面。在方法的內部,我們可以操作request和response對象。比如,通過response的getWriter方法,來獲得Writer,從而寫入HTML文本。這些寫入的文本將作為HTTP回複的主體傳遞迴用戶端。再比如,我們可以使用request的getMethod()方法來獲知HTTP請求的方法。可以參考下面的官方文檔:
HttpServletRequest的更多方法
HttpServletResponse的更多方法
此外,PrintWriter類來自java.io包。參考Java IO
查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/Java/